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?
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.
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).
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?
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.