Forum: Compiler & IDEs Timer1 Overflow Interrupt + Programmablauf


von Miriam (Gast)


Lesenswert?

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?

von Rolf Magnus (Gast)


Lesenswert?

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?

von Dosmo (Gast)


Lesenswert?

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
Noch kein Account? Hier anmelden.