mbed library sources. Supersedes mbed-src.

Dependents:   Nucleo_Hello_Encoder BLE_iBeaconScan AM1805_DEMO DISCO-F429ZI_ExportTemplate1 ... more

Committer:
AnnaBridge
Date:
Wed Feb 20 22:31:08 2019 +0000
Revision:
189:f392fc9709a3
Parent:
149:156823d33999
mbed library release version 165

Who changed what in which revision?

UserRevisionLine numberNew contents of line
<> 144:ef7eb2e8f9f7 1 /**************************************************************************//**
<> 144:ef7eb2e8f9f7 2 * @file system_LPC11U6x.c
<> 144:ef7eb2e8f9f7 3 * @brief CMSIS Cortex-M3 Device System Source File for
<> 144:ef7eb2e8f9f7 4 * NXP LPC11U6x Device Series
<> 144:ef7eb2e8f9f7 5 * @version V1.00
<> 144:ef7eb2e8f9f7 6 * @date 19. July 2013
<> 144:ef7eb2e8f9f7 7 *
<> 144:ef7eb2e8f9f7 8 * @note
<> 144:ef7eb2e8f9f7 9 * Copyright (C) 2013 ARM Limited. All rights reserved.
<> 144:ef7eb2e8f9f7 10 *
<> 144:ef7eb2e8f9f7 11 * @par
<> 144:ef7eb2e8f9f7 12 * ARM Limited (ARM) is supplying this software for use with Cortex-M
<> 144:ef7eb2e8f9f7 13 * processor based microcontrollers. This file can be freely distributed
<> 144:ef7eb2e8f9f7 14 * within development tools that are supporting such ARM based processors.
<> 144:ef7eb2e8f9f7 15 *
<> 144:ef7eb2e8f9f7 16 * @par
<> 144:ef7eb2e8f9f7 17 * THIS SOFTWARE IS PROVIDED "AS IS". NO WARRANTIES, WHETHER EXPRESS, IMPLIED
<> 144:ef7eb2e8f9f7 18 * OR STATUTORY, INCLUDING, BUT NOT LIMITED TO, IMPLIED WARRANTIES OF
<> 144:ef7eb2e8f9f7 19 * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE.
<> 144:ef7eb2e8f9f7 20 * ARM SHALL NOT, IN ANY CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR
<> 144:ef7eb2e8f9f7 21 * CONSEQUENTIAL DAMAGES, FOR ANY REASON WHATSOEVER.
<> 144:ef7eb2e8f9f7 22 *
<> 144:ef7eb2e8f9f7 23 ******************************************************************************/
<> 144:ef7eb2e8f9f7 24
<> 144:ef7eb2e8f9f7 25
<> 144:ef7eb2e8f9f7 26 #include <stdint.h>
<> 144:ef7eb2e8f9f7 27 #include "LPC11U6x.h"
<> 144:ef7eb2e8f9f7 28
<> 144:ef7eb2e8f9f7 29 /*
<> 144:ef7eb2e8f9f7 30 //-------- <<< Use Configuration Wizard in Context Menu >>> ------------------
<> 144:ef7eb2e8f9f7 31 */
<> 144:ef7eb2e8f9f7 32
<> 144:ef7eb2e8f9f7 33 /*- SystemCoreClock Configuration -------------------------------------------*/
<> 144:ef7eb2e8f9f7 34 // <e0> SystemCoreClock Configuration
<> 144:ef7eb2e8f9f7 35 #define CLOCK_SETUP 1
<> 144:ef7eb2e8f9f7 36 //
<> 144:ef7eb2e8f9f7 37 // <h> System Oscillator Control (SYSOSCCTRL)
<> 144:ef7eb2e8f9f7 38 // <o.0> BYPASS: System Oscillator Bypass Enable
<> 144:ef7eb2e8f9f7 39 // <i> If enabled then PLL input (sys_osc_clk) is fed
<> 144:ef7eb2e8f9f7 40 // <i> directly from XTALIN and XTALOUT pins.
<> 144:ef7eb2e8f9f7 41 // <o.1> FREQRANGE: System Oscillator Frequency Range
<> 144:ef7eb2e8f9f7 42 // <i> Determines frequency range for Low-power oscillator.
<> 144:ef7eb2e8f9f7 43 // <0=> 1 - 20 MHz
<> 144:ef7eb2e8f9f7 44 // <1=> 15 - 25 MHz
<> 144:ef7eb2e8f9f7 45 // </h>
<> 144:ef7eb2e8f9f7 46 #define SYSOSCCTRL_Val 0x00000000 // Reset value: 0x000
<> 144:ef7eb2e8f9f7 47 //
<> 144:ef7eb2e8f9f7 48 // <o.0..1> System PLL Clock Source Select (SYSPLLCLKSEL)
<> 144:ef7eb2e8f9f7 49 // <0=> IRC Oscillator
<> 144:ef7eb2e8f9f7 50 // <1=> Crystal Oscillator (SYSOSC)
<> 144:ef7eb2e8f9f7 51 // <3=> RTC Oscillator (32 kHz)
<> 144:ef7eb2e8f9f7 52 #define SYSPLLCLKSEL_Val 0x00000001 // Reset value: 0x000
<> 144:ef7eb2e8f9f7 53 //
<> 144:ef7eb2e8f9f7 54 // <e> Clock Configuration (Manual)
<> 144:ef7eb2e8f9f7 55 #define CLOCK_SETUP_REG 1
<> 144:ef7eb2e8f9f7 56 //
<> 144:ef7eb2e8f9f7 57 // <h> WD Oscillator Setting (WDTOSCCTRL)
<> 144:ef7eb2e8f9f7 58 // <o.0..4> DIVSEL: Select Divider for Fclkana
<> 144:ef7eb2e8f9f7 59 // <i> wd_osc_clk = Fclkana / (2 × (1 + DIVSEL))
<> 144:ef7eb2e8f9f7 60 // <0-31>
<> 144:ef7eb2e8f9f7 61 // <o.5..8> FREQSEL: Select WD Oscillator Analog Output Frequency (Fclkana)
<> 144:ef7eb2e8f9f7 62 // <1=> 0.5 MHz
<> 144:ef7eb2e8f9f7 63 // <2=> 0.8 MHz
<> 144:ef7eb2e8f9f7 64 // <3=> 1.1 MHz
<> 144:ef7eb2e8f9f7 65 // <4=> 1.4 MHz
<> 144:ef7eb2e8f9f7 66 // <5=> 1.6 MHz
<> 144:ef7eb2e8f9f7 67 // <6=> 1.8 MHz
<> 144:ef7eb2e8f9f7 68 // <7=> 2.0 MHz
<> 144:ef7eb2e8f9f7 69 // <8=> 2.2 MHz
<> 144:ef7eb2e8f9f7 70 // <9=> 2.4 MHz
<> 144:ef7eb2e8f9f7 71 // <10=> 2.6 MHz
<> 144:ef7eb2e8f9f7 72 // <11=> 2.7 MHz
<> 144:ef7eb2e8f9f7 73 // <12=> 2.9 MHz
<> 144:ef7eb2e8f9f7 74 // <13=> 3.1 MHz
<> 144:ef7eb2e8f9f7 75 // <14=> 3.2 MHz
<> 144:ef7eb2e8f9f7 76 // <15=> 3.4 MHz
<> 144:ef7eb2e8f9f7 77 // </h>
<> 144:ef7eb2e8f9f7 78 #define WDTOSCCTRL_Val 0x000000A0 // Reset value: 0x0A0
<> 144:ef7eb2e8f9f7 79 //
<> 144:ef7eb2e8f9f7 80 // <h> System PLL Setting (SYSPLLCTRL)
<> 144:ef7eb2e8f9f7 81 // <i> F_clkout = M * F_clkin = F_CCO / (2 * P)
<> 144:ef7eb2e8f9f7 82 // <i> F_clkin must be in the range of 10 MHz to 25 MHz
<> 144:ef7eb2e8f9f7 83 // <i> F_CCO must be in the range of 156 MHz to 320 MHz
<> 144:ef7eb2e8f9f7 84 // <o.0..4> MSEL: Feedback Divider Selection
<> 144:ef7eb2e8f9f7 85 // <i> M = MSEL + 1
<> 144:ef7eb2e8f9f7 86 // <0-31>
<> 144:ef7eb2e8f9f7 87 // <o.5..6> PSEL: Post Divider Selection
<> 144:ef7eb2e8f9f7 88 // <i> Post divider ratio P. Division ratio is 2 * P
<> 144:ef7eb2e8f9f7 89 // <0=> P = 1
<> 144:ef7eb2e8f9f7 90 // <1=> P = 2
<> 144:ef7eb2e8f9f7 91 // <2=> P = 4
<> 144:ef7eb2e8f9f7 92 // <3=> P = 8
<> 144:ef7eb2e8f9f7 93 // </h>
<> 144:ef7eb2e8f9f7 94 #define SYSPLLCTRL_Val 0x00000023 // Reset value: 0x000
<> 144:ef7eb2e8f9f7 95 //
<> 144:ef7eb2e8f9f7 96 // <o.0..1> Main Clock Source Select (MAINCLKSEL)
<> 144:ef7eb2e8f9f7 97 // <0=> IRC Oscillator
<> 144:ef7eb2e8f9f7 98 // <1=> PLL Input
<> 144:ef7eb2e8f9f7 99 // <2=> WD Oscillator
<> 144:ef7eb2e8f9f7 100 // <3=> PLL Output
<> 144:ef7eb2e8f9f7 101 #define MAINCLKSEL_Val 0x00000003 // Reset value: 0x000
<> 144:ef7eb2e8f9f7 102 //
<> 144:ef7eb2e8f9f7 103 // <o.0..7> System AHB Clock Divider (SYSAHBCLKDIV.DIV)
<> 144:ef7eb2e8f9f7 104 // <i> Divides main clock to provide system clock to core, memories, and peripherals.
<> 144:ef7eb2e8f9f7 105 // <i> 0 = is disabled
<> 144:ef7eb2e8f9f7 106 // <0-255>
<> 144:ef7eb2e8f9f7 107 #define SYSAHBCLKDIV_Val 0x00000001 // Reset value: 0x001
<> 144:ef7eb2e8f9f7 108 // </e>
<> 144:ef7eb2e8f9f7 109 //
<> 144:ef7eb2e8f9f7 110 // <e> Clock Configuration (via ROM PLL API)
<> 144:ef7eb2e8f9f7 111 #define CLOCK_SETUP_API 0
<> 144:ef7eb2e8f9f7 112 //
<> 144:ef7eb2e8f9f7 113 // <o> PLL API Mode Select
<> 144:ef7eb2e8f9f7 114 // <0=> Exact
<> 144:ef7eb2e8f9f7 115 // <1=> Less than or equal
<> 144:ef7eb2e8f9f7 116 // <2=> Greater than or equal
<> 144:ef7eb2e8f9f7 117 // <3=> As close as possible
<> 144:ef7eb2e8f9f7 118 #define PLL_API_MODE_Val 0
<> 144:ef7eb2e8f9f7 119 //
<> 144:ef7eb2e8f9f7 120 // <o> CPU Frequency [Hz] <1000000-50000000:1000>
<> 144:ef7eb2e8f9f7 121 #define PLL_API_FREQ_Val 48000000
<> 144:ef7eb2e8f9f7 122 // </e>
<> 144:ef7eb2e8f9f7 123 //
<> 144:ef7eb2e8f9f7 124 // <e> USB Clock Configuration
<> 144:ef7eb2e8f9f7 125 #define USB_CLOCK_SETUP 1
<> 144:ef7eb2e8f9f7 126 // <h> USB PLL Control (USBPLLCTRL)
<> 144:ef7eb2e8f9f7 127 // <i> F_clkout = M * F_clkin = F_CCO / (2 * P)
<> 144:ef7eb2e8f9f7 128 // <i> F_clkin must be in the range of 10 MHz to 25 MHz
<> 144:ef7eb2e8f9f7 129 // <i> F_CCO must be in the range of 156 MHz to 320 MHz
<> 144:ef7eb2e8f9f7 130 // <o.0..4> MSEL: Feedback Divider Selection
<> 144:ef7eb2e8f9f7 131 // <i> M = MSEL + 1
<> 144:ef7eb2e8f9f7 132 // <0-31>
<> 144:ef7eb2e8f9f7 133 // <o.5..6> PSEL: Post Divider Selection
<> 144:ef7eb2e8f9f7 134 // <i> Post divider ratio P. Division ratio is 2 * P
<> 144:ef7eb2e8f9f7 135 // <0=> P = 1
<> 144:ef7eb2e8f9f7 136 // <1=> P = 2
<> 144:ef7eb2e8f9f7 137 // <2=> P = 4
<> 144:ef7eb2e8f9f7 138 // <3=> P = 8
<> 144:ef7eb2e8f9f7 139 // </h>
<> 144:ef7eb2e8f9f7 140 #define USBPLLCTRL_Val 0x00000023 // Reset value: 0x000
<> 144:ef7eb2e8f9f7 141 //
<> 144:ef7eb2e8f9f7 142 // <o.0..1> USB PLL Clock Source Select (USBPLLCLKSEL.SEL)
<> 144:ef7eb2e8f9f7 143 // <i> USB PLL clock source must be switched to System Oscillator for correct USB operation
<> 144:ef7eb2e8f9f7 144 // <0=> IRC Oscillator
<> 144:ef7eb2e8f9f7 145 // <1=> System Oscillator
<> 144:ef7eb2e8f9f7 146 #define USBPLLCLKSEL_Val 0x00000001 // Reset value: 0x000
<> 144:ef7eb2e8f9f7 147 //
<> 144:ef7eb2e8f9f7 148 // <o.0..1> USB Clock Source Select (USBCLKSEL.SEL)
<> 144:ef7eb2e8f9f7 149 // <0=> USB PLL out
<> 144:ef7eb2e8f9f7 150 // <1=> Main clock
<> 144:ef7eb2e8f9f7 151 #define USBCLKSEL_Val 0x00000000 // Reset value: 0x000
<> 144:ef7eb2e8f9f7 152 //
<> 144:ef7eb2e8f9f7 153 // <o.0..7> USB Clock Divider (USBCLKDIV.DIV)
<> 144:ef7eb2e8f9f7 154 // <i> Divides USB clock to 48 MHz.
<> 144:ef7eb2e8f9f7 155 // <i> 0 = is disabled
<> 144:ef7eb2e8f9f7 156 // <0-255>
<> 144:ef7eb2e8f9f7 157 #define USBCLKDIV_Val 0x00000001 // Reset Value: 0x001
<> 144:ef7eb2e8f9f7 158 // </e>
<> 144:ef7eb2e8f9f7 159 //
<> 144:ef7eb2e8f9f7 160 // </e>
<> 144:ef7eb2e8f9f7 161 //
<> 144:ef7eb2e8f9f7 162 // <o0>System Oscillator (XTAL) Frequency [Hz] <1000000-25000000>
<> 144:ef7eb2e8f9f7 163 // <i> XTAL frequency must be in the range of 1 MHz to 25 MHz
<> 144:ef7eb2e8f9f7 164 //
<> 144:ef7eb2e8f9f7 165 #define XTAL_CLK_Val 12000000
<> 144:ef7eb2e8f9f7 166
<> 144:ef7eb2e8f9f7 167 /*
<> 144:ef7eb2e8f9f7 168 //-------- <<< end of configuration section >>> ------------------------------
<> 144:ef7eb2e8f9f7 169 */
<> 144:ef7eb2e8f9f7 170
<> 144:ef7eb2e8f9f7 171 /*----------------------------------------------------------------------------
<> 144:ef7eb2e8f9f7 172 Define clocks
<> 144:ef7eb2e8f9f7 173 *----------------------------------------------------------------------------*/
<> 144:ef7eb2e8f9f7 174 #define __XTAL_CLK ( XTAL_CLK_Val) /* Oscillator freq */
<> 144:ef7eb2e8f9f7 175 #define __SYS_OSC_CLK ( __XTAL_CLK) /* System oscillator freq */
<> 144:ef7eb2e8f9f7 176 #define __IRC_OSC_CLK ( 12000000UL) /* Internal RC oscillator freq */
<> 144:ef7eb2e8f9f7 177 #define __RTC_OSC_CLK ( 32768UL) /* RTC oscillator freq */
<> 144:ef7eb2e8f9f7 178
<> 144:ef7eb2e8f9f7 179 /*----------------------------------------------------------------------------
<> 144:ef7eb2e8f9f7 180 Check the register settings
<> 144:ef7eb2e8f9f7 181 *----------------------------------------------------------------------------*/
<> 144:ef7eb2e8f9f7 182 #define CHECK_RANGE(val, min, max) ((val < min) || (val > max))
<> 144:ef7eb2e8f9f7 183 #define CHECK_RSVD(val, mask) (val & mask)
<> 144:ef7eb2e8f9f7 184
<> 144:ef7eb2e8f9f7 185 #if (CHECK_RSVD((SYSOSCCTRL_Val), ~0x00000003))
<> 144:ef7eb2e8f9f7 186 #error "SYSOSCCTRL: Invalid values of reserved bits!"
<> 144:ef7eb2e8f9f7 187 #endif
<> 144:ef7eb2e8f9f7 188
<> 144:ef7eb2e8f9f7 189 #if (CHECK_RSVD((WDTOSCCTRL_Val), ~0x000001FF))
<> 144:ef7eb2e8f9f7 190 #error "WDTOSCCTRL: Invalid values of reserved bits!"
<> 144:ef7eb2e8f9f7 191 #endif
<> 144:ef7eb2e8f9f7 192
<> 144:ef7eb2e8f9f7 193 #if (CHECK_RANGE((SYSPLLCLKSEL_Val), 0, 3))
<> 144:ef7eb2e8f9f7 194 #error "SYSPLLCLKSEL: Value out of range!"
<> 144:ef7eb2e8f9f7 195 #endif
<> 144:ef7eb2e8f9f7 196
<> 144:ef7eb2e8f9f7 197 #if (SYSPLLCLKSEL_Val == 3) // RTC Oscillator used as PLL input
<> 144:ef7eb2e8f9f7 198 #if (CLOCK_SETUP_API == 1)
<> 144:ef7eb2e8f9f7 199 #error "SYSPLLCLKSEL: RTC oscillator not allowed as PLL clock source!"
<> 144:ef7eb2e8f9f7 200 #endif
<> 144:ef7eb2e8f9f7 201 #if (CLOCK_SETUP_REG == 1) && (MAINCLKSEL_Val == 3) // RTC Oscillator used as PLL input
<> 144:ef7eb2e8f9f7 202 #error "SYSPLLCLKSEL: RTC oscillator not allowed as PLL clock source!"
<> 144:ef7eb2e8f9f7 203 #endif
<> 144:ef7eb2e8f9f7 204 #endif
<> 144:ef7eb2e8f9f7 205
<> 144:ef7eb2e8f9f7 206 #if (CHECK_RSVD((SYSPLLCTRL_Val), ~0x0000007F))
<> 144:ef7eb2e8f9f7 207 #error "SYSPLLCTRL: Invalid values of reserved bits!"
<> 144:ef7eb2e8f9f7 208 #endif
<> 144:ef7eb2e8f9f7 209
<> 144:ef7eb2e8f9f7 210 #if (CHECK_RSVD((MAINCLKSEL_Val), ~0x00000003))
<> 144:ef7eb2e8f9f7 211 #error "MAINCLKSEL: Invalid values of reserved bits!"
<> 144:ef7eb2e8f9f7 212 #endif
<> 144:ef7eb2e8f9f7 213
<> 144:ef7eb2e8f9f7 214 #if (CHECK_RANGE((SYSAHBCLKDIV_Val), 0, 255))
<> 144:ef7eb2e8f9f7 215 #error "SYSAHBCLKDIV: Value out of range!"
<> 144:ef7eb2e8f9f7 216 #endif
<> 144:ef7eb2e8f9f7 217
<> 144:ef7eb2e8f9f7 218 #if ( CLOCK_SETUP_REG == CLOCK_SETUP_API )
<> 144:ef7eb2e8f9f7 219 #error "You must select either manual or API based Clock Configuration!"
<> 144:ef7eb2e8f9f7 220 #endif
<> 144:ef7eb2e8f9f7 221
<> 144:ef7eb2e8f9f7 222 #if (CHECK_RANGE((USBPLLCLKSEL_Val), 0, 1))
<> 144:ef7eb2e8f9f7 223 #error "USBPLLCLKSEL: Value out of range!"
<> 144:ef7eb2e8f9f7 224 #endif
<> 144:ef7eb2e8f9f7 225
<> 144:ef7eb2e8f9f7 226 #if (CHECK_RSVD((USBPLLCTRL_Val), ~0x000007F))
<> 144:ef7eb2e8f9f7 227 #error "USBPLLCTRL: Invalid values of reserved bits!"
<> 144:ef7eb2e8f9f7 228 #endif
<> 144:ef7eb2e8f9f7 229
<> 144:ef7eb2e8f9f7 230 #if (CHECK_RANGE((USBCLKSEL_Val), 0, 1))
<> 144:ef7eb2e8f9f7 231 #error "USBCLKSEL: Value out of range!"
<> 144:ef7eb2e8f9f7 232 #endif
<> 144:ef7eb2e8f9f7 233
<> 144:ef7eb2e8f9f7 234 #if (CHECK_RANGE((USBCLKDIV_Val), 0, 255))
<> 144:ef7eb2e8f9f7 235 #error "USBCLKDIV: Value out of range!"
<> 144:ef7eb2e8f9f7 236 #endif
<> 144:ef7eb2e8f9f7 237
<> 144:ef7eb2e8f9f7 238 #if (CHECK_RANGE(XTAL_CLK_Val, 1000000, 25000000))
<> 144:ef7eb2e8f9f7 239 #error "XTAL frequency is out of bounds"
<> 144:ef7eb2e8f9f7 240 #endif
<> 144:ef7eb2e8f9f7 241
<> 144:ef7eb2e8f9f7 242 #if (CHECK_RANGE(PLL_API_MODE_Val, 0, 3))
<> 144:ef7eb2e8f9f7 243 #error "PLL API Mode Select not valid"
<> 144:ef7eb2e8f9f7 244 #endif
<> 144:ef7eb2e8f9f7 245
<> 144:ef7eb2e8f9f7 246 #if (CHECK_RANGE(PLL_API_FREQ_Val, 1000000, 50000000))
<> 144:ef7eb2e8f9f7 247 #error "CPU Frequency (API mode) not valid"
<> 144:ef7eb2e8f9f7 248 #endif
<> 144:ef7eb2e8f9f7 249
<> 144:ef7eb2e8f9f7 250
<> 144:ef7eb2e8f9f7 251
<> 144:ef7eb2e8f9f7 252 /*----------------------------------------------------------------------------
<> 144:ef7eb2e8f9f7 253 Calculate system core clock
<> 144:ef7eb2e8f9f7 254 *----------------------------------------------------------------------------*/
<> 144:ef7eb2e8f9f7 255 #if (CLOCK_SETUP) /* Clock Setup */
<> 144:ef7eb2e8f9f7 256
<> 144:ef7eb2e8f9f7 257 /* sys_pllclkin calculation */
<> 144:ef7eb2e8f9f7 258 #if ((SYSPLLCLKSEL_Val & 0x03) == 0)
<> 144:ef7eb2e8f9f7 259 #define __SYS_PLLCLKIN (__IRC_OSC_CLK)
<> 144:ef7eb2e8f9f7 260 #elif ((SYSPLLCLKSEL_Val & 0x03) == 1)
<> 144:ef7eb2e8f9f7 261 #define __SYS_PLLCLKIN (__SYS_OSC_CLK)
<> 144:ef7eb2e8f9f7 262 #elif ((SYSPLLCLKSEL_Val & 0x03) == 3)
<> 144:ef7eb2e8f9f7 263 #define __SYS_PLLCLKIN (__RTC_OSC_CLK)
<> 144:ef7eb2e8f9f7 264 #else
<> 144:ef7eb2e8f9f7 265 #error "Oops"
<> 144:ef7eb2e8f9f7 266 #endif
<> 144:ef7eb2e8f9f7 267
<> 144:ef7eb2e8f9f7 268 #if (CLOCK_SETUP_REG == 1) /* Clock Setup via Register */
<> 144:ef7eb2e8f9f7 269
<> 144:ef7eb2e8f9f7 270 #define __FREQSEL ((WDTOSCCTRL_Val >> 5) & 0x0F)
<> 144:ef7eb2e8f9f7 271 #define __DIVSEL (((WDTOSCCTRL_Val & 0x1F) << 1) + 2)
<> 144:ef7eb2e8f9f7 272
<> 144:ef7eb2e8f9f7 273 #if (__FREQSEL == 0)
<> 144:ef7eb2e8f9f7 274 #error "WDTOSCCTRL.FREQSEL undefined!"
<> 144:ef7eb2e8f9f7 275 #elif (__FREQSEL == 1)
<> 144:ef7eb2e8f9f7 276 #define __OSC_CLK ( 500000 / __DIVSEL)
<> 144:ef7eb2e8f9f7 277 #elif (__FREQSEL == 2)
<> 144:ef7eb2e8f9f7 278 #define __OSC_CLK ( 800000 / __DIVSEL)
<> 144:ef7eb2e8f9f7 279 #elif (__FREQSEL == 3)
<> 144:ef7eb2e8f9f7 280 #define __OSC_CLK (1100000 / __DIVSEL)
<> 144:ef7eb2e8f9f7 281 #elif (__FREQSEL == 4)
<> 144:ef7eb2e8f9f7 282 #define __OSC_CLK (1400000 / __DIVSEL)
<> 144:ef7eb2e8f9f7 283 #elif (__FREQSEL == 5)
<> 144:ef7eb2e8f9f7 284 #define __OSC_CLK (1600000 / __DIVSEL)
<> 144:ef7eb2e8f9f7 285 #elif (__FREQSEL == 6)
<> 144:ef7eb2e8f9f7 286 #define __OSC_CLK (1800000 / __DIVSEL)
<> 144:ef7eb2e8f9f7 287 #elif (__FREQSEL == 7)
<> 144:ef7eb2e8f9f7 288 #define __OSC_CLK (2000000 / __DIVSEL)
<> 144:ef7eb2e8f9f7 289 #elif (__FREQSEL == 8)
<> 144:ef7eb2e8f9f7 290 #define __OSC_CLK (2200000 / __DIVSEL)
<> 144:ef7eb2e8f9f7 291 #elif (__FREQSEL == 9)
<> 144:ef7eb2e8f9f7 292 #define __OSC_CLK (2400000 / __DIVSEL)
<> 144:ef7eb2e8f9f7 293 #elif (__FREQSEL == 10)
<> 144:ef7eb2e8f9f7 294 #define __OSC_CLK (2600000 / __DIVSEL)
<> 144:ef7eb2e8f9f7 295 #elif (__FREQSEL == 11)
<> 144:ef7eb2e8f9f7 296 #define __OSC_CLK (2700000 / __DIVSEL)
<> 144:ef7eb2e8f9f7 297 #elif (__FREQSEL == 12)
<> 144:ef7eb2e8f9f7 298 #define __OSC_CLK (2900000 / __DIVSEL)
<> 144:ef7eb2e8f9f7 299 #elif (__FREQSEL == 13)
<> 144:ef7eb2e8f9f7 300 #define __OSC_CLK (3100000 / __DIVSEL)
<> 144:ef7eb2e8f9f7 301 #elif (__FREQSEL == 14)
<> 144:ef7eb2e8f9f7 302 #define __OSC_CLK (3200000 / __DIVSEL)
<> 144:ef7eb2e8f9f7 303 #else
<> 144:ef7eb2e8f9f7 304 #define __OSC_CLK (3400000 / __DIVSEL)
<> 144:ef7eb2e8f9f7 305 #endif
<> 144:ef7eb2e8f9f7 306
<> 144:ef7eb2e8f9f7 307 #define __SYS_PLLCLKOUT (__SYS_PLLCLKIN * ((SYSPLLCTRL_Val & 0x01F) + 1))
<> 144:ef7eb2e8f9f7 308
<> 144:ef7eb2e8f9f7 309 /* main clock calculation */
<> 144:ef7eb2e8f9f7 310 #if ((MAINCLKSEL_Val & 0x03) == 0)
<> 144:ef7eb2e8f9f7 311 #define __MAIN_CLOCK (__IRC_OSC_CLK)
<> 144:ef7eb2e8f9f7 312 #elif ((MAINCLKSEL_Val & 0x03) == 1)
<> 144:ef7eb2e8f9f7 313 #define __MAIN_CLOCK (__SYS_PLLCLKIN)
<> 144:ef7eb2e8f9f7 314 #elif ((MAINCLKSEL_Val & 0x03) == 2)
<> 144:ef7eb2e8f9f7 315 #define __MAIN_CLOCK (__OSC_CLK)
<> 144:ef7eb2e8f9f7 316 #elif ((MAINCLKSEL_Val & 0x03) == 3)
<> 144:ef7eb2e8f9f7 317 #define __MAIN_CLOCK (__SYS_PLLCLKOUT)
<> 144:ef7eb2e8f9f7 318 #else
<> 144:ef7eb2e8f9f7 319 #error "Oops"
<> 144:ef7eb2e8f9f7 320 #endif
<> 144:ef7eb2e8f9f7 321
<> 144:ef7eb2e8f9f7 322 #define __SYSTEM_CLOCK (__MAIN_CLOCK / SYSAHBCLKDIV_Val)
<> 144:ef7eb2e8f9f7 323 #endif /* Clock Setup via Register */
<> 144:ef7eb2e8f9f7 324
<> 144:ef7eb2e8f9f7 325 #if (CLOCK_SETUP_API == 1) /* Clock Setup via ROM API */
<> 144:ef7eb2e8f9f7 326 #define __SYSTEM_CLOCK (PLL_API_FREQ_Val)
<> 144:ef7eb2e8f9f7 327 #endif /* Clock Setup via PLL API */
<> 144:ef7eb2e8f9f7 328
<> 144:ef7eb2e8f9f7 329 #else
<> 144:ef7eb2e8f9f7 330 #define __SYSTEM_CLOCK (__IRC_OSC_CLK)
<> 144:ef7eb2e8f9f7 331 #endif /* CLOCK_SETUP */
<> 144:ef7eb2e8f9f7 332
<> 144:ef7eb2e8f9f7 333
<> 144:ef7eb2e8f9f7 334
<> 144:ef7eb2e8f9f7 335 #if ((CLOCK_SETUP == 1) && (CLOCK_SETUP_API == 1)) /* PLL Setup via PLL API */
<> 144:ef7eb2e8f9f7 336 #include "power_api.h"
<> 144:ef7eb2e8f9f7 337
<> 144:ef7eb2e8f9f7 338 typedef struct _ROM {
<> 144:ef7eb2e8f9f7 339 const unsigned p_dev0;
<> 144:ef7eb2e8f9f7 340 const unsigned p_dev1;
<> 144:ef7eb2e8f9f7 341 const unsigned p_dev2;
<> 144:ef7eb2e8f9f7 342 const PWRD * pPWRD; /* ROM Power Management API */
<> 144:ef7eb2e8f9f7 343 const unsigned p_dev4;
<> 144:ef7eb2e8f9f7 344 const unsigned p_dev5;
<> 144:ef7eb2e8f9f7 345 const unsigned p_dev6;
<> 144:ef7eb2e8f9f7 346 const unsigned p_dev7;
<> 144:ef7eb2e8f9f7 347 } ROM;
<> 144:ef7eb2e8f9f7 348
<> 144:ef7eb2e8f9f7 349 /*----------------------------------------------------------------------------
<> 144:ef7eb2e8f9f7 350 PLL API Function
<> 144:ef7eb2e8f9f7 351 *----------------------------------------------------------------------------*/
<> 144:ef7eb2e8f9f7 352 static void setPLL(const uint32_t pllMode, const uint32_t pllInFreq, const uint32_t reqCpuFreq)
<> 144:ef7eb2e8f9f7 353 {
<> 144:ef7eb2e8f9f7 354 uint32_t cmd[5], res[5];
<> 144:ef7eb2e8f9f7 355 ROM ** rom = (ROM **) 0x1FFF1FF8; /* pointer to power API calls */
<> 144:ef7eb2e8f9f7 356
<> 144:ef7eb2e8f9f7 357 cmd[0] = pllInFreq; /* PLL's input freq in KHz */
<> 144:ef7eb2e8f9f7 358 cmd[1] = reqCpuFreq; /* requested CPU freq in KHz */
<> 144:ef7eb2e8f9f7 359 cmd[2] = pllMode;
<> 144:ef7eb2e8f9f7 360 cmd[3] = 0; /* no timeout for PLL to lock */
<> 144:ef7eb2e8f9f7 361
<> 144:ef7eb2e8f9f7 362 /* Execute API call */
<> 144:ef7eb2e8f9f7 363 (*rom)->pPWRD->set_pll(cmd, res); /* call API function */
<> 144:ef7eb2e8f9f7 364 if ((res[0] != PLL_CMD_SUCCESS)){ /* in case of an error ... */
<> 144:ef7eb2e8f9f7 365 while(1); /* ... stay here */
<> 144:ef7eb2e8f9f7 366 }
<> 144:ef7eb2e8f9f7 367 }
<> 144:ef7eb2e8f9f7 368 #endif
<> 144:ef7eb2e8f9f7 369
<> 144:ef7eb2e8f9f7 370
<> 144:ef7eb2e8f9f7 371
<> 144:ef7eb2e8f9f7 372
<> 144:ef7eb2e8f9f7 373 /*----------------------------------------------------------------------------
<> 144:ef7eb2e8f9f7 374 Clock Variable definitions
<> 144:ef7eb2e8f9f7 375 *----------------------------------------------------------------------------*/
<> 144:ef7eb2e8f9f7 376 uint32_t SystemCoreClock = __SYSTEM_CLOCK; /* System Clock Frequency */
<> 144:ef7eb2e8f9f7 377
<> 144:ef7eb2e8f9f7 378
<> 144:ef7eb2e8f9f7 379 /*----------------------------------------------------------------------------
<> 144:ef7eb2e8f9f7 380 Clock functions
<> 144:ef7eb2e8f9f7 381 *----------------------------------------------------------------------------*/
<> 144:ef7eb2e8f9f7 382 void SystemCoreClockUpdate (void) /* Get Core Clock Frequency */
<> 144:ef7eb2e8f9f7 383 {
<> 144:ef7eb2e8f9f7 384 uint32_t oscClk = 0;
<> 144:ef7eb2e8f9f7 385
<> 144:ef7eb2e8f9f7 386 /* Determine clock frequency according to clock register values */
<> 144:ef7eb2e8f9f7 387 switch ((LPC_SYSCON->WDTOSCCTRL >> 5) & 0x0F) {
<> 144:ef7eb2e8f9f7 388 case 0: oscClk = 0; break;
<> 144:ef7eb2e8f9f7 389 case 1: oscClk = 500000; break;
<> 144:ef7eb2e8f9f7 390 case 2: oscClk = 800000; break;
<> 144:ef7eb2e8f9f7 391 case 3: oscClk = 1100000; break;
<> 144:ef7eb2e8f9f7 392 case 4: oscClk = 1400000; break;
<> 144:ef7eb2e8f9f7 393 case 5: oscClk = 1600000; break;
<> 144:ef7eb2e8f9f7 394 case 6: oscClk = 1800000; break;
<> 144:ef7eb2e8f9f7 395 case 7: oscClk = 2000000; break;
<> 144:ef7eb2e8f9f7 396 case 8: oscClk = 2200000; break;
<> 144:ef7eb2e8f9f7 397 case 9: oscClk = 2400000; break;
<> 144:ef7eb2e8f9f7 398 case 10: oscClk = 2600000; break;
<> 144:ef7eb2e8f9f7 399 case 11: oscClk = 2700000; break;
<> 144:ef7eb2e8f9f7 400 case 12: oscClk = 2900000; break;
<> 144:ef7eb2e8f9f7 401 case 13: oscClk = 3100000; break;
<> 144:ef7eb2e8f9f7 402 case 14: oscClk = 3200000; break;
<> 144:ef7eb2e8f9f7 403 case 15: oscClk = 3400000; break;
<> 144:ef7eb2e8f9f7 404 }
<> 144:ef7eb2e8f9f7 405 oscClk /= ((LPC_SYSCON->WDTOSCCTRL & 0x1F) << 1) + 2;
<> 144:ef7eb2e8f9f7 406
<> 144:ef7eb2e8f9f7 407 switch (LPC_SYSCON->MAINCLKSEL & 0x03) {
<> 144:ef7eb2e8f9f7 408 case 0: /* Internal RC oscillator */
<> 144:ef7eb2e8f9f7 409 SystemCoreClock = __IRC_OSC_CLK;
<> 144:ef7eb2e8f9f7 410 break;
<> 144:ef7eb2e8f9f7 411 case 1: /* Input Clock to System PLL */
<> 144:ef7eb2e8f9f7 412 switch (LPC_SYSCON->SYSPLLCLKSEL & 0x03) {
<> 144:ef7eb2e8f9f7 413 case 0: /* Internal RC oscillator */
<> 144:ef7eb2e8f9f7 414 SystemCoreClock = __IRC_OSC_CLK;
<> 144:ef7eb2e8f9f7 415 break;
<> 144:ef7eb2e8f9f7 416 case 1: /* System oscillator */
<> 144:ef7eb2e8f9f7 417 SystemCoreClock = __SYS_OSC_CLK;
<> 144:ef7eb2e8f9f7 418 break;
<> 144:ef7eb2e8f9f7 419 case 2: /* Reserved */
<> 144:ef7eb2e8f9f7 420 case 3: /* Reserved */
<> 144:ef7eb2e8f9f7 421 SystemCoreClock = 0;
<> 144:ef7eb2e8f9f7 422 break;
<> 144:ef7eb2e8f9f7 423 }
<> 144:ef7eb2e8f9f7 424 break;
<> 144:ef7eb2e8f9f7 425 case 2: /* WDT Oscillator */
<> 144:ef7eb2e8f9f7 426 SystemCoreClock = oscClk;
<> 144:ef7eb2e8f9f7 427 break;
<> 144:ef7eb2e8f9f7 428 case 3: /* System PLL Clock Out */
<> 144:ef7eb2e8f9f7 429 switch (LPC_SYSCON->SYSPLLCLKSEL & 0x03) {
<> 144:ef7eb2e8f9f7 430 case 0: /* Internal RC oscillator */
<> 144:ef7eb2e8f9f7 431 SystemCoreClock = __IRC_OSC_CLK * ((LPC_SYSCON->SYSPLLCTRL & 0x01F) + 1);
<> 144:ef7eb2e8f9f7 432 break;
<> 144:ef7eb2e8f9f7 433 case 1: /* System oscillator */
<> 144:ef7eb2e8f9f7 434 SystemCoreClock = __SYS_OSC_CLK * ((LPC_SYSCON->SYSPLLCTRL & 0x01F) + 1);
<> 144:ef7eb2e8f9f7 435 break;
<> 144:ef7eb2e8f9f7 436 case 2: /* Reserved */
<> 144:ef7eb2e8f9f7 437 case 3: /* Reserved */
<> 144:ef7eb2e8f9f7 438 SystemCoreClock = 0;
<> 144:ef7eb2e8f9f7 439 break;
<> 144:ef7eb2e8f9f7 440 }
<> 144:ef7eb2e8f9f7 441 break;
<> 144:ef7eb2e8f9f7 442 }
<> 144:ef7eb2e8f9f7 443
<> 144:ef7eb2e8f9f7 444 SystemCoreClock /= LPC_SYSCON->SYSAHBCLKDIV;
<> 144:ef7eb2e8f9f7 445
<> 144:ef7eb2e8f9f7 446 }
<> 144:ef7eb2e8f9f7 447
<> 144:ef7eb2e8f9f7 448 #define PDRUN_VALID_BITS 0x000025FFL
<> 144:ef7eb2e8f9f7 449 #define PDRUN_RESERVED_ONE 0x0000C800L
<> 144:ef7eb2e8f9f7 450
<> 144:ef7eb2e8f9f7 451 static void power_down_config(uint32_t val)
<> 144:ef7eb2e8f9f7 452 {
<> 144:ef7eb2e8f9f7 453 volatile uint32_t tmp;
<> 144:ef7eb2e8f9f7 454 tmp = (LPC_SYSCON->PDRUNCFG & PDRUN_VALID_BITS);
<> 144:ef7eb2e8f9f7 455 tmp |= (val & PDRUN_VALID_BITS);
<> 144:ef7eb2e8f9f7 456 LPC_SYSCON->PDRUNCFG = (tmp | PDRUN_RESERVED_ONE);
<> 144:ef7eb2e8f9f7 457 }
<> 144:ef7eb2e8f9f7 458
<> 144:ef7eb2e8f9f7 459 static void power_up_config(uint32_t val)
<> 144:ef7eb2e8f9f7 460 {
<> 144:ef7eb2e8f9f7 461 volatile uint32_t tmp;
<> 144:ef7eb2e8f9f7 462 tmp = (LPC_SYSCON->PDRUNCFG & PDRUN_VALID_BITS);
<> 144:ef7eb2e8f9f7 463 tmp &= ~(val & PDRUN_VALID_BITS);
<> 144:ef7eb2e8f9f7 464 LPC_SYSCON->PDRUNCFG = (tmp | PDRUN_RESERVED_ONE);
<> 144:ef7eb2e8f9f7 465 }
<> 144:ef7eb2e8f9f7 466
<> 144:ef7eb2e8f9f7 467 /**
<> 144:ef7eb2e8f9f7 468 * Initialize the system
<> 144:ef7eb2e8f9f7 469 *
<> 144:ef7eb2e8f9f7 470 * @param none
<> 144:ef7eb2e8f9f7 471 * @return none
<> 144:ef7eb2e8f9f7 472 *
<> 144:ef7eb2e8f9f7 473 * @brief Setup the microcontroller system.
<> 144:ef7eb2e8f9f7 474 */
<> 144:ef7eb2e8f9f7 475 void SystemInit (void) {
<> 144:ef7eb2e8f9f7 476 #if (CLOCK_SETUP)
<> 144:ef7eb2e8f9f7 477 volatile uint32_t i;
<> 144:ef7eb2e8f9f7 478 #endif
<> 144:ef7eb2e8f9f7 479 LPC_SYSCON->SYSAHBCLKCTRL |= (1<<16);
<> 144:ef7eb2e8f9f7 480 LPC_SYSCON->SYSPLLCTRL = SYSPLLCTRL_Val;
<> 144:ef7eb2e8f9f7 481
<> 144:ef7eb2e8f9f7 482 #if (CLOCK_SETUP) /* Clock Setup */
<> 144:ef7eb2e8f9f7 483
<> 144:ef7eb2e8f9f7 484 #if ((SYSPLLCLKSEL_Val & 0x03) == 1)
<> 144:ef7eb2e8f9f7 485 // Initialize XTALIN/XTALOUT pins
<> 144:ef7eb2e8f9f7 486 LPC_IOCON->PIO2_0 = 0x01;
<> 144:ef7eb2e8f9f7 487 LPC_IOCON->PIO2_1 = 0x01;
<> 144:ef7eb2e8f9f7 488
<> 144:ef7eb2e8f9f7 489 LPC_SYSCON->SYSOSCCTRL = SYSOSCCTRL_Val;
<> 144:ef7eb2e8f9f7 490 power_up_config(1<<5); /* Power-up sysosc */
<> 144:ef7eb2e8f9f7 491 for (i = 0; i < 2500; i++) __NOP(); /* Wait for osc to stabilize */
<> 144:ef7eb2e8f9f7 492 #endif
<> 144:ef7eb2e8f9f7 493
<> 144:ef7eb2e8f9f7 494 #if ((SYSPLLCLKSEL_Val & 0x03) == 3)
<> 144:ef7eb2e8f9f7 495 LPC_SYSCON->RTCOSCCTRL = (1 << 0); /* Enable 32 kHz output */
<> 144:ef7eb2e8f9f7 496 for (i = 0; i < 200; i++) __NOP(); /* Wait for osc to stabilize */
<> 144:ef7eb2e8f9f7 497 #endif
<> 144:ef7eb2e8f9f7 498
<> 144:ef7eb2e8f9f7 499 LPC_SYSCON->SYSPLLCLKSEL = SYSPLLCLKSEL_Val; /* Select PLL Input */
<> 144:ef7eb2e8f9f7 500 LPC_SYSCON->SYSPLLCLKUEN = 0x01; /* Update Clock Source */
<> 144:ef7eb2e8f9f7 501 LPC_SYSCON->SYSPLLCLKUEN = 0x00; /* Toggle Update Register */
<> 144:ef7eb2e8f9f7 502 LPC_SYSCON->SYSPLLCLKUEN = 0x01;
<> 144:ef7eb2e8f9f7 503 while (!(LPC_SYSCON->SYSPLLCLKUEN & 0x01)); /* Wait Until Updated */
<> 144:ef7eb2e8f9f7 504
<> 144:ef7eb2e8f9f7 505 #if (CLOCK_SETUP_REG == 1) /* Clock Setup via Register */
<> 144:ef7eb2e8f9f7 506
<> 144:ef7eb2e8f9f7 507 #if (((MAINCLKSEL_Val & 0x03) == 2) )
<> 144:ef7eb2e8f9f7 508 LPC_SYSCON->WDTOSCCTRL = WDTOSCCTRL_Val;
<> 144:ef7eb2e8f9f7 509 LPC_SYSCON->PDRUNCFG &= ~(1 << 6); /* Power-up WDT Clock */
<> 144:ef7eb2e8f9f7 510 for (i = 0; i < 2000; i++) __NOP(); /* Wait for osc to stabilize */
<> 144:ef7eb2e8f9f7 511 #endif
<> 144:ef7eb2e8f9f7 512
<> 144:ef7eb2e8f9f7 513 #if ((MAINCLKSEL_Val & 0x03) == 3) /* Main Clock is PLL Out */
<> 144:ef7eb2e8f9f7 514 power_down_config(1<<7); /* Power-down SYSPLL */
<> 144:ef7eb2e8f9f7 515 LPC_SYSCON->SYSPLLCTRL = SYSPLLCTRL_Val;
<> 144:ef7eb2e8f9f7 516 power_up_config(1<<7); /* Power-up SYSPLL */
<> 144:ef7eb2e8f9f7 517 while (!(LPC_SYSCON->SYSPLLSTAT & 0x01)); /* Wait Until PLL Locked */
<> 144:ef7eb2e8f9f7 518 #endif
<> 144:ef7eb2e8f9f7 519
<> 144:ef7eb2e8f9f7 520 LPC_SYSCON->MAINCLKSEL = MAINCLKSEL_Val; /* Select Clock Source */
<> 144:ef7eb2e8f9f7 521 LPC_SYSCON->MAINCLKUEN = 0x01; /* Update MCLK Clock Source */
<> 144:ef7eb2e8f9f7 522 LPC_SYSCON->MAINCLKUEN = 0x00; /* Toggle Update Register */
<> 144:ef7eb2e8f9f7 523 LPC_SYSCON->MAINCLKUEN = 0x01;
<> 144:ef7eb2e8f9f7 524 while (!(LPC_SYSCON->MAINCLKUEN & 0x01)); /* Wait Until Updated */
<> 144:ef7eb2e8f9f7 525
<> 144:ef7eb2e8f9f7 526 LPC_SYSCON->SYSAHBCLKDIV = SYSAHBCLKDIV_Val;
<> 144:ef7eb2e8f9f7 527 #endif /* Clock Setup via Register */
<> 144:ef7eb2e8f9f7 528
<> 144:ef7eb2e8f9f7 529 #if (CLOCK_SETUP_API == 1) /* Clock Setup via PLL API */
<> 144:ef7eb2e8f9f7 530 // LPC_SYSCON->SYSPLLCLKSEL = 0x00; /* Use IRC */
<> 144:ef7eb2e8f9f7 531 // LPC_SYSCON->SYSPLLCLKUEN = 0x01; /* Update Clock Source */
<> 144:ef7eb2e8f9f7 532 // LPC_SYSCON->SYSPLLCLKUEN = 0x00; /* Toggle Update Register */
<> 144:ef7eb2e8f9f7 533 // LPC_SYSCON->SYSPLLCLKUEN = 0x01;
<> 144:ef7eb2e8f9f7 534 // while (!(LPC_SYSCON->SYSPLLCLKUEN & 0x01)); /* Wait Until Updated */
<> 144:ef7eb2e8f9f7 535
<> 144:ef7eb2e8f9f7 536 LPC_SYSCON->MAINCLKSEL = SYSPLLCLKSEL_Val; /* Select same as SYSPLL */
<> 144:ef7eb2e8f9f7 537 LPC_SYSCON->MAINCLKUEN = 0x01; /* Update MCLK Clock Source */
<> 144:ef7eb2e8f9f7 538 LPC_SYSCON->MAINCLKUEN = 0x00; /* Toggle Update Register */
<> 144:ef7eb2e8f9f7 539 LPC_SYSCON->MAINCLKUEN = 0x01;
<> 144:ef7eb2e8f9f7 540 while (!(LPC_SYSCON->MAINCLKUEN & 0x01)); /* Wait Until Updated */
<> 144:ef7eb2e8f9f7 541
<> 144:ef7eb2e8f9f7 542 LPC_SYSCON->SYSAHBCLKDIV = 1;
<> 144:ef7eb2e8f9f7 543
<> 144:ef7eb2e8f9f7 544 setPLL(PLL_API_MODE_Val, __SYS_PLLCLKIN / 1000, PLL_API_FREQ_Val / 1000);
<> 144:ef7eb2e8f9f7 545 #endif /* Clock Setup via PLL API */
<> 144:ef7eb2e8f9f7 546
<> 144:ef7eb2e8f9f7 547 #if (USB_CLOCK_SETUP == 1) /* USB clock is used */
<> 144:ef7eb2e8f9f7 548 LPC_SYSCON->PDRUNCFG &= ~(1 << 10); /* Power-up USB PHY */
<> 144:ef7eb2e8f9f7 549
<> 144:ef7eb2e8f9f7 550 #if ((USBCLKSEL_Val & 0x003) == 0) /* USB clock is USB PLL out */
<> 144:ef7eb2e8f9f7 551 LPC_SYSCON->PDRUNCFG &= ~(1 << 8); /* Power-up USB PLL */
<> 144:ef7eb2e8f9f7 552 LPC_SYSCON->USBPLLCLKSEL = USBPLLCLKSEL_Val; /* Select PLL Input */
<> 144:ef7eb2e8f9f7 553 LPC_SYSCON->USBPLLCLKUEN = 0x01; /* Update Clock Source */
<> 144:ef7eb2e8f9f7 554 LPC_SYSCON->USBPLLCLKUEN = 0x00; /* Toggle Update Register */
<> 144:ef7eb2e8f9f7 555 LPC_SYSCON->USBPLLCLKUEN = 0x01;
<> 144:ef7eb2e8f9f7 556 while (!(LPC_SYSCON->USBPLLCLKUEN & 0x01)); /* Wait Until Updated */
<> 144:ef7eb2e8f9f7 557
<> 144:ef7eb2e8f9f7 558 LPC_SYSCON->USBPLLCTRL = USBPLLCTRL_Val;
<> 144:ef7eb2e8f9f7 559 while (!(LPC_SYSCON->USBPLLSTAT & 0x01)); /* Wait Until PLL Locked */
<> 144:ef7eb2e8f9f7 560
<> 144:ef7eb2e8f9f7 561 LPC_SYSCON->USBCLKSEL = 0x00; /* Select USB PLL */
<> 144:ef7eb2e8f9f7 562 #endif
<> 144:ef7eb2e8f9f7 563
<> 144:ef7eb2e8f9f7 564 LPC_SYSCON->USBCLKSEL = USBCLKSEL_Val; /* Select USB Clock */
<> 144:ef7eb2e8f9f7 565 LPC_SYSCON->USBCLKDIV = USBCLKDIV_Val; /* Set USB clock divider */
<> 144:ef7eb2e8f9f7 566
<> 144:ef7eb2e8f9f7 567 #else /* USB clock is not used */
<> 144:ef7eb2e8f9f7 568 LPC_SYSCON->PDRUNCFG |= (1 << 10); /* Power-down USB PHY */
<> 144:ef7eb2e8f9f7 569 LPC_SYSCON->PDRUNCFG |= (1 << 8); /* Power-down USB PLL */
<> 144:ef7eb2e8f9f7 570 #endif
<> 144:ef7eb2e8f9f7 571
<> 144:ef7eb2e8f9f7 572 #endif /* Clock Setup */
<> 144:ef7eb2e8f9f7 573
<> 144:ef7eb2e8f9f7 574 }