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.
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?!
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?).
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.