AVR - sleep mode, przerwania - co robi po wybudzeniu?

Cześć,

AVR zostaje wybudzony z idle sleep przez przerwanie - np. przerwanie TWI. Czy jest szansa, że wykona chociaż kilka instrukcji w normalnym przebiegu, czy na pewno zawsze pierwsze co wykona to przerwanie, a dopiero potem wróci do normalnego przebiegu?

Pytam bo chcę zrobić:

volatile uint8_t flaga = 0; [...] while (!flaga) sleep_mode();

i flaga będzie ustawiana w przerwaniu.

Reply to
Adam Wysocki
Loading thread data ...

Adam Wysocki pisze:

W dokumentacji jest wg mnie jasno napisane, że najpierw zostanie wykonana funkcja obsługi przerwania, a potem kolejne instrukcje po SLEEP:

"If an enabled interrupt occurs while the MCU is in a sleep mode, the MCU wakes up. The MCU is then halted for four cycles in addition to the start-up time, executes the interrupt routine, and resumes execution from the instruction following SLEEP."

Reply to
Adam Dybkowski

Jasne - jakoś mi umknęło. Dzięki!

Reply to
Adam Wysocki

mw158979 pisze:

Przerwanie może wystąpić tuż przed wykonaniem instrukcji SLEEP - wg mnie sensowne wtedy byłoby (w przerwaniu) wykrycie takiej sytuacji i wyłączenie możliwości zaśnięcia tak aby SLEEP nie zadziałał. Można makro sleep_mode() rozbić na sleep_enable(); sleep_cpu(); sleep_disable() i w przerwaniu właśnie dodać sleep_disable(). Wtedy procek nie zaśnie w tym obiegu pętli while.

Reply to
Adam Dybkowski

Słusznie - nie pomyślałem o tym. Dzięki.

Reply to
Adam Wysocki

ElectronDepot website is not affiliated with any of the manufacturers or service providers discussed here. All logos and trade names are the property of their respective owners.