Forum: Mikrocontroller und Digitale Elektronik Externer Interrupt


von Greenhorn (Gast)


Lesenswert?

Hallo,

ich habe eine hoffentlich recht einfache Frage. Ich initialisiere den 
externen Interrupt INT7 bei meinem ATmega2560 mit WinAVR, mit folgenden 
Code:

void int7_init()
{
int7_start=0;
int7_end=0;
EICRB=(1<<ISC71) | (1<<ISC70);
EIMSK=(1<<INT7);
}

Meine Frage, warum wird auch das Flag im EIFR Register während dieser 
Initialisierung gesetzt?
Danke

von Sardaukar (Gast)


Lesenswert?

Möglicherweise zum Quitieren eines bereits anstehenden Interrupts?
So ists zumindest beim AT90CAN32. Ansonsten hilft die Dokumentation des 
Teils sicher weiter...

von Greenhorn (Gast)


Lesenswert?

Hallo,

das habe ich mir auch gedacht, doch das globale Interrupt ist noch nicht 
gesetzt wurden.

von johnny.m (Gast)


Lesenswert?

Das Flag wird bei Auftreten eines entsprechenden Ereignisses immer 
gesetzt, auch wenn der Interrupt nicht freigegeben ist! Die (lokale 
und/oder globale) Freigabe geben nur die automatische Bearbeitung, also 
das Auslösen einer Unterbrechung frei. Wenn am externen Interrupt-Pin 
ein entsprechendes Signal ankommt, dann wird das Flag immer gesetzt. 
Deshalb ist es meist sinnvoll, vor der Freigabe eines Interrupt das 
betreffende Flag explizit zu löschen.

von Greenhorn (Gast)


Lesenswert?

Danke @johnny.m

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.