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

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.