Forum: Mikrocontroller und Digitale Elektronik LPC1769 PLL0 ändern


von LinkDing (Gast)


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.

von JojoS (Gast)


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
}

von LinkDing (Gast)


Lesenswert?

Hallo JojoS,

vielen Dank für deine Hilfe!
Da habe ich wohl vom LPCxpresso Schaltplan XTAL mit RTC vertauscht!

von Sebastian H. (sh______)


Lesenswert?


von LinkDing (Gast)


Lesenswert?

Super Link! Ist echt ein hilfreiches Tool, danke !

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.