Timer im Interrupt laufen lassen oder stoppen?

Gast #4170774
Lesenswert?

Hallo,
ich habe einen Timer programmiert und er funktioniert auch so wie er 
soll. Das was ich nicht gesetzt habe, ist, dass der Timer während des 
Interrupts aufhört zu zählen. Ich weiss, welches Bit ich setzen muss. Da 
ich das bit nicht explizit gesetzt habe, zählt dieser in im Interrupt 
weiter.
Ich wollte aber mal nachfragen, was man üblicherweise macht bzw. wann 
der timer weiterzählen soll und wann nicht.
#4170781
Lesenswert?

Welche Aufgabe hat denn dein Timer?

In den meisten Fällen übernimmt der ja die Aufgabe einer Art 'Uhr'. Die 
soll aber weiterlaufen, denn du willst ja die Uhrzeit nicht verlieren, 
nur weil irgendetwas zu einer bestimmten Zeit passiert. Oder bleibt dein 
Wecker morgens stehen, wenn er läutet?


Der Normalfall ist eigentlich, dass man einen Timer durchlaufen lässt. 
Immer. Timer stoppen und neu starten ist eher die Ausnahme.
Gast #4170787
Lesenswert?

Karl Heinz schrieb:
> Der Normalfall ist eigentlich, dass man einen Timer durchlaufen lässt.
> Immer. Timer stoppen und neu starten ist eher die Ausnahme.

Hauptsache die ISR zum Timer ist deutlich schneller als der 
Timerintervall. Sonst brauchst du eine reentrante ISR oder du verpasst 
Ticks..
Gast #4170844
Lesenswert?

Wie bereits richtig gesagt wurde, soll der Timer ja weiter laufen, 
ansonsten hättest du als echte Frequenz die Zeit zwischen den Interrupts 
plus die Zeit während der der Interrupt gestoppt ist (ausser du 
berechnest die Stopdauer und rechnest das auf den Reloadwert um, aber 
das macht keinen Sinn).

Da du nicht schreibst welchen Controller du verwendest:
Es gibt frühe Controllerarchitekturen, bei denen der Timer manuell 
nachgeladen werden muss, z.B. Timer 0/1 im 16-Bit-Modus beim 8032.
Hier tritt dann der Effekt auf, dass zwischen auftreten des Interrupts 
und Einsprung sowie Sichern der Register auch noch ein paar Takte 
verloren gehen.
In dem Fall würde man den Timer stoppen, den Reloadwert aufaddieren und 
die Takte die für die Addition benötigt werden abziehen.
Das verlängert zwar die ISR etwas, aber es sorgt dafür dass es ein 
vollwertiger Timer auch im 16-Bit-Modus wird (im 8-Bit-Modus gibt 
HW-AutoReload).

Ralf

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren