LPC1769 PLL0 ändern

Gast #2374571
Hallo,

habe seit kurzem ein LPCxpresso Board mit dem LPC1769.
Bin dabei das ich mich ein wenig einarbeite.
Die Entwicklungsumgebung mit dem mitgelieferten LPCxpresso finde ich 
sehr gut und die "Basics" behersche ich schon ein wenig.
Woran ich momentan ein wenig kämpfe ist der CPU Clock.
Auf dem LPCxpresso Board ist ein Quarz mit 32,768kHz bestückt.
Mit dem internen PLL0 kann man den Takt erhöhen.
Bei einem leerem Project habe ich die internen Register ausgelesen und 
mir CCLK errechnet:

M=100
N=6
CCLKDIV=4
FIN=32768Hz

PLLCLK= ((FIN*2)*M)/N = 1,092266MHz

CCLK=PLLCLK/CCLKDIV = 273,0665kHz

Nun möchte ich aber die CPU Frequenz ändern.
Habe dies schon versucht, aber habe anscheinend was falsch gemacht,
da danach das Board nicht mehr ansprechbar war.
Hatte aber im ISP Mode (P2.10 auf GND) die Möglichkeit das Ganze wieder 
zu bereinigen und es funktioniert wieder alles.
Da ich mir nicht wieder mein Board zerstären will möchte ich mal fragen 
ob wer schon mal Erfahrungen mit der Umstellung der Frequenz gehabt hat.
Gast
die PLL0 wird nicht mit 32kHz sondern mit 12MHz versorgt, damit tickert 
die CPU dann mit 100MHz. Der 1769 kann bis 120 MHz getaktet werden, ich 
habe mir dazu mal folgende Initialisierung zusammengekratzt (für die M/N 
Werte gibt es Beispiele im UserManual oder es gibt Excel Sheets als 
Hilfe).
1
static void setupHardware(void)
2
{
3
  /* Disable peripherals power. */
4
  LPC_SC->PCONP = 0;
5

6
  /* Enable GPIO power. */
7
  LPC_SC->PCONP = PCONP_PCGPIO;
8

9
  /* Disable TPIU. */
10
  LPC_PINCON->PINSEL10 = 0;
11

12
  if ( LPC_SC->PLL0STAT & ( 1 << 25 ) )
13
  {
14
    /* Enable PLL, disconnected. */
15
    LPC_SC->PLL0CON = 1;
16
    LPC_SC->PLL0FEED = PLLFEED_FEED1;
17
    LPC_SC->PLL0FEED = PLLFEED_FEED2;
18
  }
19

20
  /* Disable PLL, disconnected. */
21
  LPC_SC->PLL0CON = 0;
22
  LPC_SC->PLL0FEED = PLLFEED_FEED1;
23
  LPC_SC->PLL0FEED = PLLFEED_FEED2;
24

25
  /* Enable main OSC. */
26
  LPC_SC->SCS |= 0x20;
27
  while( !( LPC_SC->SCS & 0x40 ) );
28

29
  /* select main OSC, 12MHz, as the PLL clock source. */
30
  LPC_SC->CLKSRCSEL = 0x1;
31

32
  //LPC_SC->PLL0CFG = 0x20031;
33
  LPC_SC->PLL0CFG   = ((6-1)<<16) | (((120-1)<<0)); // PLL config: N=6, M=120 -> 12 MHz * 2 * 120 / 6 -> 480 MHz
34
  LPC_SC->PLL0FEED = PLLFEED_FEED1;
35
  LPC_SC->PLL0FEED = PLLFEED_FEED2;
36

37
  /* Enable PLL, disconnected. */
38
  LPC_SC->PLL0CON = 1;
39
  LPC_SC->PLL0FEED = PLLFEED_FEED1;
40
  LPC_SC->PLL0FEED = PLLFEED_FEED2;
41

42
  /* Set clock divider. */
43
  LPC_SC->CCLKCFG = 4-1;    // 120 MHz
44
  // LPC_SC->CCLKCFG = 40-1;  // 12 MHz
45

46
  /* Configure flash accelerator. */
47
  LPC_SC->FLASHCFG = 0x403a;
48

49
  /* Check lock bit status. */
50
  while( ( ( LPC_SC->PLL0STAT & ( 1 << 26 ) ) == 0 ) );
51

52
  /* Enable and connect. */
53
  LPC_SC->PLL0CON = 3;
54
  LPC_SC->PLL0FEED = PLLFEED_FEED1;
55
  LPC_SC->PLL0FEED = PLLFEED_FEED2;
56
  while( ( ( LPC_SC->PLL0STAT & ( 1 << 25 ) ) == 0 ) );
57

58

59
  /* Disable PLL, disconnected. */
60
  LPC_SC->PLL1CON = 0;
61
  LPC_SC->PLL1FEED = PLLFEED_FEED1;
62
  LPC_SC->PLL1FEED = PLLFEED_FEED2;
63

64
  LPC_SC->PLL1CFG = 0x23;
65
  LPC_SC->PLL1FEED = PLLFEED_FEED1;
66
  LPC_SC->PLL1FEED = PLLFEED_FEED2;
67

68
  /* Enable PLL, disconnected. */
69
  LPC_SC->PLL1CON = 1;
70
  LPC_SC->PLL1FEED = PLLFEED_FEED1;
71
  LPC_SC->PLL1FEED = PLLFEED_FEED2;
72
  while( ( ( LPC_SC->PLL1STAT & ( 1 << 10 ) ) == 0 ) );
73

74
  /* Enable and connect. */
75
  LPC_SC->PLL1CON = 3;
76
  LPC_SC->PLL1FEED = PLLFEED_FEED1;
77
  LPC_SC->PLL1FEED = PLLFEED_FEED2;
78
  while( ( ( LPC_SC->PLL1STAT & ( 1 << 9 ) ) == 0 ) );
79

80
  /*  Setup the peripheral bus to be the same as the PLL output (64 MHz). */
81
  LPC_SC->PCLKSEL0 = 0x05555555;
82
  
83
}

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 15 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.