Forum: Mikrocontroller und Digitale Elektronik Welcher Takt ist SystemCoreClock beim Cortex M3?


von Manfred (Gast)


Lesenswert?

So langsam bin ich vom #define-gehopse von einem um nächsten kirre: 
Welcher Takt genau ist nun SystemCoreClock? Ich war davon ausgegangen, 
daß es der Takt ist, mit dem der Core getaktet wird (wie der Name ja 
auch sagt); also z.B. wenn ein LPC1768 mit Vollgas läuft, wären es z.B. 
100 MHz. Bedeutet, bei Standard-Peripherie-Prescaler (clk/4) würde z.B. 
ein Timer mit 25 MHz getaktet werden. Aber irgendwie komme ich nicht auf

SysTick_Config(SystemCoreClock/1000 - 1); // Generate interrupt each 1 
ms

wenn SystemCoreClock 100 MHz wäre.

von Hauke R. (lafkaschar) Benutzerseite


Lesenswert?

Doch genau das steht da drin und es ist auch kein define (sosnt könntest 
du das nicht per laufzeit ändern ;))

Und dein SysTick_Config sollte in etwa 1ms tick ergeben.

Funktioniert zumindest bei mir einandfrei. Vielleicht hast du deine PLL 
nicht richtig konfiguriert?!

von Manfred (Gast)


Lesenswert?

Na ja, ich bin derzeit noch nur theoretisch damit beschäftigt (Lesen der 
CMSIS Driver Lib, Examples -> GPIO -> LedBlinky). Der klassische 
Einstieg halt...

SystemCoreClock ist dort mit
uint32_t SystemCoreClock = __CORE_CLK
definiert, weiter zurück ist __CORE_CLK als
#define __CORE_CLK   (__FCCO(OSC_CLK) / __CCLK_DIV)
definiert, wobei darin wieder OSC_CLK mit
#define OSC_CLK (XTAL)
und XTAL mit
#define XTAL (12000000UL)
definiert ist und __CCLK_DIV mit
#define __CCLK_DIV (((CCLKCFG_Val) & 0x00FF) + 1)
sowie __FCCO mit
#define __FCCO(__F_IN) ((2  __M  __F_IN) / __N)
usw., usw.

Und schon ist mir wieder ganz schwindelig und ich weiß nicht mehr, was 
los ist.

Ich war eigentlich auf der Suche nach soetwas wie delay() bzw. wie ich 
erstmal eine allgemeine "dynamische" Zeitbasis in einer Anwendung 
bekomme, bis mir die Laufzeitvariable SystemCoreClock als (dachte ich) 
genau soetwas in die Finger kam, was vieles bei Timing-Berechnungen 
erleichtern würde.

In der Tat bin ich durch das Rückwärtsverfolgen voll vom Kurs 
abgekommen, aber jetzt habe ich nach neuem Anlauf den (eigentlich 
logischen ...) Weg zur Definition von Systick_Config() gefunden und 
werde das mal durchgehen; das scheint auf den ersten Blick zielführend 
zu sein. Wer wen warum wie und wann im Hintergrund defined, sollte mir 
ja eigentlich egal sein :-)

Ich muß nun nur noch rausfinden, welcher tick darin nun wieder gemeint 
ist (ich vermute SystemCoreClock?).

von W.S. (Gast)


Lesenswert?

Manfred schrieb:
> Und schon ist mir wieder ganz schwindelig und ich weiß nicht mehr, was
> los ist.

Mein wirklich ernst gemeinter Rat: Halte dich an das, was du in der Doku 
zum ganz konkreten Controller nachlesen kannst und schmeiß im 
Zweifelsfalle die ganze CMSIS oder ST-Lib oder was auch immer weg. Das 
ist immer nur aufgesetztes Zeugs, mit dem versucht wird, irgendwelche 
über alle denkbaren Cortexhaltigen Chips allgemeingültigen 
"Verabstrahierungen" den Leuten unterzujubeln. Nach meiner Erfahrung 
kommt dabei nur aufgeblasenes Zeug heraus: Definitionen und Strukturen, 
die keiner wirklich braucht, scheinbare Freiräume und 
Auswahlmöglichkeiten, bei denen für den konkreten Controller nur eine 
einzige Wahlmöglichkeit übrigbleibt und so weiter, also nur aufgedunsene 
Quellen, die besser lesbar wären, wenn man dieses Zeug außen vor 
gelassen hätte.

W.S.

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.