Reset interrupt-mask innerhalb der ISR --> Verhalten Interruptflag?

Gast #5304308
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?
Gast
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.
Gast
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).
Gast
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?
Gast
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.

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 8 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.