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
Möglicherweise zum Quitieren eines bereits anstehenden Interrupts? So ists zumindest beim AT90CAN32. Ansonsten hilft die Dokumentation des Teils sicher weiter...
Hallo, das habe ich mir auch gedacht, doch das globale Interrupt ist noch nicht gesetzt wurden.
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.
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.