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: 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/ |