STM32F2 Zeitstempel mit ext. Takt erzeugen

OP #3246273
Lesenswert?

Hallo zusammen,

Ich stehe gerade einmal auf dem Schlauch, vielleicht kann mich jemand in 
die richtige Richtung schubsen:

Ich möchte mit einem STM32F2 einen Zeitstempel in µS generieren, der von 
einem externen Takt kommt. Diesen Wert benötige ich nur unregelmäßig 
(z.B. beim Eintreffen eines Datensatzes auf einer Schnittstelle, 
vielleicht ein paar hundert mal in der Sekunde), die Zeit soll aber 
synchron zum externen 1MHz Signal sein.

Bisherige Idee: Das Signal wird als externer Takt auf einen Zeitgeber 
gegeben, der bis 1.000.000 zählt und dann einen Interrupt auslöst. In 
diesem Interrupt wird eine Variable hoch gezählt, die die Sekunden 
enthält. Das sollte doch machbar sein.
Wenn ich nun diesen Zeitstempel benötige lese ich den aktuellen 
Timerstand aus - bekomme also die µS - und nehme den Sekundenzähler 
dazu.

So, da kommt nun mein Problem ins Spiel: Ich kann die beiden Werte ja 
nicht atomar in einer Operation auslesen. Das bedeutet: Wenn ich erst 
den Timer auslese und danach den Sekundenzähler, dann kann zwischendurch 
ein Timer Interrupt aufgetreten sein und die beiden passen nicht mehr 
zusammen. Andersherum ebenso.
Da war doch mal was mit einen Wert zwei mal auslesen und den anderen 
dann Korrigieren. So ähnlich wie: Timer auslesen, merken, Sekundenzähler 
auslesen, merken, Timer wieder auslesen, ist der nun kleiner als beim 
erstem mal Sekunde eins rauf. Aber was wenn zwischen den ersten beiden 
Schritten der Interrupt kam, dann ist der Sekundenzähler schon um eins 
hoch gegangen.
Da stehe ich nun uns brauche den Schubs. Wie macht man das noch mal 
richtig?

Danke und Gruß
Martin
Gast #3246349
Lesenswert?

>Der Interrupt ist nicht das Problem, sondern der Zeitpunkt an dem ich
>den "zeitstempel" brauche.

Dann disable alle Interrupts. Wo ist dein Problem?
Das wird seit hunderten von Jahren schon so gemacht.
Gast #3246374
Lesenswert?

>> Dann disable alle Interrupts. Wo ist dein Problem?
>> Das wird seit hunderten von Jahren schon so gemacht.
>
>Das mir dann vielleicht Takte verloren gehen.

Hä?

disable interrupts
lese us Timer
lese s Timer
enable interrupts

Dein Kram dauert bei einem STM32 gerade mal
4 Maschinenzyklen.

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