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