-
1. Data: 2009-02-13 01:26:39
Temat: AVR - sleep mode, przerwania - co robi po wybudzeniu?
Od: g...@n...invalid (Adam Wysocki)
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.
--
http://www.extreme-photo.pl/
-
2. Data: 2009-02-13 01:45:04
Temat: Re: AVR - sleep mode, przerwania - co robi po wybudzeniu?
Od: Adam Dybkowski <a...@4...pl>
Adam Wysocki pisze:
> 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?
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."
--
Adam Dybkowski
http://dybkowski.net/
Uwaga: przed wysłaniem do mnie maila usuń cyfry z adresu.
-
3. Data: 2009-02-13 06:47:50
Temat: Re: AVR - sleep mode, przerwania - co robi po wybudzeniu?
Od: g...@n...invalid (Adam Wysocki)
Adam Dybkowski <a...@4...pl> wrote:
> W dokumentacji jest wg mnie jasno napisane, że najpierw zostanie
> wykonana funkcja obsługi przerwania, a potem kolejne instrukcje po SLEEP:
Jasne - jakoś mi umknęło. Dzięki!
--
http://www.extreme-photo.pl/
-
4. Data: 2009-02-13 10:12:24
Temat: Re: AVR - sleep mode, przerwania - co robi po wybudzeniu?
Od: "mw158979" <...@t...pl>
"Adam Wysocki" <g...@n...invalid> schrieb
> 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.
...
a nie przeszkadza Ci, ze przerwanie np wystapi
po sprawdzeniu while(!flaga) ale przed sleep_mode();?
hej
-
5. Data: 2009-02-13 20:31:39
Temat: Re: AVR - sleep mode, przerwania - co robi po wybudzeniu?
Od: Adam Dybkowski <a...@4...pl>
mw158979 pisze:
>> volatile uint8_t flaga = 0;
>> [...]
>> while (!flaga)
>> sleep_mode();
>>
>> i flaga będzie ustawiana w przerwaniu.
>
> ....
> a nie przeszkadza Ci, ze przerwanie np wystapi
> po sprawdzeniu while(!flaga) ale przed sleep_mode();?
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.
--
Adam Dybkowski
http://dybkowski.net/
Uwaga: przed wysłaniem do mnie maila usuń cyfry z adresu.
-
6. Data: 2009-02-16 05:29:33
Temat: Re: AVR - sleep mode, przerwania - co robi po wybudzeniu?
Od: g...@n...invalid (Adam Wysocki)
mw158979 <...@t...pl> wrote:
>> while (!flaga)
>> sleep_mode();
>>
>> i flaga będzie ustawiana w przerwaniu.
>
> ...
> a nie przeszkadza Ci, ze przerwanie np wystapi
> po sprawdzeniu while(!flaga) ale przed sleep_mode();?
Słusznie - nie pomyślałem o tym. Dzięki.
--
http://www.extreme-photo.pl/