Forum: Mikrocontroller und Digitale Elektronik 32Bit Timer Prescale und LoadValue


von Qduda 1. (Firma: student) (qduda)


Lesenswert?

Hallo Zusammen,

ich konnte (trotz zahlreicher Beiträge) kein Thema finden das mir bei 
meinem Problem helfen würde - deshalb mach ich ein neues auf.

Es geht darum das ich einen 32Bit Timer habe. Diesen muss ich mit einem 
Prescale und einem LoadValue laden. Es geht drum das mir der Timer dann 
praktisch kontinuierliche Interrupts erzeugt, wenn er abläuft. (SysTick)

Mein Problem liegt jetzt in der Berechnung des Prescale und des 
LoadValue. Ich habe mal meine alten Unterlagen durchgesehen - aber dort 
haben wir das nur mit 8 oder 16 Bit Timern die bei max. 3 MHZ laufen 
behandelt.

Demnach müsste das hier stimmen.

---
Takt = 60 MHZ = 60000000 Hz
Maxcount = 4.294.967.295 (2^32)
DesiredTimerOverflow = 1 sec
(Verfügbare Prescale 2~1024)

prescale = Takt / (DesiredTimerOverflow * MaxCountOfTimer)
prescale = 60000000 / (1 sec * 2^32)
prescale = 60000000 / 4294967295
prescale = ~ 0,01
prescale = 2

Toverflow = (Takt / prescale) / MaxCountOfTimer
Toverflow = ( 60000000 / 2 ) / 2^32
Toverflow = 30000000 / 4294967295
Toverflow = 0,006985
Toverflow = 0,007

Time = 1 / frequency (Toverflow)
Time = 1 / 0,007
Time = 142,86

Resolution = Time / MaxCountOfTimer
Resolution = 142,86 / 4294967295
Resolution = 0.00000003326...

Preload = MaxCount - (DesiredTimerOverflow / Resolution)
Prelaod = 4294967295 - ~30066145
Preload = 4.264.967.296
---

Kann das denn stimmen? Kommt mir irgend seltsam vor. Der Interrupts wird 
im Millisekundenbereich getriggert, hab leider gerade keinen Oszi da zum 
Messen, aber ich bin noch weit entfernt von Sekunden Interrupts.

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.