Forum: Mikrocontroller und Digitale Elektronik Timer1ms bei TI Sitara


von Niklas G. (erlkoenig) Benutzerseite


Angehängte Dateien:

Lesenswert?

Hallo zusammen, ich versuche den 1ms-Timer vom TI Sitara AM335x zu 
verstehen. Dieser kann den Eingangstakt durch fraktionale Prescaler 
teilen, um (ganzzahlige) Frequenzen zu erzeugen, welche keine Teiler des 
Eingangstakts sind. So kann u.a. aus dem 32768Hz-Signal der RTC ein 
1000Hz-Takt erzeugt werden, d.h. praktisch eine Division durch 32,768. 
Das wird erreicht, indem der Zähler abwechselnd zwischen 32 und 33 
umgeschaltet wird, d.h. die Periode des Ausgangstakts so variiert wird, 
dass in Summe 1kHz rauskommt.
Leider wird mir aus dem Datenblatt¹ nicht klar, wie das genau 
funktioniert und wie man das berechnet. Über TLDR gibt man den 
"Basis"-Prescaler an: Der Timer zählt von TLDR bis 2^32, und startet 
wieder bei TLDR. Der Presaler ist also 2^32-TLDR.
Man kann über 2 Parameter TPIR und TNIR angeben, wann der Zähler bei 
TLDR startet ("Kurzer" Takt, z.B. 32 Eingangs-Zyklen) und wann bei 
TLDR-1 ("langer" Takt, z.B. 33 Eingangs-Zyklen). Es sind Formeln 
angegeben, wie man da dran kommt, aber wie begründen die sich? Die 
Parameter sind signed, können negativ werden.

Das Blockschaltbild verstehe ich so: Es gibt einen zusätzlichen Zähler 
TCVR, welcher bei 0 startet. Auf diesen wird vor dem Overflow des 
eigentlichen Timers TPIR oder TNIR addiert. Wenn
ist, wird TPIR aufaddiert, sonst TNIR. Im ersten Fall folgt ein langer 
Takt (Prescaler 33), sonst ein kurzer (Prescaler 32). Bloß warum 
ausgerechnet dieser Grenzwert? Das "Or"-Gatter ist m.E. wirkungslos, da 
es nur greift wenn TNIR > TPIR, was die Formeln ausschließen sollten. 
TCVR scheint so eine Art Fehler-Akkumuluator zu sein, der in der Nähe 
von 0 gehalten wird. Der Grenzwert scheint sicherzustellen, dass der 
regelmäßig (mind 1x pro Sekunde) auf 0 landet.

Bei 32768Hz Eingang und 1000Hz Ausgang braucht man 232 kurze Takte und 
768 lange Takte, dann ergeben sich genau 1000 Takte pro Sekunde, denn:
und
Das passt verdächtig gut zu den angegebenen Beispiel-Zahlen für 1ms. Wie 
die genau zustande kommen ist mir aber nicht klar, und wieso ist da ein 
Faktor von 1000 drauf? Die Formeln haben auch noch einen Faktor von 1e6, 
aber warum? m.E. kann man die TPIR/TNIR-Faktoren kürzen, d.h. 29/-96 
statt 232000/-768000... Aber das scheint nicht zu klappen, der Takt 
weicht ab.

Weiß jemand wie das funktioniert oder wie so eine Schaltung heißt, 
sodass ich da Literatur zu finden kann? Danke!

1: http://www.ti.com/lit/pdf/spruh73, S. 4471

: 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.