ATNEL tech-forum
https://forum.atnel.pl/

Przerywanie watchdog na Atmega328p - działa ale dlaczego?
https://forum.atnel.pl/topic22095.html
Strona 1 z 1

Autor:  szymanskim [ 21 mar 2019, o 10:37 ]
Tytuł:  Przerywanie watchdog na Atmega328p - działa ale dlaczego?

Korzystam z Watchdoga w Atmega328p jako dodatkowego timera, która wybudza mi układ z z trybu "Power down".
Wszystko działa natomiast nie do końca rozumiem jedną rzecz. W obsłudzę przerywania WD mam:

Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

Jeśli usunę sei() to już drugi raz sterowanie nie wchodzi w przerywanie.
Specjalnie nie przeszkadza mi rozkaz sei() ale pytanie dlaczego on musi być?
Czy po wejściu w przerywanie WDT_vect przerywania są wyłączane? A może wdt_reset() wyłącza przerywania?
Próbowałem znaleźć odpowiedź w dokumentacji i popatrzylem na kod Mirka (odnosnie lampki) tyle ile dalo sie zobaczyc na youtubie
ale nie znalazłem odpowiedzi, macie jakieś sugestie, odnośnik do dokuementacji?

Michał

Autor:  Jarecki [ 21 mar 2019, o 16:15 ]
Tytuł:  Re: Przerywanie watchdog na Atmega328p - działa ale dlaczego

szymanskim napisał(a):
Specjalnie nie przeszkadza mi rozkaz sei() ale pytanie dlaczego on musi być?


sei() to globalne zezwolenie na przerwania. Może po wejściu w przerwanie od WD z automatu globalne przerwania są wyłączane. Nie mam pojęcia, ale tak mi do głowy przyszło na szybko

Autor:  gordon10 [ 12 kwi 2019, o 13:43 ]
Tytuł:  Re: Przerywanie watchdog na Atmega328p - działa ale dlaczego

Z tego co pamiętam, po wejściu w przerwanie, przerwania automatycznie są wstrzymywane (wykonywana jest instrukcja cli(); ). Po zakończeniu obsługi przerwania, przerwania automatycznie są uruchamiane (instrukcja sei(); ).
Tutaj usypiasz procka jeszcze w przerwaniu, więc trzeba wykonać wcześniej instrukcję sei(); ręcznie, żeby była włączona obsługa przerwań, zanim procek zaśnie. Inaczej uśpisz procka a przerwania będą wyłączone, więc procek się nie wybudzi.

Strona 1 z 1 Strefa czasowa: UTC + 1
Powered by phpBB® Forum Software © phpBB Group
https://www.phpbb.com/