Forum: Mikrocontroller und Digitale Elektronik STM32F7 Verhalten des "Timer direction bit" bei Nutzung von "center aligned pwm mode"


von Paul S. (mrpaul)


Angehängte Dateien:

Lesenswert?

Der STM32F7 besitzt im TimerControlRegister TIMx_CR1 ein Bit names DIR. 
Dieses Bit zeigt bei Verwendung des "center aligned mode", also beim 
auf- und abwärtszählen die aktuelle Zählrichtung des Timers an. Das 
Update-Interrupt wird bei dieser Variante zwei mal pro Zählzyklus 
aufgerufen, einmal beim Erreichen des Höchstwertes und einmal beim 
Erreichen des Tiefstwertes.
Um nun herauszubekommen, ob ich gerade am oberen oder am unteren Punkt 
des Timers bin, kann ich das Richtungsbit nutzen.

Prinzipiell ist das soweit verständlich. Allerdings geht aus dem 
Diagramm im Datenblatt nicht hervor, wann das Richtungsbit im Vergleich 
zum Interruptflag (UIF) wechselt, da es nicht mit eingezeichnet wurde.
Angenommen der Höchstwert liegt bei 6, wie im Datenblattbeispiel 
angegeben (TIMx_ARR = 6) - siehe Bild:
- Hochgezählt wird von 0 bis 5 -> bei 5 wird das Interruptflag (UIF) 
gesetzt
- Heruntergezählt wird von 6 bis 1 -> bei 1 wird UIF gesetzt
Nun aber die Frage: Welchen Wert hat das Richtungsbit (DIR) in dem 
Moment, wo das UIF gesetzt wird? Betrachtet man den Fall des 
Hochzählens, ist er im Moment des Interrupts mit Hochzählen fertig, 
daher könnte man meinen, dass das DIR-Bit nun gleich mit gekippt wird, 
weil ja nun wieder abwärts gezählt wird. Andererseits steigt der Wert im 
Zählregister erst noch um eins, da das Herunterzählen ja bei 6 beginnt 
und bisher noch nicht heruntergezählt wurde.

Außerdem vergeht zw. Triggern des Interrupts und Auslesen des 
TIMx_CR1-Registers innerhalb der Interruptroutine ja noch "etwas" Zeit. 
Sollte das DIR-Bit also beim bzw. vorm Auslösen des Interrupts nicht 
gleich mit invertiert werden, besteht ja die Gefahr, dass man je nach 
Latenz (z.B. durch höher priorisiertes anstehendes Interrupt) ein 
unterschiedliches Richtungsbit ausließt.

Daher die Frage:
gibt es irgendw0 (Datenblatt, App-Note) eine Info, wie sich das DIR-Bit 
in Bezug auf das UpdateInterruptFlag verhält? Oder habe ich etwas 
übersehen? Oder habe ich vllt. einen Denkfehler?

Vielen Dank für die Hilfe

: Bearbeitet durch User
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.