Witam,
Używam przerwania zewnętrznego na INT0 w konfiguracji na zbocze opadające.
Funkcja przerwania jest definiowana w ten sposób:
Wszystko działa bardzo dobrze, oprócz jednej rzeczy. W przerwaniu wykonuje się kod, który powoduje powstanie zbocza opadającego na pinie, z którego jest wywoływane przerwanie. Jest on wykonywany tylko raz. Przy kolejnym wejściu do przerwania INT0 nie jest wykonywany ten kod.
Pomimo zastosowania parametru ISR_BLOCK uC jeszcze raz wykonuje przerwanie. Wygląda na to, że jest odkładane wywołanie przerwania na stos, a zaraz po zakończeniu pierwszego Atmega wskakuje do tego odłożonego na stosie.
Co można w takiej sytuacji zrobić?
Dodam również, że wszystkie zmienne używane w ciele przerwania są zaopatrzone słowem violatile, także proszę nie szukać tam problemu.
Używam przerwania zewnętrznego na INT0 w konfiguracji na zbocze opadające.
Funkcja przerwania jest definiowana w ten sposób:
Kod: C / C++
Wszystko działa bardzo dobrze, oprócz jednej rzeczy. W przerwaniu wykonuje się kod, który powoduje powstanie zbocza opadającego na pinie, z którego jest wywoływane przerwanie. Jest on wykonywany tylko raz. Przy kolejnym wejściu do przerwania INT0 nie jest wykonywany ten kod.
Pomimo zastosowania parametru ISR_BLOCK uC jeszcze raz wykonuje przerwanie. Wygląda na to, że jest odkładane wywołanie przerwania na stos, a zaraz po zakończeniu pierwszego Atmega wskakuje do tego odłożonego na stosie.
Co można w takiej sytuacji zrobić?
Dodam również, że wszystkie zmienne używane w ciele przerwania są zaopatrzone słowem violatile, także proszę nie szukać tam problemu.