Forum: Mikrocontroller und Digitale Elektronik Frage zu Interrupt


von Holger (Gast)


Lesenswert?

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

von crazy horse (Gast)


Lesenswert?

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.

von Holger (Gast)


Lesenswert?

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

von crazy horse (Gast)


Lesenswert?

mit einer 1

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
Noch kein Account? Hier anmelden.