Hallo liebe Leute, ich bin eigentlich Java-Entwickler und die Programmierung in Assembler ist ganz schön ungewohnt. Ich habe einen ATmega8, dessen Timer 0 bei Overflow einen Interrupt auslöst (TOV0). Gleichzeitig werden via USART Daten empfangen, und zwar auch über Interrupts (RXC). Was passiert nun, wenn der RXC-Handler ausgeführt wird und währenddessen ein TOV0-Interrupt auftritt? Bei Aufruf des RXC-Handlers werden Interrupts ja zunächst global deaktiviert. Geht der TOV0-Event verloren oder wird er nach Beenden des RXC-Handlers "nachgeholt"? Im Manual auf Seite 15 wird auch von zwei Interrupt-Typen gesprochen, aber dann wird nicht erklärt welcher Interrupt welchen Typ hat. Ich freue mich über jeden Hinweis! Danke schon mal und viele Grüße, Dennis
@ Dennis Müller >Ich habe einen ATmega8, dessen Timer 0 bei Overflow einen Interrupt >auslöst (TOV0). Gleichzeitig werden via USART Daten empfangen, und zwar >auch über Interrupts (RXC). Was passiert nun, wenn der RXC-Handler >ausgeführt wird und währenddessen ein TOV0-Interrupt auftritt? Bei >Aufruf des RXC-Handlers werden Interrupts ja zunächst global >deaktiviert. Geht der TOV0-Event verloren oder wird er nach Beenden des >RXC-Handlers "nachgeholt"? Er wird nachgeholt. Verpasst wird er nur, wenn dein RXC Interrupt länger dauert als ein kompletter Timeroverflowzyklus. Das sollte aber bei richtger Programmierung nicht passieren. MfG Falk
Interrupt-Flags werden beim Auftreten des dazugehörigen Ereignisses immer gesetzt, auch wenn die Interrupt-Bearbeitung gesperrt ist (global durch gelöschtes I-Bit im SREG und/oder lokal durch das betreffende Interrupt-Enable-Bit). Wird die Bearbeitung wieder freigegeben, dann werden alle anstehenden aktiven Interrupts, deren Flags gesetzt sind, der Reihe nach abgearbeitet (Reihenfolge nach Adresse in der Vektortabelle, niedrigste Adresse wird als erste bearbeitet). Ein Ereignis geht nur dann verloren, wenn während der Bearbeitungssperre das betreffende Hardware-Ereignis mehrfach auftritt (also in Deinem Beispiel wenn während der UART-Interrupt-Subroutine mehrere Timer-Überläufe auftreten). Deshalb sollte man Interrupt-Handler so kurz wie möglich halten.
Danke für eure schnellen Antworten! Das mit dem Nachholen hatte ich gehofft, denn so wird alles ein bischen besser nachvollziehbar. Viele Grüße, Dennis
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.