Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: LPC2148 ADC0 OVERUN
Форум разработчиков электроники ELECTRONIX.ru > Сайт и форум > В помощь начинающему > ARM, 32bit
MiklPolikov
LPC2148 ADC0 , вроде вроде бы всё предельно просто. Выполняю вот этот кол раз в секунду :



AD0CR|=(1<<1); //выбираем канал

AD0CR|=(1<<24);// запускаем преобразование

while(!(AD0GDR&0x80000000)){} //ждём пока преобразование закончится

ADC_result=AD0GDR; //переписываем в переменную result весь регистр AD0GDR


Но время от времени , нерегулярно, выставляется бит OVERUN , и прочитанный из AD0GDR результат оказывается неправильный. Интересно, почему ?
Terrabyte
- подтверждение прерывания ? VICVectAddr = 0; // Acknowledge Interrupt
- у меня вручную запуск сделан, битом ... init:
AD0CR = tmp | // SEL=1,select channel 0~7 on ADC0
c_CLKDIV_ADC| // CLKDIV = Fpclk / 1000000 - 1
( 0 << 16 ) | // BURST = 0, no BURST, software controlled
( 0 << 17 ) | // CLKS = 0, 11 clocks/10 bits
( 1 << 21 ) | // PDN = 1, normal operation
( 0 << 24 ) | // START = 0 A/D conversion stops
( 0 << 27 ); // EDGE = 0
install_irq( ADC0_INT, (void *)ADC0_Handler, ADC_PR);
...AD0INTEN = 0x100; // Enable AD0GDR DONE interrupt

в прерывании:
rd = AD0GDR; // read data
AD0CR &= 0xF8FFFFFF; // stop ADC now
if (!(rd & BIT30)) {} // overrun ?

- errata LPC23xx:
ADC: ADDRx read conflicts with hardware setting of DONE bit
+ External sync inputs not operational !
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.