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


Сброс счетчика адреса буферов ЦАПа

Вы не вошли.

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

Геннадий
12.12.2011 12:14:50
#1

Гость

Сброс счетчика адреса буферов ЦАПа

Добрый день.

Пишу на Builder C++. Есть непрерывно работающий поток сбора с АЦП.  Периодически запускается и останавливается поток выдачи с ЦАПа. Необходимо сбрасывать  счетчики буферов ЦАПа как на плате , так и в PC , чтобы начинать выдачу сигнала с начала.

В документации к L791 написано:
При установке бита DAC_En в 0 значения адресов для буфера ЦАП на плате L-791 и буфера ЦАП в памяти PC сохраняют свои значения. Для сброса адресов буферов ЦАП в 0 служит бит Clr_DAC_Cnt регистра управления. Счетчики адресов будут сброшены до тех пор, пока Clr_DAC_Cnt=’1’. Для нормальной работы ЦАП необходимо установить Clr_DAC_Cnt в ’0’.

Делаю так:

void  PuskDACThread() //Поток ЦАПа
  {
    UINT i,j,k,CountHalf;
    DACStop = false;
    DACWork = true; 
  // ЦАП остановлен.

//Пытаюсь сбросить счетчики адреса буферов (Clr_DAC_Cnt=’1’). Не получается.
//=============================================================
  syncDA[I_CONTROL_L791] = syncDA[I_CONTROL_L791] | 0x00040000;
//или
//syncDA[I_CONTROL_L791] = SETBIT(syncDA[I_CONTROL_L791], BIT_CLR_DAC_CNT);

  // Устанавливаю новую частоту выдачи
    syncDA[I_DAC_TIME_L791] =  20000/(Freq * 1.024) – 1;

// Заполняю буфер PC данными из массива и устанавливаю точки прерываний.
  for(i=0;i<128;i++)
     {
       for(j=0;j<1024;j++)dataDA[1024 * i + j]=Mas[j];
       dataDA[1024 * i + 511]  = dataDA[1024 * i + 511]  | 0x80000000;
       dataDA[1024 * i + 1023] = dataDA[1024 * i + 1023] | 0x80000000;
     }

//Восстанавливаю Clr_DAC_Cnt в ’0’
syncDA[I_CONTROL_L791] = syncDA[I_CONTROL_L791] & 0xFFFBFFFF;
//или
// syncDA[I_CONTROL_L791]  = //CLEARBIT(syncDA[I_CONTROL_L791],BIT_CLR_DAC_CNT);

//Запускаю ЦАП   
syncDA[I_CONTROL_L791] = syncDA[I_CONTROL_L791] | 0x00010000;

CountHalf = 0;
//Собираю нужное колличество половинок
while(CountHalf != NumHulf)
    {
        WaitForSingleObject(DACEvent,INFINITE);
        ResetEvent(DACEvent);
        CountHalf++;
    }
   // Останавливаю ЦАП
   syncDA[I_CONTROL_L791] = syncDA[I_CONTROL_L791] & 0xfffEffff;
}

В результате при каждом новом запуске  вижу:
C начала выдается сигнал из буфера платы. (часть предыдущего сигнала).
За тем начинает выдаваться новый сигнал, но с адреса на котором был остановлен ЦАП. 

Помогите пожалуйста.

12.12.2011 12:46:10
#2

Сотрудник "Л Кард"
Откуда: Москва
Здесь с 23.04.2014
Сообщений: 3,727

Re: Сброс счетчика адреса буферов ЦАПа

В чем причина не скажу, но в драйвере останавливается не только ЦАП но и басмастер ЦАП. Обнуление вроде как рабтает.А почитать DAC_PCI_Count и DAC_Buf_Adr после попытки обнуления?

Геннадий
12.12.2011 13:51:09
#3

Гость

Re: Сброс счетчика адреса буферов ЦАПа

DAC_PCI_Count не обнуляется точно. Я обошел эту проблему тем что смещаю данные в буфере PC на DAC_PCI_Count а буфер платы обнуляю, но это както коряво.

Контакты

Адрес: 117105, Москва, Варшавское шоссе, д. 5, корп. 4

Многоканальный телефон:+7 (495) 785-95-25

Письма и запросы: lcard@lcard.ru
Отдел продаж: sale@lcard.ru
Техническая поддержка: support@lcard.ru

Время работы: с 9-00 до 19-00 мск