|
| 1 | +/* |
| 2 | +** ################################################################### |
| 3 | +** Processors: MKL05Z32FK4 |
| 4 | +** MKL05Z32LC4 |
| 5 | +** MKL05Z32VLF4 |
| 6 | +** |
| 7 | +** Compilers: ARM Compiler |
| 8 | +** Freescale C/C++ for Embedded ARM |
| 9 | +** GNU C Compiler |
| 10 | +** IAR ANSI C/C++ Compiler for ARM |
| 11 | +** |
| 12 | +** Reference manual: KL05P48M48SF1RM, Rev.3, Sep 2012 |
| 13 | +** Version: rev. 1.6, 2013-04-11 |
| 14 | +** |
| 15 | +** Abstract: |
| 16 | +** Provides a system configuration function and a global variable that |
| 17 | +** contains the system frequency. It configures the device and initializes |
| 18 | +** the oscillator (PLL) that is part of the microcontroller device. |
| 19 | +** |
| 20 | +** Copyright: 2013 Freescale, Inc. All Rights Reserved. |
| 21 | +** |
| 22 | +** http: www.freescale.com |
| 23 | +** mail: support@freescale.com |
| 24 | +** |
| 25 | +** Revisions: |
| 26 | +** - rev. 1.0 (2012-06-08) |
| 27 | +** Initial version. |
| 28 | +** - rev. 1.1 (2012-06-21) |
| 29 | +** Update according to reference manual rev. 1. |
| 30 | +** - rev. 1.2 (2012-08-01) |
| 31 | +** Device type UARTLP changed to UART0. |
| 32 | +** Missing PORTB_IRQn interrupt number definition added. |
| 33 | +** - rev. 1.3 (2012-10-04) |
| 34 | +** Update according to reference manual rev. 3. |
| 35 | +** - rev. 1.4 (2012-11-22) |
| 36 | +** MCG module - bit LOLS in MCG_S register renamed to LOLS0. |
| 37 | +** NV registers - bit EZPORT_DIS in NV_FOPT register removed. |
| 38 | +** - rev. 1.5 (2013-04-05) |
| 39 | +** Changed start of doxygen comment. |
| 40 | +** - rev. 1.6 (2013-04-11) |
| 41 | +** SystemInit methods updated with predefined initialization sequence. |
| 42 | +** |
| 43 | +** ################################################################### |
| 44 | +*/ |
| 45 | + |
| 46 | +/*! |
| 47 | + * @file MKL05Z4 |
| 48 | + * @version 1.6 |
| 49 | + * @date 2013-04-11 |
| 50 | + * @brief Device specific configuration file for MKL05Z4 (implementation file) |
| 51 | + * |
| 52 | + * Provides a system configuration function and a global variable that contains |
| 53 | + * the system frequency. It configures the device and initializes the oscillator |
| 54 | + * (PLL) that is part of the microcontroller device. |
| 55 | + */ |
| 56 | + |
1 | 57 | #include <stdint.h> |
2 | 58 | #include "MKL05Z4.h" |
3 | 59 |
|
4 | | -#define DISABLE_WDOG 1 |
| 60 | +#define DISABLE_WDOG 1 |
5 | 61 |
|
| 62 | +#define CLOCK_SETUP 1 |
6 | 63 | /* Predefined clock setups |
7 | | - Multipurpose Clock Generator (MCG) in FLL Engaged Internal (FEI) mode |
| 64 | + 0 ... Multipurpose Clock Generator (MCG) in FLL Engaged Internal (FEI) mode |
8 | 65 | Reference clock source for MCG module is the slow internal clock source 32.768kHz |
9 | | - Core clock = 47.97MHz, BusClock = 23.48MHz |
| 66 | + Core clock = 41.94MHz, BusClock = 20.97MHz |
| 67 | + 1 ... Multipurpose Clock Generator (MCG) in FLL Engaged External (FEE) mode |
| 68 | + Reference clock source for MCG module is an external crystal 32.768kHz |
| 69 | + Core clock = 47.97MHz, BusClock = 23.98MHz |
| 70 | + 2 ... Multipurpose Clock Generator (MCG) in FLL Bypassed Low Power Internal (BLPI) mode |
| 71 | + Core clock/Bus clock derived directly from an fast internal 4MHz clock with no multiplication |
| 72 | + Core clock = 4MHz, BusClock = 4MHz |
10 | 73 | */ |
11 | 74 |
|
12 | | -#define CPU_XTAL_CLK_HZ 32768u /* Value of the external crystal or oscillator clock frequency in Hz */ |
13 | | -#define CPU_INT_SLOW_CLK_HZ 32768u /* Value of the slow internal oscillator clock frequency in Hz */ |
14 | | -#define CPU_INT_FAST_CLK_HZ 4000000u /* Value of the fast internal oscillator clock frequency in Hz */ |
15 | | -#define DEFAULT_SYSTEM_CLOCK 47972352u /* Default System clock value */ |
| 75 | +/*---------------------------------------------------------------------------- |
| 76 | + Define clock source values |
| 77 | + *----------------------------------------------------------------------------*/ |
| 78 | +#if (CLOCK_SETUP == 0) |
| 79 | + #define CPU_XTAL_CLK_HZ 32768u /* Value of the external crystal or oscillator clock frequency in Hz */ |
| 80 | + #define CPU_INT_SLOW_CLK_HZ 32768u /* Value of the slow internal oscillator clock frequency in Hz */ |
| 81 | + #define CPU_INT_FAST_CLK_HZ 4000000u /* Value of the fast internal oscillator clock frequency in Hz */ |
| 82 | + #define DEFAULT_SYSTEM_CLOCK 41943040u /* Default System clock value */ |
| 83 | +#elif (CLOCK_SETUP == 1) |
| 84 | + #define CPU_XTAL_CLK_HZ 32768u /* Value of the external crystal or oscillator clock frequency in Hz */ |
| 85 | + #define CPU_INT_SLOW_CLK_HZ 32768u /* Value of the slow internal oscillator clock frequency in Hz */ |
| 86 | + #define CPU_INT_FAST_CLK_HZ 4000000u /* Value of the fast internal oscillator clock frequency in Hz */ |
| 87 | + #define DEFAULT_SYSTEM_CLOCK 47972352u /* Default System clock value */ |
| 88 | +#elif (CLOCK_SETUP == 2) |
| 89 | + #define CPU_XTAL_CLK_HZ 32768u /* Value of the external crystal or oscillator clock frequency in Hz */ |
| 90 | + #define CPU_INT_SLOW_CLK_HZ 32768u /* Value of the slow internal oscillator clock frequency in Hz */ |
| 91 | + #define CPU_INT_FAST_CLK_HZ 4000000u /* Value of the fast internal oscillator clock frequency in Hz */ |
| 92 | + #define DEFAULT_SYSTEM_CLOCK 4000000u /* Default System clock value */ |
| 93 | +#endif /* (CLOCK_SETUP == 2) */ |
| 94 | + |
| 95 | + |
| 96 | +/* ---------------------------------------------------------------------------- |
| 97 | + -- Core clock |
| 98 | + ---------------------------------------------------------------------------- */ |
16 | 99 |
|
17 | 100 | uint32_t SystemCoreClock = DEFAULT_SYSTEM_CLOCK; |
18 | 101 |
|
19 | | -void SystemInit(void) { |
| 102 | +/* ---------------------------------------------------------------------------- |
| 103 | + -- SystemInit() |
| 104 | + ---------------------------------------------------------------------------- */ |
| 105 | + |
| 106 | +void SystemInit (void) { |
20 | 107 | #if (DISABLE_WDOG) |
21 | | - /* Disable the WDOG module */ |
22 | | - /* SIM_COPC: COPT=0,COPCLKS=0,COPW=0 */ |
23 | | - SIM->COPC = (uint32_t)0x00u; |
| 108 | + /* Disable the WDOG module */ |
| 109 | + /* SIM_COPC: COPT=0,COPCLKS=0,COPW=0 */ |
| 110 | + SIM->COPC = (uint32_t)0x00u; |
24 | 111 | #endif /* (DISABLE_WDOG) */ |
25 | | - |
26 | | - SIM->SCGC5 |= (SIM_SCGC5_PORTB_MASK | SIM_SCGC5_PORTA_MASK); /* Enable clock gate for ports to enable pin routing */ |
27 | | - /* SIM_SCGC5: LPTMR=1 */ |
28 | | - SIM->SCGC5 |= SIM_SCGC5_LPTMR_MASK; |
29 | | - /* SIM_CLKDIV1: OUTDIV1=0,??=0,??=0,??=0,??=0,??=0,??=0,??=0,??=0,??=0,OUTDIV4=1,??=0,??=0,??=0,??=0,??=0,??=0,??=0,??=0,??=0,??=0,??=0,??=0,??=0,??=0,??=0,??=0 */ |
30 | | - SIM->CLKDIV1 = (SIM_CLKDIV1_OUTDIV1(0x00) | SIM_CLKDIV1_OUTDIV4(0x01)); /* Update system prescalers */ |
31 | | - /* SIM_SOPT1: OSC32KSEL=0 */ |
32 | | - SIM->SOPT1 &= (uint32_t)~(uint32_t)(SIM_SOPT1_OSC32KSEL(0x03)); /* System oscillator drives 32 kHz clock for various peripherals */ |
33 | | - /* SIM_SOPT2: TPMSRC=2 */ |
34 | | - SIM->SOPT2 = (uint32_t)((SIM->SOPT2 & (uint32_t)~(uint32_t)(SIM_SOPT2_TPMSRC(0x01))) | |
35 | | - (uint32_t)(SIM_SOPT2_TPMSRC(0x02))); /* Set the TPM clock */ |
36 | | - /* PORTA_PCR3: ISF=0,MUX=0 */ |
37 | | - PORTA->PCR[3] &= (uint32_t)~(uint32_t)((PORT_PCR_ISF_MASK | PORT_PCR_MUX(0x07))); |
38 | | - /* MCG_SC: FCRDIV=1 */ |
39 | | - MCG->SC = (uint8_t)((MCG->SC & (uint8_t)~(uint8_t)(MCG_SC_FCRDIV(0x06))) | |
40 | | - (uint8_t)(MCG_SC_FCRDIV(0x01))); |
41 | | - /* Switch to FEI Mode */ |
42 | | - /* MCG_C1: CLKS=0,FRDIV=0,IREFS=1,IRCLKEN=1,IREFSTEN=0 */ |
43 | | - MCG->C1 = MCG_C1_CLKS(0x00) | MCG_C1_FRDIV(0x00) | |
44 | | - MCG_C1_IREFS_MASK | MCG_C1_IRCLKEN_MASK; |
45 | | - /* MCG_C2: LOCRE0=0,??=0,RANGE0=0,HGO0=0,EREFS0=0,LP=0,IRCS=1 */ |
46 | | - MCG->C2 = (MCG_C2_RANGE0(0x00) | MCG_C2_IRCS_MASK); |
47 | | - /* MCG_C4: DMX32=1,DRST_DRS=1 */ |
48 | | - MCG->C4 = (uint8_t)((MCG->C4 & (uint8_t)~(uint8_t)(MCG_C4_DRST_DRS(0x02))) | |
49 | | - (uint8_t)(MCG_C4_DMX32_MASK | MCG_C4_DRST_DRS(0x01))); |
50 | | - /* OSC0_CR: ERCLKEN=1,??=0,EREFSTEN=0,??=0,SC2P=0,SC4P=0,SC8P=0,SC16P=0 */ |
51 | | - OSC0->CR = OSC_CR_ERCLKEN_MASK; |
52 | | - while((MCG->S & MCG_S_IREFST_MASK) == 0x00U) { /* Check that the source of the FLL reference clock is the internal reference clock. */ |
53 | | - } |
54 | | - while((MCG->S & 0x0CU) != 0x00U) { /* Wait until output of the FLL is selected */ |
55 | | - } |
| 112 | +#if (CLOCK_SETUP == 0) |
| 113 | + /* SIM->CLKDIV1: OUTDIV1=0,??=0,??=0,??=0,??=0,??=0,??=0,??=0,??=0,??=0,OUTDIV4=1,??=0,??=0,??=0,??=0,??=0,??=0,??=0,??=0,??=0,??=0,??=0,??=0,??=0,??=0,??=0,??=0 */ |
| 114 | + SIM->CLKDIV1 = (SIM_CLKDIV1_OUTDIV1(0x00) | SIM_CLKDIV1_OUTDIV4(0x01)); /* Update system prescalers */ |
| 115 | + /* Switch to FEI Mode */ |
| 116 | + /* MCG->C1: CLKS=0,FRDIV=0,IREFS=1,IRCLKEN=1,IREFSTEN=0 */ |
| 117 | + MCG->C1 = MCG_C1_CLKS(0x00) | |
| 118 | + MCG_C1_FRDIV(0x00) | |
| 119 | + MCG_C1_IREFS_MASK | |
| 120 | + MCG_C1_IRCLKEN_MASK; |
| 121 | + /* MCG->C2: LOCRE0=0,??=0,RANGE0=0,HGO0=0,EREFS0=0,LP=0,IRCS=0 */ |
| 122 | + MCG->C2 = MCG_C2_RANGE0(0x00); |
| 123 | + /* MCG_C4: DMX32=0,DRST_DRS=1 */ |
| 124 | + MCG->C4 = (uint8_t)((MCG->C4 & (uint8_t)~(uint8_t)( |
| 125 | + MCG_C4_DMX32_MASK | |
| 126 | + MCG_C4_DRST_DRS(0x02) |
| 127 | + )) | (uint8_t)( |
| 128 | + MCG_C4_DRST_DRS(0x01) |
| 129 | + )); |
| 130 | + /* OSC0->CR: ERCLKEN=1,??=0,EREFSTEN=0,??=0,SC2P=0,SC4P=0,SC8P=0,SC16P=0 */ |
| 131 | + OSC0->CR = OSC_CR_ERCLKEN_MASK; |
| 132 | + while((MCG->S & MCG_S_IREFST_MASK) == 0x00U) { /* Check that the source of the FLL reference clock is the internal reference clock. */ |
| 133 | + } |
| 134 | + while((MCG->S & 0x0CU) != 0x00U) { /* Wait until output of the FLL is selected */ |
| 135 | + } |
| 136 | +#elif (CLOCK_SETUP == 1) |
| 137 | + /* SIM->SCGC5: PORTA=1 */ |
| 138 | + SIM->SCGC5 |= SIM_SCGC5_PORTA_MASK; /* Enable clock gate for ports to enable pin routing */ |
| 139 | + /* SIM->CLKDIV1: OUTDIV1=0,??=0,??=0,??=0,??=0,??=0,??=0,??=0,??=0,??=0,OUTDIV4=1,??=0,??=0,??=0,??=0,??=0,??=0,??=0,??=0,??=0,??=0,??=0,??=0,??=0,??=0,??=0,??=0 */ |
| 140 | + SIM->CLKDIV1 = (SIM_CLKDIV1_OUTDIV1(0x00) | SIM_CLKDIV1_OUTDIV4(0x01)); /* Update system prescalers */ |
| 141 | + /* PORTA->PCR[3]: ISF=0,MUX=0 */ |
| 142 | + PORTA->PCR[3] &= (uint32_t)~(uint32_t)((PORT_PCR_ISF_MASK | PORT_PCR_MUX(0x07))); |
| 143 | + /* PORTA->PCR[4]: ISF=0,MUX=0 */ |
| 144 | + PORTA->PCR[4] &= (uint32_t)~(uint32_t)((PORT_PCR_ISF_MASK | PORT_PCR_MUX(0x07))); |
| 145 | + /* Switch to FEE Mode */ |
| 146 | + /* MCG->C2: LOCRE0=0,??=0,RANGE0=0,HGO0=0,EREFS0=1,LP=0,IRCS=0 */ |
| 147 | + MCG->C2 = (MCG_C2_RANGE0(0x00) | MCG_C2_EREFS0_MASK); |
| 148 | + /* OSC0->CR: ERCLKEN=1,??=0,EREFSTEN=0,??=0,SC2P=0,SC4P=0,SC8P=0,SC16P=0 */ |
| 149 | + OSC0->CR = OSC_CR_ERCLKEN_MASK; |
| 150 | + /* MCG->C1: CLKS=0,FRDIV=0,IREFS=0,IRCLKEN=1,IREFSTEN=0 */ |
| 151 | + MCG->C1 = (MCG_C1_CLKS(0x00) | MCG_C1_FRDIV(0x00) | MCG_C1_IRCLKEN_MASK); |
| 152 | + /* MCG->C4: DMX32=1,DRST_DRS=1 */ |
| 153 | + MCG->C4 = (uint8_t)((MCG->C4 & (uint8_t)~(uint8_t)( |
| 154 | + MCG_C4_DRST_DRS(0x02) |
| 155 | + )) | (uint8_t)( |
| 156 | + MCG_C4_DMX32_MASK | |
| 157 | + MCG_C4_DRST_DRS(0x01) |
| 158 | + )); |
| 159 | + while((MCG->S & MCG_S_IREFST_MASK) != 0x00U) { /* Check that the source of the FLL reference clock is the external reference clock. */ |
| 160 | + } |
| 161 | + while((MCG->S & 0x0CU) != 0x00U) { /* Wait until output of the FLL is selected */ |
| 162 | + } |
| 163 | +#elif (CLOCK_SETUP == 2) |
| 164 | + /* SIM->CLKDIV1: OUTDIV1=0,??=0,??=0,??=0,??=0,??=0,??=0,??=0,??=0,??=0,OUTDIV4=0,??=0,??=0,??=0,??=0,??=0,??=0,??=0,??=0,??=0,??=0,??=0,??=0,??=0,??=0,??=0,??=0 */ |
| 165 | + SIM->CLKDIV1 = (SIM_CLKDIV1_OUTDIV1(0x00) | SIM_CLKDIV1_OUTDIV4(0x00)); /* Update system prescalers */ |
| 166 | + /* MCG->SC: FCRDIV=0 */ |
| 167 | + MCG->SC &= (uint8_t)~(uint8_t)(MCG_SC_FCRDIV(0x07)); |
| 168 | + /* Switch to FBI Mode */ |
| 169 | + /* MCG->C1: CLKS=1,FRDIV=0,IREFS=1,IRCLKEN=1,IREFSTEN=0 */ |
| 170 | + MCG->C1 = MCG_C1_CLKS(0x01) | |
| 171 | + MCG_C1_FRDIV(0x00) | |
| 172 | + MCG_C1_IREFS_MASK | |
| 173 | + MCG_C1_IRCLKEN_MASK; |
| 174 | + /* MCG->C2: LOCRE0=0,??=0,RANGE0=0,HGO0=0,EREFS0=0,LP=0,IRCS=1 */ |
| 175 | + MCG->C2 = (MCG_C2_RANGE0(0x00) | MCG_C2_IRCS_MASK); |
| 176 | + /* MCG->C4: DMX32=0,DRST_DRS=0 */ |
| 177 | + MCG->C4 &= (uint8_t)~(uint8_t)((MCG_C4_DMX32_MASK | MCG_C4_DRST_DRS(0x03))); |
| 178 | + /* OSC0->CR: ERCLKEN=1,??=0,EREFSTEN=0,??=0,SC2P=0,SC4P=0,SC8P=0,SC16P=0 */ |
| 179 | + OSC0->CR = OSC_CR_ERCLKEN_MASK; |
| 180 | + while((MCG->S & MCG_S_IREFST_MASK) == 0x00U) { /* Check that the source of the FLL reference clock is the internal reference clock. */ |
| 181 | + } |
| 182 | + while((MCG->S & 0x0CU) != 0x04U) { /* Wait until internal reference clock is selected as MCG output */ |
| 183 | + } |
| 184 | + /* Switch to BLPI Mode */ |
| 185 | + /* MCG->C2: LOCRE0=0,??=0,RANGE0=0,HGO0=0,EREFS0=0,LP=1,IRCS=1 */ |
| 186 | + MCG->C2 = (MCG_C2_RANGE0(0x00) | MCG_C2_LP_MASK | MCG_C2_IRCS_MASK); |
| 187 | + while((MCG->S & MCG_S_IREFST_MASK) == 0x00U) { /* Check that the source of the FLL reference clock is the internal reference clock. */ |
| 188 | + } |
| 189 | + while((MCG->S & MCG_S_IRCST_MASK) == 0x00U) { /* Check that the fast external reference clock is selected. */ |
| 190 | + } |
| 191 | +#endif /* (CLOCK_SETUP == 2) */ |
56 | 192 | } |
57 | 193 |
|
58 | | -void SystemCoreClockUpdate(void) { |
59 | | - uint32_t MCGOUTClock; |
60 | | - uint8_t Divider; |
| 194 | +/* ---------------------------------------------------------------------------- |
| 195 | + -- SystemCoreClockUpdate() |
| 196 | + ---------------------------------------------------------------------------- */ |
61 | 197 |
|
62 | | - if ((MCG->C1 & MCG_C1_CLKS_MASK) == 0x0u) { |
63 | | - /* FLL is selected */ |
64 | | - if ((MCG->C1 & MCG_C1_IREFS_MASK) == 0x0u) { |
65 | | - /* External reference clock is selected */ |
66 | | - MCGOUTClock = CPU_XTAL_CLK_HZ; /* System oscillator drives MCG clock */ |
67 | | - Divider = (uint8_t)(1u << ((MCG->C1 & MCG_C1_FRDIV_MASK) >> MCG_C1_FRDIV_SHIFT)); |
68 | | - MCGOUTClock = (MCGOUTClock / Divider); /* Calculate the divided FLL reference clock */ |
69 | | - if ((MCG->C2 & MCG_C2_RANGE0_MASK) != 0x0u) { |
70 | | - MCGOUTClock /= 32u; /* If high range is enabled, additional 32 divider is active */ |
71 | | - } |
72 | | - } else { |
73 | | - MCGOUTClock = CPU_INT_SLOW_CLK_HZ; /* The slow internal reference clock is selected */ |
74 | | - } |
| 198 | +void SystemCoreClockUpdate (void) { |
| 199 | + uint32_t MCGOUTClock; /* Variable to store output clock frequency of the MCG module */ |
| 200 | + uint8_t Divider; |
75 | 201 |
|
76 | | - /* Select correct multiplier to calculate the MCG output clock */ |
77 | | - switch (MCG->C4 & (MCG_C4_DMX32_MASK | MCG_C4_DRST_DRS_MASK)) { |
78 | | - case 0x0u: |
79 | | - MCGOUTClock *= 640u; |
80 | | - break; |
81 | | - case 0x20u: |
82 | | - MCGOUTClock *= 1280u; |
83 | | - break; |
84 | | - case 0x40u: |
85 | | - MCGOUTClock *= 1920u; |
86 | | - break; |
87 | | - case 0x60u: |
88 | | - MCGOUTClock *= 2560u; |
89 | | - break; |
90 | | - case 0x80u: |
91 | | - MCGOUTClock *= 732u; |
92 | | - break; |
93 | | - case 0xA0u: |
94 | | - MCGOUTClock *= 1464u; |
95 | | - break; |
96 | | - case 0xC0u: |
97 | | - MCGOUTClock *= 2197u; |
98 | | - break; |
99 | | - case 0xE0u: |
100 | | - MCGOUTClock *= 2929u; |
101 | | - break; |
102 | | - default: |
103 | | - break; |
104 | | - } |
105 | | - } else if ((MCG->C1 & MCG_C1_CLKS_MASK) == 0x40u) { |
106 | | - /* Internal reference clock is selected */ |
107 | | - if ((MCG->C2 & MCG_C2_IRCS_MASK) == 0x0u) { |
108 | | - MCGOUTClock = CPU_INT_SLOW_CLK_HZ; /* Slow internal reference clock selected */ |
109 | | - } else { |
110 | | - MCGOUTClock = CPU_INT_FAST_CLK_HZ / (1 << ((MCG->SC & MCG_SC_FCRDIV_MASK) >> MCG_SC_FCRDIV_SHIFT)); /* Fast internal reference clock selected */ |
111 | | - } |
112 | | - } else if ((MCG->C1 & MCG_C1_CLKS_MASK) == 0x80u) { |
113 | | - /* External reference clock is selected */ |
114 | | - MCGOUTClock = CPU_XTAL_CLK_HZ; /* System oscillator drives MCG clock */ |
115 | | - } else { |
116 | | - /* Reserved value */ |
117 | | - return; |
| 202 | + if ((MCG->C1 & MCG_C1_CLKS_MASK) == 0x0u) { |
| 203 | + /* Output of FLL is selected */ |
| 204 | + if ((MCG->C1 & MCG_C1_IREFS_MASK) == 0x0u) { |
| 205 | + /* External reference clock is selected */ |
| 206 | + MCGOUTClock = CPU_XTAL_CLK_HZ; /* System oscillator drives MCG clock */ |
| 207 | + Divider = (uint8_t)(1u << ((MCG->C1 & MCG_C1_FRDIV_MASK) >> MCG_C1_FRDIV_SHIFT)); |
| 208 | + MCGOUTClock = (MCGOUTClock / Divider); /* Calculate the divided FLL reference clock */ |
| 209 | + } else { /* (!((MCG->C1 & MCG_C1_IREFS_MASK) == 0x0u)) */ |
| 210 | + MCGOUTClock = CPU_INT_SLOW_CLK_HZ; /* The slow internal reference clock is selected */ |
| 211 | + } /* (!((MCG->C1 & MCG_C1_IREFS_MASK) == 0x0u)) */ |
| 212 | + /* Select correct multiplier to calculate the MCG output clock */ |
| 213 | + switch (MCG->C4 & (MCG_C4_DMX32_MASK | MCG_C4_DRST_DRS_MASK)) { |
| 214 | + case 0x0u: |
| 215 | + MCGOUTClock *= 640u; |
| 216 | + break; |
| 217 | + case 0x20u: |
| 218 | + MCGOUTClock *= 1280u; |
| 219 | + break; |
| 220 | + case 0x40u: |
| 221 | + MCGOUTClock *= 1920u; |
| 222 | + break; |
| 223 | + case 0x60u: |
| 224 | + MCGOUTClock *= 2560u; |
| 225 | + break; |
| 226 | + case 0x80u: |
| 227 | + MCGOUTClock *= 732u; |
| 228 | + break; |
| 229 | + case 0xA0u: |
| 230 | + MCGOUTClock *= 1464u; |
| 231 | + break; |
| 232 | + case 0xC0u: |
| 233 | + MCGOUTClock *= 2197u; |
| 234 | + break; |
| 235 | + case 0xE0u: |
| 236 | + MCGOUTClock *= 2929u; |
| 237 | + break; |
| 238 | + default: |
| 239 | + break; |
118 | 240 | } |
119 | | - |
120 | | - SystemCoreClock = (MCGOUTClock / (1u + ((SIM->CLKDIV1 & SIM_CLKDIV1_OUTDIV1_MASK) >> SIM_CLKDIV1_OUTDIV1_SHIFT))); |
121 | | - |
| 241 | + } else if ((MCG->C1 & MCG_C1_CLKS_MASK) == 0x40u) { |
| 242 | + /* Internal reference clock is selected */ |
| 243 | + if ((MCG->C2 & MCG_C2_IRCS_MASK) == 0x0u) { |
| 244 | + MCGOUTClock = CPU_INT_SLOW_CLK_HZ; /* Slow internal reference clock selected */ |
| 245 | + } else { /* (!((MCG->C2 & MCG_C2_IRCS_MASK) == 0x0u)) */ |
| 246 | + MCGOUTClock = CPU_INT_FAST_CLK_HZ / (1 << ((MCG->SC & MCG_SC_FCRDIV_MASK) >> MCG_SC_FCRDIV_SHIFT)); /* Fast internal reference clock selected */ |
| 247 | + } /* (!((MCG->C2 & MCG_C2_IRCS_MASK) == 0x0u)) */ |
| 248 | + } else if ((MCG->C1 & MCG_C1_CLKS_MASK) == 0x80u) { |
| 249 | + /* External reference clock is selected */ |
| 250 | + MCGOUTClock = CPU_XTAL_CLK_HZ; /* System oscillator drives MCG clock */ |
| 251 | + } else { /* (!((MCG->C1 & MCG_C1_CLKS_MASK) == 0x80u)) */ |
| 252 | + /* Reserved value */ |
| 253 | + return; |
| 254 | + } /* (!((MCG->C1 & MCG_C1_CLKS_MASK) == 0x80u)) */ |
| 255 | + SystemCoreClock = (MCGOUTClock / (1u + ((SIM->CLKDIV1 & SIM_CLKDIV1_OUTDIV1_MASK) >> SIM_CLKDIV1_OUTDIV1_SHIFT))); |
122 | 256 | } |
0 commit comments