... Т.е. в mainloop возврат возможен только в разбуженном виде, и уже в mainloop надо принять решение спать иль не спать
Что значит возврат? засыпание обычно в main-е и делается.
volatile unsigned char AdcReady;
#pragma vector=ADCA_CH0_vect
__interrupt void AdcCycleCompleteInt()
{
AdcReady=1;
}
void main()
{
InitIO();
while (1) {
SLEEP.CTRL=SLEEP_SMODE_IDLE_gc | SLEEP_SMODE_IDLE_gc;// примерно так но может я чего и забыл
__sleep();
if (AdcReady) {
AdcReady=0;
// какие-то действия
}
}
}
После прерывания программа продолжит выполнять код после инструкции sleep. B где-то там решит спать дальше или нет.