Hallo, Prozessor AVR Atmega8 ich habe eine Frage. Angenommen ich habe ein ICP Interrupt, schalte aber die globalen Interrupts nicht frei, also schreibe im Code kein sei(); Interrupt Vektor ist konfiguriert auf eine Flanke. Was passiert im Prozessor? Wird das Interrupt Flag im Interrupt Status Register für das Input Capture gesetzt? Konkreter: Im Programm treten ICP Interrupts auf, aber globale Interrupts sind nicht freigeschaltet. Nun schaltet das Programm aber die globalen Interrupts irgendwann frei. Wird das Interrupt dann direkt ausgeführt (weil evtl. im Status Register das Flag gesetzt wurde) oder erst beim nächsten Interrupt-Auftritt?
Daniel schrieb: > Wird das Interrupt Flag im Interrupt Status > Register für das Input Capture gesetzt? Ja. Das bleibt dann solange stehen, bis es gelöscht wird. Also üblicherweise beim Sprung auf den Interruptvektor. > Wird das Interrupt dann direkt ausgeführt > (weil evtl. im Status Register das Flag gesetzt wurde) Ja. Wenn du das verhindern willst, musst du das Flag vor dem Aufruf von sei() löschen(1 reinschreiben). mfg.
Überlege mal logisch. Interrupts sind in der Regel nicht nur höllisch eilig, sondern auch höllisch wichtig. Und da wäre es doch saublöd, wenn bei zeitweiliger Interruptsperre (z.B. atomarer Zugriff) alle Interrupts verloren gingen. Auch muß man Interruptereignisse nicht unbedingt in einem Interrupt behandeln. Man kann auch das Interrupt-Pending-Flag per Code testen, rücksetzen und behandeln. Das nennt sich dann Polling. Peter
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.