есть чип F2012 с включенными шим и ацп. работаю в IAR 4.21.2. ацп будит проц из LPM0 когда готово измерение. дальше решаем что делать - продолжать работать или подать сигнал о завершении.
суть проблемы в следующем: первая функция входа в сон выполняется один раз из 20-ти, вторая (внутри цикла) всегда. то есть процессор на первой функции чето выполняет и.. идет дальше, не заморачиваясь на всякие там прерывания с участием АЦП.
со второй функцией все ок, если в нее попасть. доходим, ждем, прыгаем в прерывание, сравниваем - все по логике.
в даташите сказано, что при установке бита CPUOFF подействовать должно "мгновенно". неужели функция криво выполняется именно в этом месте?
можно ли руками, без intrinsic записать нужные биты? веть если как указано словом писать что делать с N Z и С в регистре SR?
p.s. сломал голову, отладку и один eZ430U
Код
//если нажат P1.3*************************************************
if (!(BIT3 & P1IN))
{
ADC10CTL1 = INCH_0; // input A1
ADC10AE0 |= BIT0; // PA.0 ADC option select
ADC10CTL0 = ADC10ON + ADC10IE; //interrupt enabled
ADC10CTL0 |= ENC + ADC10SC; // Sampling and conversion start
//__bis_SR_register(CPUOFF + GIE); // LPM0, ADC10_ISR will force exit
__low_power_mode_0();
//конфигурим шим
P1DIR |= BIT2; // P1.2 = output
P1SEL |= BIT2; // P1.2 = TA1 output
while (ADC10MEM > 0x2E1) //пока акум выше 10,8 вольт
{
P1OUT |= BIT7; //зажеч P1.7 (желтый)
ADC10CTL0 |= ENC + ADC10SC; // Sampling and conversion start
// __bis_SR_register(CPUOFF + GIE); // LPM0, ADC10_ISR will force exit
__low_power_mode_0();
if (ADC10MEM > 0x311) // если акум больше 11,5 V
TACCR1 = 511; // TACCR1 PWM Duty Cycle 100%
else
TACCR1 = 255; // TACCR1 PWM Duty Cycle 50%
}//конец while