Hallo! Kann mir bitte jemand sagen, wie ich den CPU-Takt von obigem Prozessor nach oben/unten korrigieren kann? Benutze CodeWarrior. Ich habe schon herausgefunden, dass ich im Handbuch auf Seite 488 nachschauen muss.... aber mir fehlt einfach ein konkretes Beispiel.... Also vielleicht kann mir jemand von euch behilflich sein! Handbuch ist hier der Link: http://www.freescale.com/files/microcontrollers/doc/data_sheet/MC9S12XEP100RMV1.pdf Danke euch schon einmal!
Etwas nach oben/unten korrigieren ist nicht so einfach, da kann man nur nach der Formel gehen und die Werte aus Oszillatorclock und gewünschtem Busclock ermitteln. Ab Zeile 475 sind die dazu notwendigen Register beschrieben. Beispiel: 12MHz Quarz, 50MHz Bustakt: -> CKSEL.7 muss gesetzt sein (F_bus=F_pll/2) Wir brauchen 100MHz PLL-Clock, da der VCO von 32...120MHz geht, muss PLLCLK = VCOCLK sein. -> POSTDIV = $00 Referenzfrequenz auf z.B. 2 MHZ festlegen ergibt einen Wert von 5 für REFDIV und 00 für REFFRQ. -> REFDIV = $05 Multiplikation mit 50, (100 MHz / 2 MHz), 11 für VCOFRQ -> SYNR = 49 + 192 = 241 = $F1 Mit SYNR kann man jetzt die Frequenz in 2MHz Schritten ändern. Gruß Jörg
Das heißt also, ich muss auch einen neuen Quarz erst einmal auf mein Evaluation Board machen? Oder wie ist das damit? Board: DEMOS12XEP100
Das mit den 12MHz war nur ein Beispiel von einem eigenen Projekt. Du kannst auch schauen, was für ein Quarz drauf ist und hier posten. Dann lässt sich das auch äquivalent mit der anderen Frequenz machen. Bei 8MHz braucht man nur REFDIV von $05 auf $03 ändern. Gruß Jörg
Ich habe einen 4 MHz Quarz! 4.000C06. Kannst du mir dafür die Settings sagen und es auch noch etwas erklären? Wäre echt nett ;-) Will maximale CPU-Frequenz!
-> POSTDIV = $00 (wie gehabt) -> REFDIV = $01 ([4/2]-1) -> SYNR = 49 + 192 = 241 = $F1 damit sollte der Bustakt 50MHz sein. Mit -> SYNR = 63 + 192 = 255 = $FF (die 192 kommen von VCOFRQ=11) sollte der Baustein auch mit 64 MHz Bustakt ohne Probleme laufen, was allerdings ausserhalb der Spezifikation ist. Gruß Jörg
Okay super!!! Das hilft mir erst einmal sehr viel!!! Danke dir....
Habe nun einmal am Anfang meines main-Programms folgende Zeilen eingebaut:
1 | CKSEL.7 = 1; |
2 | POSTDIV = 0; |
3 | REFDIV = 1; |
4 | SYNR = 241; |
Bekomme aber nun aufgrund falscher Befehle mehrere Fehler gemeldet....??? Könnt ihr mir da nochmal helfen? Fehler als Screenshot angehängt.... Danke!
Habe hier mal einen Auszug von der Initialisierung die wir hier mit einem 4MHz Resonator nutzen. PLL Takt ist 100MHz und Bustakt somit 50MHz
1 | CLKSEL =0; /* Select clock source from XTAL and set bits in CLKSEL reg. */ |
2 | PLLCTL = 129; /* Disable the PLL */ |
3 | SYNR = 88; /* Set the multiplier register */ |
4 | |
5 | REFDV = 1; |
6 | POSTDIV = 0; /* Set the post divider register */ |
7 | PLLCTL = 193; |
8 | while(!CRGFLG_LOCK) { /* Wait until the PLL is within the desired tolerance of the target frequency */ |
9 | } |
10 | CLKSEL = 128; /* Select clock source from PLL */ |
Wenn du mit dem Codewarrior arbeitest such am besten mal nach einer mc9s12xeq384.h oder in deinem Fall xep100 da dort die ganzen Register defines drin stehen. MfG Kai
Ich bekomme bei folgenden Zeilen immer noch eine komische Fehlermeldung mit der ich nichts anfangen kann...?!
1 | int main(void) { |
2 | /* put your own code here */
|
3 | |
4 | |
5 | CLKSEL =0; /* Select clock source from XTAL and set bits in CLKSEL reg. */ |
6 | PLLCTL = 129; /* Disable the PLL */ |
7 | SYNR = 88; /* Set the multiplier register */ |
8 | |
9 | REFDV = 1; |
10 | POSTDIV = 0; /* Set the post divider register */ |
11 | PLLCTL = 193; |
12 | while(!CRGFLG_LOCK); /* Wait until the PLL is within the desired tolerance of the target frequency */ |
13 | |
14 | CLKSEL = 128; /* Select clock source from PLL */ |
15 | |
16 | |
17 | |
18 | int i = 1; /* for while loop */ |
19 | int GradZaehler = 0; |
Und zwar sagt er, dass bei int i = 1; diese Klammer fehlt '}' Keine Ahnung warum??? :( Bei den Zeilen oben handelt es sich "nur" um einen Programmausschnitt!!!
Das liegt daran weil der Code oberhalb des int i Zeug steht was der Codewarrior nicht mag. Das Variablen Graffel muss immer am Anfang der Funktion stehen.
Kai B. schrieb: > Das liegt daran weil der Code oberhalb des int i Zeug steht was der > Codewarrior nicht mag. > Das Variablen Graffel muss immer am Anfang der Funktion stehen. Richtig!!!! Danke!!! Gelöst!!! ;-)
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.