к примеру в спящий режим тинька уходит в преривании
также и пробуждаеться в нем
соответственно возникает ряд вопросов
допустим в основном коде возникает преривание в котором тинька ушла в сон
затем это же преривание вызываеться вновь но уже как выход из сна
меня интересует вопрос куда вернется програма после окончания преривания выхода из сна
ведь первый вызов преривания в котором тинька ушла в сон не было закончено до конца
собственно оно было прервано сном
режим сна самый легкий idle
преривание по фронтам на ножках
Есть один нюанс. При входе в обработчик снимается флаг глобального разрешения прерываний. После этого вы входите в сон, но выйти из сна уже не сможете. Прерывания то запрещены.
Честно сказать, я не знаю. Не пробовал так делать, у меня команда sleep была вне обработчиков прерываний. Я почитал документацию, мои рассуждения ниже.
в даташите про режимы сна написано : If an enabled interrupt occurs while the MCU is in a sleep mode, the MCU wakes up
(если произойдет разрешенное прерывание, пока микроконтроллер находится в спящем режиме, микроконтроллер проснется)
в даташите в разделе внешних прерываний в описании регистра GIMSK бит INT0 написано : When the INT0 bit is set (one) and the I-bit in the Status Register (SREG) is set (one), the external pin interrupt is enabled.
(Когда бит INT0 установлен и флаг I установлен, прерывание от внешнего вывода разрешено)
следовательно когда бит I не установлен, то прерывание не разрешено.
поскольку при входе в обработчик прерывания флаг I сбрасывается, можно полагать, что прерывание INT0 во время выполнения обработчика не разрешено. Следовательно, если мы усыпим микроконтроллер в обработчике прерывания, то он не проснется от прерывания, поскольку флаг I не установлен.