Forum: Mikrocontroller und Digitale Elektronik LPC1766 Peripherie -> Frequenzproblem


von Bernd (Gast)


Lesenswert?

Hallo zusammen,
ich Programmiere einen LPC1766-STK von Olimex mit der Software IAR .
Meine Frage bezieht sich auf die Frequenzeinstellung, genauer gesagt 
geht es in dem LCD Beispielprogramm 
(http://www.olimex.com/dev/index.html)  um den Takt für die 
Peripherie(Timer0 und 1).
Im Beispielprogramm werden zuerst der Takt und danach die Peripherie mit 
den Zeilen
  CLKSRCSEL_bit.CLKSRC = 1;   // Selects the main oscillator as a PLL 
clock source.
  PCLKSEL0 = PCLKSEL1  = 0;   // other peripherals 100/4 = 25MHz
eingestellt.

Laut Datenblatt :
00 PCLK_peripheral = CCLK/4 00
01 PCLK_peripheral = CCLK
10 PCLK_peripheral = CCLK/2
11 PCLK_peripheral = CCLK/8, except for CAN1, CAN2, and
CAN filtering when “11” selects = CCLK/6.

PCLKSEL0 = PCLKSEL1  = 1;
Änderst aber schon einmal nichts.

Weiter unten im Programm wird durch die Funktion
Int32U SYS_GetFsclk(void) noch einmal wie oben der main ocsillator als 
clock source herausgesucht und durch die Funktion
Int32U SYS_GetFpclk(Int32U Periphery) der Takt für die Peripherie.
Aber auch wenn ich hier den Teiler ändere, verändert sich nicht der Wert 
meines Timers.


Wieso ändert sich die Peripherie MHz nicht wenn ich PCLKSEL0 und 
PCLKSEL1  ändere?
Wieso wird oben clock source und die Peripherie definiert und weiter 
unten wieder durch die Funktionen  „gesucht“ und wieder  geändert?

Wenn ich mit dem Timer1 alle 100ms einen Ausgang schalten will, muss ich 
Timer1 mit 1250000 vorladen. (12,5 Mhz ?!)  Das Funktioniert auch. Wenn 
ich jetzt den Takt für die Peripherie „ändere“ sollte doch der Wert viel 
schneller/langsamer abgearbeitet werden und sich die 100ms auf z.B. 50ms 
verschieben?

Habe ich da ein prinzipielles Denkproblem?

Ich hoffe Ihr versteht mein Problem und könnt mir helfen.

Vielen dank!

von Michael G. (let)


Lesenswert?

PCLKSEL0 = PCLKSEL1  = 1;

Damit stellst du nur die Teiler für den WDT (PCLKSEL0) und QEI 
(PCLKSEL1) um da nur jeweils Bit 0 gesetzt wird. Für Timer0 z. B. sind 
aber Bits 2:3 in PCLKSEL0 zuständig.
1
PCLKSEL0 |= (1 << 2);
 Vorrausgesetzt da steht anfangs eine 0 drin.

Oder alles auf einmal:
1
PCLKSEL0 = PCLKSEL1 = 0x55555555;

von Bernd (Gast)


Lesenswert?

Oh man... Das ist es.

Vielen Dank!

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.