Salute!

Необходимо брать отсчет по двум каналам АЦП без джиттера. Возникла идея использовать механизм запуска измерения от таймера. Сделано примерно так:

Код
SetPwrDn(true);                                      // включить АЦП
InputOnMask(0xFF);                                // вкючить все каналы
SetIntMask(1<<1);                                  // прерывание после завершения измерения по второму из них
SetSampleClock(4500000L);                      // частота тактироания АЦП
SetResBitNum(10);                                  // разрешение в 10 бит
SetFiq();                                               // установить указатель на обработчик FIQ
StartType(CAdcDeviceBase::ENoStart);     // выставить бит BURST
SetBurst(true);
StartType(CAdcDeviceBase::EOnMatSecSec);  // запуск по каналу MAT1.1

// настраиваем таймер
Reset();
SetPreDiv(0);        
// настраиваем перезагрузку счетчика и действие
// (канал, прерывание, перезагрузка, остановка, значение, действие)
SetMatchAction(1, false, true, false, 180000L, CTimerDeviceBase::ESetHi);
ClrExtMatchOut(1);                               // сбросить выход в 0
Start();


далее в обработчике FIQ:


Код
unsigned i = 0;                             // считать все результаты
for(i=0; i<8; ++i){                        // этим, также, сбрасывается прерывание
     AdcData_t Dat = ReadCurVal(i);
}

StartType(CAdcDeviceBase::ENoStart);  // Прерываем оцифровку по BURST
SetBurst(false);
SetBurst(true);                                  // подготовились к следующему циклу
StartType(CAdcDeviceBase::EOnMatSecSec);

ClrExtMatchOut(1);                             // сбросить выход MAT1.1



Проблема заключается в том, что когда этот механизм применяется к одному каналу, без использования сканирования по BURST, то все прекрасно работает. Если использовать просто BURST, без таймера, то тоже все хорошо. А вот так не хочет.


Все ли правильно запущено и проинициализированно?
Возможен ли подобный режим вообще?



Best regards, Sergei