72 if (
SCB->CPUID != K60_EXPECTED_CPUID)
74 uint32_t CPUID =
SCB->CPUID;
78 (void)SILICON_REVISION;
105 SIM->SOPT2 &= ~(SIM_SOPT2_PLLFLLSEL_MASK);
109 SIM->SOPT1 |= SIM_SOPT1_OSC32KSEL_MASK;
110 #elif K60_CPU_REV == 2
111 SIM->SOPT1 = (
SIM->SOPT1 & ~(SIM_SOPT1_OSC32KSEL(0b11))) | SIM_SOPT1_OSC32KSEL(0b10);
113 #error Unknown K60 CPU revision
119 SIM->SOPT2 |= SIM_SOPT2_MCGCLKSEL_MASK;
120 #elif K60_CPU_REV == 2
122 MCG->C7 = (MCG_C7_OSCSEL_MASK);
124 #error Unknown K60 CPU revision
130 MCG->C2 = (MCG_C2_RANGE(0));
131 #elif K60_CPU_REV == 2
133 MCG->C2 = (MCG_C2_RANGE0(0));
135 #error Unknown K60 CPU revision
139 MCG->C6 &= ~(MCG_C6_PLLS_MASK);
140 while((
MCG->S & MCG_S_PLLST_MASK)) {
147 MCG->C1 = MCG_C1_CLKS(0) | MCG_C1_FRDIV(0);
148 while((
MCG->S & MCG_S_IREFST_MASK) != 0u) {
151 while((
MCG->S & MCG_S_CLKST_MASK) != 0x00u) {
165 for(i = 0; i < 10000; ++i)
167 asm volatile (
"nop\n");
176 uint32_t MCGOUTClock;
179 if ((
MCG->C1 & MCG_C1_CLKS_MASK) == 0x0u) {
181 if ((
MCG->C6 & MCG_C6_PLLS_MASK) == 0x0u) {
183 if ((
MCG->C1 & MCG_C1_IREFS_MASK) == 0x0u) {
187 if ((
SIM->SOPT2 & SIM_SOPT2_MCGCLKSEL_MASK) == 0x0u) {
194 if ((
MCG->C7 & MCG_C7_OSCSEL_MASK) == 0x0u) {
200 Divider = (uint8_t)(1u << ((
MCG->C1 & MCG_C1_FRDIV_MASK) >> MCG_C1_FRDIV_SHIFT));
201 MCGOUTClock = (MCGOUTClock / Divider);
202 if ((
MCG->C2 & MCG_C2_RANGE0_MASK) != 0x0u) {
209 switch (
MCG->C4 & (MCG_C4_DMX32_MASK | MCG_C4_DRST_DRS_MASK)) {
213 case (MCG_C4_DRST_DRS(0b01)):
214 MCGOUTClock *= 1280u;
216 case (MCG_C4_DRST_DRS(0b10)):
217 MCGOUTClock *= 1920u;
219 case (MCG_C4_DRST_DRS(0b11)):
220 MCGOUTClock *= 2560u;
222 case (MCG_C4_DMX32_MASK):
225 case (MCG_C4_DMX32_MASK | MCG_C4_DRST_DRS(0b01)):
226 MCGOUTClock *= 1464u;
228 case (MCG_C4_DMX32_MASK | MCG_C4_DRST_DRS(0b10)):
229 MCGOUTClock *= 2197u;
231 case (MCG_C4_DMX32_MASK | MCG_C4_DRST_DRS(0b11)):
232 MCGOUTClock *= 2929u;
239 Divider = (1u + (
MCG->C5 & MCG_C5_PRDIV0_MASK));
241 Divider = ((
MCG->C6 & MCG_C6_VDIV0_MASK) + 24u);
242 MCGOUTClock *= Divider;
244 }
else if ((
MCG->C1 & MCG_C1_CLKS_MASK) == MCG_C1_CLKS(0b01)) {
246 if ((
MCG->C2 & MCG_C2_IRCS_MASK) == 0x0u) {
257 }
else if ((
MCG->C1 & MCG_C1_CLKS_MASK) == MCG_C1_CLKS(0b10)) {
261 if ((
SIM->SOPT2 & SIM_SOPT2_MCGCLKSEL_MASK) == 0x0u) {
268 if ((
MCG->C7 & MCG_C7_OSCSEL_MASK) == 0x0u) {
279 SystemBusClock = (MCGOUTClock / (1u + ((
SIM->CLKDIV1 & SIM_CLKDIV1_OUTDIV2_MASK) >> SIM_CLKDIV1_OUTDIV2_SHIFT)));
280 SystemFlexBusClock = (MCGOUTClock / (1u + ((
SIM->CLKDIV1 & SIM_CLKDIV1_OUTDIV3_MASK) >> SIM_CLKDIV1_OUTDIV3_SHIFT)));
281 SystemFlashClock = (MCGOUTClock / (1u + ((
SIM->CLKDIV1 & SIM_CLKDIV1_OUTDIV4_MASK) >> SIM_CLKDIV1_OUTDIV4_SHIFT)));
void SystemInit(void)
Initialize the system.
K60 clock configuration defines.
#define DEFAULT_SYSTEM_CLOCK
Default System clock value.
#define CONFIG_CLOCK_K60_BUS_DIV
Bus clock divider setting, the actual hardware register value, see reference manual for details...
uint32_t SystemFlexBusClock
Current FlexBus clock frequency.
uint32_t SystemFlashClock
Current flash clock frequency.
#define CONFIG_CLOCK_K60_SYS_DIV
System clock divider setting, the actual hardware register value, see reference manual for details...
void __attribute__((interrupt))
This ISR handles most of the business interacting with the 1-wire bus.
#define CPU_XTAL_CLK_HZ
Value of the external crystal or oscillator clock frequency in Hz.
#define SIM
Peripheral SIM base pointer.
#define CONFIG_CLOCK_K60_FB_DIV
Flexbus clock divider setting, the actual hardware register value, see reference manual for details...
#define SCB_CPUID_REVISION_Msk
void rtc_init(void)
Initialize the RTC hardware.
K60 hardware register header wrapper.
#define CPU_INT_FAST_CLK_HZ
Value of the fast internal oscillator clock frequency in Hz.
#define DEBUGGER_BREAK(sig)
Make the CPU signal to the debugger and break execution by issuing a bkpt instruction.
#define CONFIG_CLOCK_K60_FLASH_DIV
Flash clock divider setting, the actual hardware register value, see reference manual for details...
#define CONFIG_CLOCK_K60_FLL_MCG_C4_DMX32
FLL parameter DMX32 in MCG register C4, see reference manual for details.
#define CONFIG_CLOCK_K60_FLL_MCG_C4_DRST_DRS
FLL parameter DRST DRS in MCG register C4, see reference manual for details.
uint32_t SystemCoreClock
Current core clock frequency.
#define CPU_INT_SLOW_CLK_HZ
Value of the slow internal oscillator clock frequency in Hz.
#define CPU_XTAL32k_CLK_HZ
Value of the external 32k crystal or oscillator clock frequency in Hz.
#define MCG
Peripheral MCG base pointer.
void SystemCoreClockUpdate(void)
Update internal SystemCoreClock variable.
uint32_t SystemSysClock
Current system clock frequency.
uint32_t SystemBusClock
Current bus clock frequency.