LPC1769 PLL0 ändern

Gast #2374571
Lesenswert?

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

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

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