Forum: Mikrocontroller und Digitale Elektronik Reset interrupt-mask innerhalb der ISR --> Verhalten Interruptflag?


von SAM (Gast)


Lesenswert?

Hallo zusammen,
ich habe mal ne Frage zu Interrupts. In meinem Fall zu externen 
Interrupts.
Mein µC: ATMEGA64M1

Ich habe an einem Eingangspin ein zyklisches Signal. Bei Bedarf möchte 
ich per Interrupt einmalig darauf reagieren (muss dadurch etwas 
synchronisieren).
Ich setze also im EIMSK das INT0 (globales Interrupt-enable-Flag ist 
ebenfalls gesetzt). Interrupt wird ausgelöst und der µC springt die ISR 
an. In dieser setzte ich das INT0 im EIMSK wieder zurück, da ich ja nur 
dieses eine Synchronisationssignal benötigt habe.
Nun meine Frage.
Was passiert mit dem INTF0 im Register EIFR. Laut Datenblatt wird dieses 
gelöscht wenn die ISR abgearbeitet ist.
Ich habe aber das Gefühl, dass INTF0 nicht mehr zurückgesetzt wird, wenn 
in der ISR das INT0 schon davor wieder zurückgesetzt wurde.

Kann das jemand bestätigen? Oder habe ich da ein Verständnisproblem?

von MWS (Gast)


Lesenswert?

Du wirst den Umstand fehlinterpretieren, dass INTF0 bei externem Signal 
auch dann gesetzt wird, wenn INT0 disabled ist. D.h. bei erneutem 
einmaligen Erlauben des Interrupts hat vorher das Flag gelöscht zu 
werden, welches durch zwischenzeitliche Ereignisse gesetzt worden sein 
könnte.

von SAM (Gast)


Lesenswert?

Wow, schon die erste Antwort. Danke. Klingt plausibel.
Wollte gerade noch schreiben wie sich das bei mir bemerkbar macht. Führe 
das der Vollständigkeit halber für die Nachwelt noch hinzu.

Muss nämlich jedes mal INTF0 zurücksetzen (durch setzten auf 1) bevor 
ich den Interrupt erneut enable, da sonst die ISR sofort wieder 
angesprungen wird (auch ohne externes Auslöseevent).

von SAM (Gast)


Lesenswert?

Nur nochmal zum generellen Verständnis:
Bei einem Interrupt wird beim Rücksprung aus der ISR das dazugehörende 
Interruptflag IMMER zurückgesetzt, egal wie in der ISR das zugehörige 
interrupt-enable-Flag steht. Sehe ich das richtig?

von MWS (Gast)


Lesenswert?

Generell bei AVRs wird bei einem Interrupt besagtes Flag durch Ausführen 
des Interruptvektors gelöscht. Damit der Vektor ausgeführt werden kann, 
muss selbiger vorher erlaubt worden sein,  ob der dann bei Ausführen der 
ISR abgeschaltet wird, hat auf die laufende ISR oder das Flag keinen 
Einfluss.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.