Skip to content

Commit 5356a00

Browse files
committed
Update system_LPC8xx.c
Fixed SystemCoreClock calculation for LPC810 (same as for LPC812). Added MainClock variable for serial_api. Added comments for PLL calculation. Note that SystemCoreClock for LPC810 is still 24MHz rather than rated 30MHz.
1 parent c565c72 commit 5356a00

File tree

1 file changed

+23
-18
lines changed
  • libraries/mbed/targets/cmsis/TARGET_NXP/TARGET_LPC81X/TARGET_LPC810

1 file changed

+23
-18
lines changed

libraries/mbed/targets/cmsis/TARGET_NXP/TARGET_LPC81X/TARGET_LPC810/system_LPC8xx.c

Lines changed: 23 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -100,14 +100,18 @@
100100
// </h>
101101
// </e>
102102
*/
103+
104+
// 1 == IRC 12Mhz 2 == System Oscillator 12Mhz Xtal:
103105
#define CLOCK_SETUP 1
106+
//use PLL for IRC
104107
#define SYSOSCCTRL_Val 0x00000000 // Reset: 0x000
105108
#define WDTOSCCTRL_Val 0x00000000 // Reset: 0x000
106-
#define SYSPLLCTRL_Val 0x00000041 // Reset: 0x000
107-
#define SYSPLLCLKSEL_Val 0x00000000 // Reset: 0x000
108-
#define MAINCLKSEL_Val 0x00000003 // Reset: 0x000
109-
#define SYSAHBCLKDIV_Val 0x00000001 // Reset: 0x001
110-
109+
#define SYSPLLCTRL_Val 0x00000041 // Reset: 0x000 MSEL=1 => M=2; PSEL=2 => 2P=8; PLLCLKOUT = (12x2) = 24MHz
110+
//#define SYSPLLCTRL_Val 0x00000004 // Reset: 0x000 MSEL=4 => M=5; PSEL=0 => 2P=2; PLLCLKOUT = (12x5) = 60MHz
111+
#define SYSPLLCLKSEL_Val 0x00000000 // Reset: 0x000 Select IRC
112+
#define MAINCLKSEL_Val 0x00000003 // Reset: 0x000 MainClock = PLLCLKOUT
113+
#define SYSAHBCLKDIV_Val 0x00000001 // Reset: 0x001 DIV=1 => SYSTEMCORECLK = 24 / 1 = 24MHz
114+
//#define SYSAHBCLKDIV_Val 0x00000002 // Reset: 0x001 DIV=2 => SYSTEMCORECLK = 60 / 2 = 30MHz
111115
/*
112116
//-------- <<< end of configuration section >>> ------------------------------
113117
*/
@@ -235,9 +239,10 @@
235239
/*----------------------------------------------------------------------------
236240
Clock Variable definitions
237241
*----------------------------------------------------------------------------*/
238-
uint32_t SystemCoreClock = __SYSTEM_CLOCK;/*!< System Clock Frequency (Core Clock)*/
239-
242+
uint32_t MainClock = __MAIN_CLOCK; /*!< Main Clock Frequency */
243+
uint32_t SystemCoreClock = __SYSTEM_CLOCK; /*!< System Clock Frequency (Core Clock)*/
240244

245+
//Replaced SystemCoreClock with MainClock
241246
/*----------------------------------------------------------------------------
242247
Clock functions
243248
*----------------------------------------------------------------------------*/
@@ -268,46 +273,46 @@ void SystemCoreClockUpdate (void) /* Get Core Clock Frequency */
268273

269274
switch (LPC_SYSCON->MAINCLKSEL & 0x03) {
270275
case 0: /* Internal RC oscillator */
271-
SystemCoreClock = __IRC_OSC_CLK;
276+
MainClock = __IRC_OSC_CLK;
272277
break;
273278
case 1: /* Input Clock to System PLL */
274279
switch (LPC_SYSCON->SYSPLLCLKSEL & 0x03) {
275280
case 0: /* Internal RC oscillator */
276-
SystemCoreClock = __IRC_OSC_CLK;
281+
MainClock = __IRC_OSC_CLK;
277282
break;
278283
case 1: /* System oscillator */
279-
SystemCoreClock = __SYS_OSC_CLK;
284+
MainClock = __SYS_OSC_CLK;
280285
break;
281286
case 2: /* Reserved */
282-
SystemCoreClock = 0;
287+
MainClock = 0;
283288
break;
284289
case 3: /* CLKIN pin */
285-
SystemCoreClock = __CLKIN_CLK;
290+
MainClock = __CLKIN_CLK;
286291
break;
287292
}
288293
break;
289294
case 2: /* WDT Oscillator */
290-
SystemCoreClock = wdt_osc;
295+
MainClock = wdt_osc;
291296
break;
292297
case 3: /* System PLL Clock Out */
293298
switch (LPC_SYSCON->SYSPLLCLKSEL & 0x03) {
294299
case 0: /* Internal RC oscillator */
295-
SystemCoreClock = __IRC_OSC_CLK * ((LPC_SYSCON->SYSPLLCTRL & 0x01F) + 1);
300+
MainClock = __IRC_OSC_CLK * ((LPC_SYSCON->SYSPLLCTRL & 0x01F) + 1);
296301
break;
297302
case 1: /* System oscillator */
298-
SystemCoreClock = __SYS_OSC_CLK * ((LPC_SYSCON->SYSPLLCTRL & 0x01F) + 1);
303+
MainClock = __SYS_OSC_CLK * ((LPC_SYSCON->SYSPLLCTRL & 0x01F) + 1);
299304
break;
300305
case 2: /* Reserved */
301-
SystemCoreClock = 0;
306+
MainClock = 0;
302307
break;
303308
case 3: /* CLKIN pin */
304-
SystemCoreClock = __CLKIN_CLK * ((LPC_SYSCON->SYSPLLCTRL & 0x01F) + 1);
309+
MainClock = __CLKIN_CLK * ((LPC_SYSCON->SYSPLLCTRL & 0x01F) + 1);
305310
break;
306311
}
307312
break;
308313
}
309314

310-
SystemCoreClock /= LPC_SYSCON->SYSAHBCLKDIV;
315+
SystemCoreClock = MainClock / LPC_SYSCON->SYSAHBCLKDIV;
311316

312317
}
313318

0 commit comments

Comments
 (0)