Forum: Mikrocontroller und Digitale Elektronik LPC1766 frage zur Frequenz


von Christian (Gast)


Lesenswert?

Hallo zusammen,

ich Arbeite gerade an einem LPC1766-STK Board und habe eine Frage zur 
eingestellten Frequenz.
1
void InitClock(void)
2
{
3
  // 1. Init OSC
4
  SCS_bit.OSCRANGE = 0;
5
  SCS_bit.OSCEN = 1;
6
  // 2.  Wait for OSC ready
7
  while(!SCS_bit.OSCSTAT);
8
  // 3. Disconnect PLL
9
  PLL0CON_bit.PLLC = 0;
10
  PLL0FEED = 0xAA;
11
  PLL0FEED = 0x55;
12
  // 4. Disable PLL
13
  PLL0CON_bit.PLLE = 0;
14
  PLL0FEED = 0xAA;
15
  PLL0FEED = 0x55;
16
  // 5. Select source clock for PLL
17
  CLKSRCSEL_bit.CLKSRC = 1;   // Selects the main oscillator as a PLL clock source.
18
  PCLKSEL0 = PCLKSEL1 = 0x55555555;   // other peripherals kein Teiler = 50MHz
19
  // 6. Set PLL settings 300 MHz
20
  PLL0CFG_bit.MSEL = 25-1;
21
  PLL0CFG_bit.NSEL = 2-1;
22
  PLL0FEED = 0xAA;
23
  PLL0FEED = 0x55;
24
  // 7. Enable PLL
25
  PLL0CON_bit.PLLE = 1;
26
  PLL0FEED = 0xAA;
27
  PLL0FEED = 0x55;
28
  // 8. Wait for the PLL to achieve lock
29
  while(!PLL0STAT_bit.PLOCK);
30
  // 9. Set clk divider settings
31
  CCLKCFG   = 3-1;            // 1/3 Fpll
32
  // 10. Connect the PLL
33
  PLL0CON_bit.PLLC = 1;
34
  PLL0FEED = 0xAA;
35
  PLL0FEED = 0x55;
36
}

Die Frequenz der Peripherie habe ich ohne Teiler auf 50Mhz gestellt.

Aber auf welcher Herzzahl steht die normale Frequenz?
Ich verstehe zwar das ich die Frequenz mit MSEL und NSEL einstellen 
kann, aber ich verstehe bei besten Willen nicht wie...
Auf was ist sie denn im Moment eingestellt?

Ich hoffe Ihr könnt mir helfen.

Gruß

Christian

von Jojo S. (Gast)


Lesenswert?

Da hilft das berühmte Datenblatt UM10360 weiter:
Fcco = (2* M * Fin) / N
Fcco = (2* 25 * Fin) / 2
Fcco = 25 * Fin
Fcpu = Fcco / 3    wg. CCLKCFG   = 3-1;

Fin ist die Quarzfrequenz, wenn auf dem Board vermutlich ein 12 MHz 
Quarz ist dann rennt die CPU mit 25 * 12 / 3 MHz = 100 MHz.

von Christian (Gast)


Lesenswert?

Ok, erst einmal vielen Dank!

Vllt ist meine Denkweise auch falsch ( oder wahrscheinlich...).
Bei einer Frequenz von 100Mhz ist die Zeit für einen Vorgang dann 10ns ( 
1/100000000) oder?

Ich habe im EINT1 eine Schleife die mir einen Ausgang schalten soll.

            FIO0CLR |= (1UL<<25);             // output turn on
            for(cnt=0;cnt<0x250;cnt++)  {  }
            FIO0SET |= (1UL<<25);             // output turn off

Müsste der Ausgang dann nicht für knappe 6µs (10ns*592) eingeschaltet 
sein?

Laut Oszibild ist er nämlich ca. 100µs lang.

von Jojo S. (Gast)


Lesenswert?

Eine Zeile C-Code wird ja in mehrere Zeilen Assembler übersetzt, je nach 
gewählter Optimierungsstufe auch in verschiedene. Und ein 
Maschinenbefehl kann auch mehrere Takte für die Ausführung brauchen, so 
einfach kann man also nicht rechnen.
Du kannst versuchen dich jetzt an die gewünschte Zeit anzunähern, also 
wenn die Schleife jetzt 16,7 mal zu lange dauert dann wäre die Konstante 
eher 36 (wenn man die Optimierung nicht ändert).
Aber so einen schönen Prozessoren mit vielen Timern und Interrupts in 
NOP Schleifen warten zu lassen ist eine Schande...

von Jörg S. (joerg-s)


Lesenswert?

Es gab doch auch die Möglichkeit den Takt über einen Portpin nach aussen 
zu schalten. Damit lässt sich die Frequenz dann ordentlich messen :)

von Lutz (Gast)


Lesenswert?

Der CMSIS ist sogar so nett, die Variable SystecmCoreClock zu liefern 
...

von ABCD M. (ramachandran_m)


Lesenswert?

How to implement CAN communication between LPC1766 und LPC11C24


Please if anyone has sample codings,

send it to me

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.