Freescale HCS12X CPU-Takt einstellen?!

OP #2281499
Lesenswert?

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!
#2281568
Lesenswert?

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
#2281660
Lesenswert?

-> 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
Persönliche Seite #2283163
Lesenswert?

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
OP #2284522
Lesenswert?

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!!!

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren