Kanał - ATNEL tech-forum
Wszystkie działy
Najnowsze wątki



Teraz jest 29 mar 2024, o 02:15


Strefa czasowa: UTC + 1





Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 3 ] 
Autor Wiadomość
PostNapisane: 21 mar 2019, o 10:37 
Offline
Użytkownik

Dołączył(a): 14 wrz 2017
Posty: 85
Pomógł: 1

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ł



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 21 mar 2019, o 16:15 
Offline
Użytkownik

Dołączył(a): 23 sty 2014
Posty: 1079
Pomógł: 73

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



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 12 kwi 2019, o 13:43 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 17 lut 2013
Posty: 148
Lokalizacja: KTT
Pomógł: 1

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.

_________________
Gordon



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
Wyświetl posty nie starsze niż:  Sortuj wg  
Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 3 ] 

Strefa czasowa: UTC + 1


Kto przegląda forum

Użytkownicy przeglądający ten dział: Brak zidentyfikowanych użytkowników i 8 gości


Nie możesz rozpoczynać nowych wątków
Nie możesz odpowiadać w wątkach
Nie możesz edytować swoich postów
Nie możesz usuwać swoich postów
Nie możesz dodawać załączników

Szukaj:
Skocz do:  
cron
Sitemap
Technologię dostarcza phpBB® Forum Software © phpBB Group phpBB3.PL
phpBB SEO