Frage zu Interrupt

Gast #71817
Hallo liebes Forum!

Könnte mir mal jemand bei ner Übersetzung helfen bzw. den Text
erklären?

Originaltext Atmel Datenblatt ATMega8:

? Bit 7 ? INTF1: External Interrupt Flag 1
When an event on the INT1 pin triggers an interrupt request, INTF1
becomes set (one).
If the I-bit in SREG and the INT1 bit in GICR are set (one), the MCU
will jump to the corresponding
Interrupt Vector. The flag is cleared when the interrupt routine is
executed.
Alternatively, the flag can be cleared by writing a logical one to it.
This flag is always
cleared when INT1 is configured as a level interrupt.

meine Übersetzung:
Wenn ein Ereignis am INT1 Pin eine Interruptanforderung auslöst, wird
INTF1 gesetzt = 1.
Ist das I bit im Statusregister und das INT1 bit in GICR gesetzt =1,
springt die CPU in den
zugehörigen Interruptvector. das Flag (also INTF1) wird gelöscht wenn
die Interruptroutine
ausgeführt ist.(Also nach deren Abschluss =reti)
Jetzt kommts: Alternativ kann das Flag gelöscht werden durch das
beschreiben mit einer
logischen 1.  (Hä? Was denn nun? ist gelösht nun 1 oder 0?)
Das Flag ist immer gelöscht, wenn INT1 als Level-Interrupt konfiguriert
ist.

soweit-sogut: verstanden hab ich es nicht
Ich hab hier im Forum irgendwo gelesen, das man dieses Flag vor
Beendigung des Interrupt zurücksetzen
soll, damit Ereignisse die bei der Ausführung der Routine auftreten und
dann weitere Interrups
auslösen würden nicht zum Zuge kommen. Diese anstehenden Ereignisse
sollen dadurch gelöscht werden.

Könnte mir einer der Profis hier das mal näher erklären?

Vielen Dank
Gruss Holger
Gast
ist doch fast alles richtig.
Das Flag wird allerdings direkt gelöscht, wenn der Int angenommen wird,
also der Sprung zum entsprechenden Vektor ausgeführt wird. Bei reti
wird das globale I-Flag wieder gesetzt, da normalerweise während einer
ISR keine anderen Ints ausgeführt werden (beim Eintritt in eine ISR
wird das I-Flag erstmal automatisch gelöscht).
Sollte während der Int-Laufzeit das entsprechende Int-Ereignis schon
wieder aufgetreten sein, wird dieses im entsprechenden INTFx
gespeichert, somit erfolgt direkt nach reti + 1 weiterer Befehl wieder
ein entsprechender Int. Will man das vermeiden, kann man direkt vor
reti das Flag löschen.
Gast
Hallo crazy horse,

Danke für deine Hilfe. Eine Frage bleibt nu noch offen:
Wie ist das Bit INTFx denn nun gelöscht? Das ist ja also
sowas wie ein Stapel: tritt wärend ISR ein weiteres Ereignis
ein wird die Anforderung in INTFx obenaufgepackt und dann
ausgeführt wenn es wieder erlaubt ist. Hab ich verstanden.
Nur wie muss ich das Bit denn nun beschreiben wenn ich das
nicht will? Mit 1 oder mit 0?

Danke Für Deine/Eure Gedult mit mir!

gruss Holger

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 22 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.