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