Если в функции обработки прерывания по завершению преобразования АЦП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) { } } Может, кто подскажет?
|