AVR: External Interrupt Flag Register (EIFR) löschen

Gast #4774381
Lesenswert?
• ▲
▼
Hallo,

ich hab eine vielleicht etwas blöde Fragen zum löschen von Flags im 
External Interrupt Flag Register (EIFR) eines AVRs (konkret at90can128). 
Ich möchte das Register pollen um Änderungen an Pins zu detektieren 
(setzen wir mal voraus, dass es in dem konkreten Kontext Sinn macht, 
hier keine ISR zu triggern). Ich habe das Datenblatt soweit verstanden, 
dass ich ein Flag in diesem Register lösche, indem ich es setze ("[...] 
the flag can be cleared by writing a logical one to it."). Angenommen 
ich möchte das komplette Register nach dem Auslesen zurücksetzen, 
schreibe ich dann

a) seinen unmittelbar vormaligen Zustand in das Register zurück, sodass 
nur dort das Flag gelöscht wird, wo es vormals gesetzt war

oder

b) kann ich einfach 0xFF in das Register schreiben und somit alle Flags 
löschen, also auch die, die vorher nicht gesetzt waren.

Die Frage ist dabei natürlich, welche Funktion eine zurückgeschriebene 0 
für das Flag hat.

Kann jemand dazu etwas sagen?

Vielen Dank!
#4774401
Lesenswert?
• ▲
▼
mpunkt schrieb:
> a) seinen unmittelbar vormaligen Zustand in das Register zurück, sodass
> nur dort das Flag gelöscht wird, wo es vormals gesetzt war

Ja. Man löscht mit gesetzen Bit genau jene, die man bearbeitet hat und 
löschen will.

> b) kann ich einfach 0xFF in das Register schreiben und somit alle Flags
> löschen, also auch die, die vorher nicht gesetzt waren.

Ja, das geht auch. Aber man löscht dann wirklich alle.

> Die Frage ist dabei natürlich, welche Funktion eine zurückgeschriebene 0
> für das Flag hat.

Keine.

Der Sinn des zunächst irritierenden Verfahrens liegt darin, nur jene 
Flags zu löschen, die man schon als gesetzt identifiziert hat. Löscht 
man mit 0xFF alle, dann löscht man auch jene, die seit dem Auslesen neu 
gesetzt wurden. Die gehen dann verloren.
Gast #4774456
Lesenswert?
• ▲
▼
Es ist schon manchmal günstig, Interrupt-Flags als Merker
für stattgefundene Ereignisse zu nutzen.
So z.B. wenn eine anderere Interruptroutine mit minimaler
Verzögerung bearbeitet werden soll.

Ein weiterer Vorteil des Flag-Löschens ist, dass bei der Freigabe
eines Interrupts dieser nicht sofort durch veraltete Ereignisse
ausgelöst wird.

Antwort schreiben

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

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.