к примеру в спящий режим тинька уходит в преривании
также и пробуждаеться в нем
соответственно возникает ряд вопросов
допустим в основном коде возникает преривание в котором тинька ушла в сон
затем это же преривание вызываеться вновь но уже как выход из сна
меня интересует вопрос куда вернется програма после окончания преривания выхода из сна
ведь первый вызов преривания в котором тинька ушла в сон не было закончено до конца
собственно оно было прервано сном
режим сна самый легкий idle
преривание по фронтам на ножках
спящий режим и преривания в attiny
- Реклама
-
uk8amk
- Поставщик валерьянки для Кота
- Сообщения: 2222
- Зарегистрирован: Вт ноя 27, 2007 11:32:06
- Откуда: Tashkent
Re: спящий режим и преривания в attiny
Есть один нюанс. При входе в обработчик снимается флаг глобального разрешения прерываний. После этого вы входите в сон, но выйти из сна уже не сможете. Прерывания то запрещены.
- ibiza11
- Поставщик валерьянки для Кота
- Сообщения: 1900
- Зарегистрирован: Сб фев 21, 2009 13:11:40
- Откуда: Москва
Re: спящий режим и преривания в attiny
Честно сказать, я не знаю. Не пробовал так делать, у меня команда 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 не установлен.

в даташите про режимы сна написано :
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 не установлен.
Ставим плюсы: )
Re: спящий режим и преривания в attiny
даже если разрешить прерывания в обработчике прерывания
, то все накроется медным тазом. про стек не забываем.
- ibiza11
- Поставщик валерьянки для Кота
- Сообщения: 1900
- Зарегистрирован: Сб фев 21, 2009 13:11:40
- Откуда: Москва
Re: спящий режим и преривания в attiny
при необходимости можно написать так, что не накроется)
Ставим плюсы: )
- Реклама
Re: спящий режим и преривания в attiny
значит мне тоже придеться сделать так чтоб сон вызывался из основной
проги
проги


