Hallo, mein Timer löst einen Interrupt aus, wenn er auf 0xffff gezählt hat. Zu beginn der Timer Interrupt-Routine setze ich das Register TCNT1H+ TCNT1L auf einen bestimmten Wert und dann wird der Interrupt weiter ausgeführt. Fängt nun der Timer während der Abarbeitung der Interruptroutine wieder weiter zu zählen an? Was wenn er Timer wieder auf 0xffff gezählt hat, er aber mit der Abarbeitung der Interruptroutine noch nicht fertig ist?
Miriam schrieb: > Hallo, > mein Timer löst einen Interrupt aus, wenn er auf 0xffff gezählt hat. > Zu beginn der Timer Interrupt-Routine setze ich das Register TCNT1H+ > TCNT1L auf einen bestimmten Wert und dann wird der Interrupt weiter > ausgeführt. Das ist eher ungeschickt. Besser wäre die Verwendung des "clear-timer-on-compare-match"-Modus, sofern dein geheimer µC sowas kennt. > Fängt nun der Timer während der Abarbeitung der Interruptroutine wieder > weiter zu zählen an? Der hört nie auf zu zählen, wenn du ihn nicht anhältst. > Was wenn er Timer wieder auf 0xffff gezählt hat, er aber mit der > Abarbeitung der Interruptroutine noch nicht fertig ist? Dann wird das Interrupt-Flag für den Interrupt nochmal gesetzt. Wenn die ISR abgelaufen ist, geht der Prozessor sofort wieder zurück in die ISR. Übrigens: Was hat das eigentlich mit GCC zu tun?
Miriam schrieb: > Fängt nun der Timer während der Abarbeitung der Interruptroutine wieder > weiter zu zählen an? Der Timer ist Hardware und läuft parallel zur CPU einfach weiter. > Was wenn er Timer wieder auf 0xffff gezählt hat, er aber mit der > Abarbeitung der Interruptroutine noch nicht fertig ist? Du mußt dafür sorgen, daß Deine ISR kurz genug ist, damit so etwas nicht passieren kann. Oder anders gesagt: Du mußt Dein System so auslegen, daß die gewünscht Funktion auch erfüllt werden kann. Anonsten hat Du einen Fehler gemacht. Wenn Dein Timer alle 10 Befehlszyklen zuschlägt und Deine ISR 11 Befehle enthält, hast Du das System falsch ausgelegt.
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.