Российский производитель и разработчик сертифицированного измерительного оборудования с 1987 года


L1450 и lcdrv

Вы не вошли.

 Поиск | Регистрация | Вход 

kelt
25.03.2004 11:48:21
#1

Гость

L1450 и lcdrv

У кого реально работает функция read,
напишите плиз версию драйверов, ядра и gcc

Стас
25.03.2004 12:49:50
#2

Гость

Re: L1450 и lcdrv

проверь:
- девайс зарегистрирован или нет
- прошёл ли тест загрузки лбиоса

kelt
25.03.2004 14:43:31
#3

Гость

Re: L1450 и lcdrv

Все прошло
Одиночные каналы читаются
Параметры задаются
Под досом карта работает

Не работает read
Такое ощущение что не запускается ADC и данных в буфере нет

Стас
25.03.2004 15:17:42
#4

Гость

Re: L1450 и lcdrv

У меня плата L761 поэтому могут быть отличия. Чтобы читать ldspRead() надо правильно задать параметры сбора - тайминг, синхронизацию, таблицу каналов. Если можешь читать одиночные отсчёты, значит ацп работает. Проверяй параметры.

kelt
25.03.2004 15:21:56
#5

Гость

Re: L1450 и lcdrv

я бы тоже на это подумал, но lreg не работает
пробовал уже
slackware 2.4.22
asp 2.4.20
lcdrv версий 1.0.19 1.0.22 1.0.22
на разных компах
картина та же
при этом, под ДОС все работает

Стас
25.03.2004 16:11:39
#6

Гость

Re: L1450 и lcdrv

Я не думаю, что И.Горинов не запускал lreg для проверки;)) Вместо названий дистрибутивов написал бы  назначенные плате ресурсы, сообщения ядра при инициализации, параметры сбора. А так тебе никто не сможет ничего сказать, тем более что Иван в фирме ЛКард уже не работает. Единичные отсчёты читаются в линуксе или в досе?

kelt
25.03.2004 16:54:51
#7

Гость

Re: L1450 и lcdrv

ед.отсчеты в linuxe работают
не работает конкретно драйвер l1450, конкретно на сканирование нескольких каналов (drv1450.c)

версия 1.0.22 под ядром 2.4.20 отработала
под 2.4.22 не работает

1.0.25 не работает ни при каких условиях

kelt
25.03.2004 17:10:32
#8

Гость

Re: L1450 и lcdrv

Зря оговорил 1.0.22
работают
устал просто уже smile

1.0.25 совершенно точно не работают

Стас
26.03.2004 11:20:15
#9

Гость

Re: L1450 и lcdrv

Приведи свои параметры сбора, например один из моих тестов:

// Device name [d]
dname = "/dev/xdsp0";

// Output file name [o]
fname = "myfile1.out";

// Number of frames [c]
total_frames = 8;

// Buffer size in frames [b]
buf_frames = 0x400; //1024 frames

// Fragment size in samples [f]
samples_in_frame = 16;

// Sync options [s]
lsync = 1; // sync ON

// Frame Sync mode [s]
sm.sync_type |= SYNC_TYPE_FRAME;

// Timing           [z]
// 525mks = 519mks + 6mks
ft.frame_rate = 1923;   // Frame frequency, Hz
ft.channel_rate = 125000;   // ADC frequency, Hz

// Channels quantity    [n]
channels = 16;

// Load channel table from file [l]
tabfname = "test2.tab";

// Channel table        [t]
memset(&ci, 0, sizeof(channel_inf));
j = table_size;
ch[j] = ci;
table_size = j + 1;


потом по тексту drv1450.c вставляй printk() и проверяй всё по-порядку. Ничего лучшего предложить не могу.

Стас
26.03.2004 11:22:29
#10

Гость

Re: L1450 и lcdrv

html к кавычкам добавил слэш /

kelt
26.03.2004 12:24:50
#11

Гость

Re: L1450 и lcdrv

я в принципе уже разобрался
в 1.0.25 в drv1450.c была ошибка
пофиксил

Стас
26.03.2004 13:17:18
#12

Гость

Re: L1450 и lcdrv

в каком месте была ошибка?

kelt
27.03.2004 12:33:55
#13

Гость

Re: L1450 и lcdrv

ошибка в device_ioctl
вместо АЦП запускался ЦАП и наоборот,
плюс небольшой глюк со статусом

было:

case SNDCTL_DSP_SETTRIGGER:
  {
   fifo_buf *fb;
   int f_adc, f_dac;

   get_user(l, (int*) param);
   f_adc = f_dac = 0;
   if(l & PCM_ENABLE_INPUT)
   {
    fb = &b->InBuf;
    fb->head = fb->tail = 0;
    atomic_set(&fb->count, 0);
    b->trigger |= PCM_ENABLE_OUTPUT;
    f_adc = 1;
   }
   if(l & PCM_ENABLE_OUTPUT)
   {
    fb = &b->OutBuf;
    fb->head = fb->tail = 0;
    atomic_set(&fb->count, 0);
    b->trigger |= PCM_ENABLE_INPUT;
    f_adc = f_dac = 1;
   }

нужно:

case SNDCTL_DSP_SETTRIGGER:
  {
   fifo_buf *fb;
   int f_adc, f_dac;

   get_user(l, (int*) param);
   f_adc = f_dac = 0;
   if(l & PCM_ENABLE_INPUT)
   {
    fb = &b->InBuf;
    fb->head = fb->tail = 0;
    atomic_set(&fb->count, 0);
    b->trigger |= PCM_ENABLE_INPUT;
    f_adc = 1;
   }
   else
    b->trigger &= ~PCM_ENABLE_INPUT;
   
   if(l & PCM_ENABLE_OUTPUT)
   {
    fb = &b->OutBuf;
    fb->head = fb->tail = 0;
    atomic_set(&fb->count, 0);
    b->trigger |= PCM_ENABLE_OUTPUT;
    f_adc = f_dac = 1;
   }
   else
    b->trigger &= ~PCM_ENABLE_OUTPUT;
   
   start1450(b, f_adc, f_dac);
  }
  break;

Кстати, с переводом запуска АЦП/ЦАП из read/write  в отдельный вызов SETTRIGGER, потери на переключения существенно снизились (у меня с дровами 1.0.22 при многократном чтении при 100Кгц
реально выходило 93.5, а с 1.0.25 где-то 99.8)

kelt
27.03.2004 12:45:24
#14

Гость

Re: L1450 и lcdrv

еще в lreg какая-то ошибка с установкой частоты
или в библиотеке ldsplib
я ни тем ни другим не пользуюсь, а просто так искать лениво было

cat /dev/xdsp0 тоже больше не действует
т.к. read больше не запускает АЦП

Стас
29.03.2004 09:47:55
#15

Гость

Re: L1450 и lcdrv

> еще в lreg какая-то ошибка с установкой частоты
> или в библиотеке ldsplib

Скорее ты просто не разобрался с таймингом, видимо для твоей задачи это не критично. У меня все работает, но плата L761. При задании тайминга пользуешься параметром rate или Fацп+Fкадр?


> при многократном чтении при 100Кгц реально выходило
> 93.5, а с 1.0.25 где-то 99.8

Странно, у меня такого не наблюдается. Кроме принятия данных от ацп что-нибудь с платой делается (цап etc) или нет?

kelt
30.03.2004 16:26:06
#16

Гость

Re: L1450 и lcdrv

Дело в том, что в старых версиях драйвера для
L1450 при каждом вызове read уже накопленные
в буфере данные сбрасывались. Справедливо именно для L1450, у L761 свой драйвер и работать
он может по-другому.