e-not 0 25 февраля, 2006 Опубликовано 25 февраля, 2006 · Жалоба Если в функции обработки прерывания по завершению преобразования АЦП0 я после чтения результата вставлю запуск очередного преобразования (AD0CR_bit.START = 1), то контроллер виснет. Но если в функции обработки прерывания я устанавливаю флаг завершения преобразования, а следующее преобразование запускаю в main, то все работает. // так работает void ADC0Init() { PINSEL0_bit.P0_5 = 0x03; AD0CR_bit.SEL = 0x80; AD0CR_bit.CLKDIV = 5; AD0CR_bit.BURST = 0; AD0CR_bit.CLKS = 0; AD0CR_bit.PDN = 1; AD0CR_bit.START = 0; } void ADC0_int() { AdcResult = AD0DR_bit.VVDDA; //AdcResult и AdcReady - глобальные AdcReady = 1; } void main() { AD0CR_bit.START = 1; while (1) { if (AdcReady ) { AdcReady = 0; AD0CR_bit.START = 1; } } } // так виснет void ADC0_int() { AdcResult = AD0DR_bit.VVDDA; AD0CR_bit.START = 1; } void main() { AD0CR_bit.START = 1; while (1) { } } Может, кто подскажет? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
defunct 0 25 февраля, 2006 Опубликовано 25 февраля, 2006 · Жалоба я устанавливаю флаг завершения преобразования, а следующее преобразование запускаю в main, то все работает. .... Может, кто подскажет? Что же вам еще подсказать, если и так все работает? ps: не вижу смысла в запуске АЦП в прерывании от АЦП. Вы насильно вводите систему с состояние коллапса. Другое дело запускать AЦП по прерыванию таймера с заданной частотой дискретизации, а по прерыванию от АЦП считывать рез-тат АЦП. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
e-not 0 25 февраля, 2006 Опубликовано 25 февраля, 2006 · Жалоба Спасибо за совет. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
zltigo 0 25 февраля, 2006 Опубликовано 25 февраля, 2006 · Жалоба AD0CR_bit.CLKDIV = 5; Для такой частоты тактировки ADC у Вас просто захлебывается контроллер - за 66 тактов он даже из обработчика перывания (если у Вас после START и возврата в обертку еще команды есть, то наверняка) может не успеть выйти. При тактировки "разумными" частотами проблем не будет. Естественно, что и для "рабочего" варианта Вы не получите полного потока отсчетов - они просто массово теряются. Подумайте над необходимой Вам частотой отсчетов. Вообще в START из обработчика абсолютно ничего противоестественного нет. Хотя может Вам просто BURST mode нужен? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
TanT 0 27 марта, 2009 Опубликовано 27 марта, 2009 · Жалоба В LPC2378 может быть выбран только один канал АЦП или данные можно получать с нескольких каналов? Мне одновременно требуется обрабатывать два канала АЦП, крутил, вертел и ничего - тока по одному получается. Прерывание может быть от любого канала, но в этот момент хотелось бы принять данные с обоих каналов. Реально такое осуществить? Как? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
etoja 0 27 марта, 2009 Опубликовано 27 марта, 2009 · Жалоба В LPC2378 может быть выбран только один канал АЦП или данные можно получать с нескольких каналов? Мне одновременно требуется обрабатывать два канала АЦП, крутил, вертел и ничего - тока по одному получается. Прерывание может быть от любого канала, но в этот момент хотелось бы принять данные с обоих каналов. Реально такое осуществить? Как? Изначально вопрос был о LPC2138. В нём можно запускать синхронно два АЦП. Проверено на частотах квантования до 450КГц. При этом устанавливал PCLK = CCLK, то есть частота периферии равна частоте ядра. Внуртенняя частота АЦП должна быть не выше 4.5МГц (требование даташита). Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
TanT 0 27 марта, 2009 Опубликовано 27 марта, 2009 · Жалоба Изначально вопрос был о LPC2138. В нём можно запускать синхронно два АЦП. Проверено на частотах квантования до 450КГц. При этом устанавливал PCLK = CCLK, то есть частота периферии равна частоте ядра. Внуртенняя частота АЦП должна быть не выше 4.5МГц (требование даташита). В LPC2378 я не обнаружил два регистра управления. А 2138 в наличии увы не имею. То есть хоть расшибись одновременно два канала АЦП на 2378 не обработать? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
HARMHARM 0 27 марта, 2009 Опубликовано 27 марта, 2009 · Жалоба В LPC2378 я не обнаружил два регистра управления. А 2138 в наличии увы не имею. То есть хоть расшибись одновременно два канала АЦП на 2378 не обработать? Обрабатывать можно, измеряться будут последовательно - BURST mode. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться