.....INTF1 (External Interrupt Flag 1) Dieses Bit wird gesetzt, wenn am INT1-Pin eine Interrupt-Kondition, entsprechend der Konfiguration, erkannt wird. Wenn das Global Enable Interrupt Flag gesetzt ist, wird die Interruptroutine angesprungen. Das Flag wird automatisch gelöscht, wenn die Interruptroutine beendet ist. Alternativ kann das Flag gelöscht werden, indem der Wert 1(!) eingeschrieben wird. ...... Ist der Interrupt beendet, wenn ich die Routine verlassen habe bzw wird dann erst das Flag gelöscht ? ISR(INT0_vect) { encoder_li = encoder_li+1; if(encoder_li >= enc_wert) { robby_aus(); // Ist auch noch eine Funktion encoder_li=0; encoder_re=0; } }
Das INT-Flag bei flankengetriggerten externen IRQs wird beim ausführen des IRQ-Vektoes zurückgesetzt, d.h. beim ersten Befehl der ISR ist das Bit 0. Die ISR ist mit verlassen der Routine beendet. Auch das Handbuch ist dein Freund, da steht das alles erfreulich gut beschrieben drinne.
...Das INT-Flag bei flankengetriggerten externen IRQs wird beim ausführen des IRQ-Vektoes zurückgesetzt, d.h. beim ersten Befehl der ISR ist das Bit 0.... Dann wird ja schon am Anfang der Interrupt wieder freigegeben obwohl ich mich noch in einer Aufrufschleife/Arbeitsroutine befinde , die ich noch erlegigen muss? mfg
Ja genau. Sollte während der ISR ein weiterer Interrupt auf diesem Pin auftreten, geht er dadurch nicht verloren sondern kann später verarbeitet werden. MfG Mark
Also, hab ich so richtig verstanden? Das Interrupt-Flag für das auftreten des einzelnen Interrupts wird beim Einsprung zurück gesetzt, um keinen Interrupt wärend der Abarbeitung zu verlieren. Das globale Interrupt-Enable-Flag wird beim Verlassen des Interrupts wieder gesetzt.
Korrekt. Wäre der Vollständigkeit halber nur noch anzufügen, dass dies auf viele Interrupt-Quellen der AVRs zutrifft, nicht aber auf alle. Bei manchen leitet sich das Interrupt-Flag anders ab und muss evtl. explizit zurückgesetzt werden. Näheres verrät das Datasheet.
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.