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