ARM M3 Berechnung einer µs aus CMSIS

Gast #3202175
Hallo,

könnte mir mal bitte jemand erklären, wie die Berechnung einer µs aus 
dem SystemCoreClock zu verstehen ist?
1
void emc_WaitUS(volatile uint32_t us)
2
{
3
  us *= (SystemCoreClock / 1000000) / 3;
4
  while(us--);
5
}

Den Code-Ausschnitt habe ich aus der CMSIS lpc18xx_emc.c.

Ich habe das bisher so verstanden, dass der SystemCoreClock, der 
aktuelle Systemtakt ist. Also angenommen ich habe in der Funktion 
CGU_Init(): SetPLL1(6) programmiert. Dann ist PLL1 nach dem Ausführen 
von CGU_Init() die aktuelle Taktquelle und berechnet sich aus 6*12MHz = 
72MHz.
Somit müsste SystemCoreClock jetzt auch 72MHz sein. Weiter in der 
Berechnung erhalte ich 72 / 3 = 24.

aus us*= ... ergibt sich:

1µs = (SystemCoreClock / 1000000) / 3

Wo kommt die drei her?

Ich würde vermuten, dass es so richtig ist:

SystemCoreClock / 1000000 = 72

F_CPU / 72 = 1000000 Hz

1/1000000Hz = 1µs

Wie kann ich die Formel aus der CMSIS verstehen? Oder ist das ein Fehler 
in der CMSIS Programmierung?

Gruß Martin
Gast
Also das ist nun ja nicht schwer. Er berechnet aus dem Systemtakt, 
wieviele Takte eine Mikrosekunde sind. Die werden durch drei geteilt, 
für die while-Schleife. Die läuft dann so viele Takte, wie die 
eingestellte Wartezeit sein sollte. Hierbei sollte man beachten, dass 
jeder Interrupt diese Zeit verfälscht. Hier sollte man einfach eine 
Warteroutine benutzen, die auf einem Systick-Timer beruht.
Gast
wieso -3 ? Wenn er für jeden schleifendurchlauf 3 takte benötigt aber 
nur einen abzieht von us, dann benötigt er 3 mal soviel von den 
vorgegebenen Takte.
Daher (SystemCoreClock / 1000000) / 3

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 13 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

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.