mbed library sources

Dependents:   Encrypted my_mbed lklk CyaSSL_DTLS_Cellular ... more

Superseded

This library was superseded by mbed-dev - https://os.mbed.com/users/mbed_official/code/mbed-dev/.

Development branch of the mbed library sources. This library is kept in synch with the latest changes from the mbed SDK and it is not guaranteed to work.

If you are looking for a stable and tested release, please import one of the official mbed library releases:

Import librarymbed

The official Mbed 2 C/C++ SDK provides the software platform and libraries to build your applications.

Committer:
mbed_official
Date:
Fri Jul 10 14:15:08 2015 +0100
Revision:
587:61103edf8a92
Parent:
82:0b31dbcd4769
Synchronized with git revision 6cb7294c83b739aaf94e7f5d477479c9e332c700

Full URL: https://github.com/mbedmicro/mbed/commit/6cb7294c83b739aaf94e7f5d477479c9e332c700/

[KL25Z] add 32KHz crystal clock setup 3 + minor RTC api changes

Who changed what in which revision?

UserRevisionLine numberNew contents of line
mbed_official 82:0b31dbcd4769 1 /*
mbed_official 82:0b31dbcd4769 2 ** ###################################################################
mbed_official 82:0b31dbcd4769 3 ** Processor: MKL25Z128VLK4
mbed_official 82:0b31dbcd4769 4 ** Compilers: ARM Compiler
mbed_official 82:0b31dbcd4769 5 ** Freescale C/C++ for Embedded ARM
mbed_official 82:0b31dbcd4769 6 ** GNU C Compiler
mbed_official 82:0b31dbcd4769 7 ** IAR ANSI C/C++ Compiler for ARM
mbed_official 82:0b31dbcd4769 8 **
mbed_official 82:0b31dbcd4769 9 ** Reference manual: KL25RM, Rev.1, Jun 2012
mbed_official 82:0b31dbcd4769 10 ** Version: rev. 1.1, 2012-06-21
mbed_official 82:0b31dbcd4769 11 **
mbed_official 82:0b31dbcd4769 12 ** Abstract:
mbed_official 82:0b31dbcd4769 13 ** Provides a system configuration function and a global variable that
mbed_official 82:0b31dbcd4769 14 ** contains the system frequency. It configures the device and initializes
mbed_official 82:0b31dbcd4769 15 ** the oscillator (PLL) that is part of the microcontroller device.
mbed_official 82:0b31dbcd4769 16 **
mbed_official 82:0b31dbcd4769 17 ** Copyright: 2012 Freescale Semiconductor, Inc. All Rights Reserved.
mbed_official 82:0b31dbcd4769 18 **
mbed_official 82:0b31dbcd4769 19 ** http: www.freescale.com
mbed_official 82:0b31dbcd4769 20 ** mail: support@freescale.com
mbed_official 82:0b31dbcd4769 21 **
mbed_official 82:0b31dbcd4769 22 ** Revisions:
mbed_official 82:0b31dbcd4769 23 ** - rev. 1.0 (2012-06-13)
mbed_official 82:0b31dbcd4769 24 ** Initial version.
mbed_official 82:0b31dbcd4769 25 ** - rev. 1.1 (2012-06-21)
mbed_official 82:0b31dbcd4769 26 ** Update according to reference manual rev. 1.
mbed_official 82:0b31dbcd4769 27 **
mbed_official 82:0b31dbcd4769 28 ** ###################################################################
mbed_official 82:0b31dbcd4769 29 */
mbed_official 82:0b31dbcd4769 30
mbed_official 82:0b31dbcd4769 31 /**
mbed_official 82:0b31dbcd4769 32 * @file MKL25Z4
mbed_official 82:0b31dbcd4769 33 * @version 1.1
mbed_official 82:0b31dbcd4769 34 * @date 2012-06-21
mbed_official 82:0b31dbcd4769 35 * @brief Device specific configuration file for MKL25Z4 (implementation file)
mbed_official 82:0b31dbcd4769 36 *
mbed_official 82:0b31dbcd4769 37 * Provides a system configuration function and a global variable that contains
mbed_official 82:0b31dbcd4769 38 * the system frequency. It configures the device and initializes the oscillator
mbed_official 82:0b31dbcd4769 39 * (PLL) that is part of the microcontroller device.
mbed_official 82:0b31dbcd4769 40 */
mbed_official 82:0b31dbcd4769 41
mbed_official 82:0b31dbcd4769 42 #include <stdint.h>
mbed_official 82:0b31dbcd4769 43 #include "MKL25Z4.h"
mbed_official 82:0b31dbcd4769 44
mbed_official 82:0b31dbcd4769 45 #define DISABLE_WDOG 1
mbed_official 82:0b31dbcd4769 46
mbed_official 82:0b31dbcd4769 47 #define CLOCK_SETUP 1
mbed_official 82:0b31dbcd4769 48 /* Predefined clock setups
mbed_official 82:0b31dbcd4769 49 0 ... Multipurpose Clock Generator (MCG) in FLL Engaged Internal (FEI) mode
mbed_official 82:0b31dbcd4769 50 Reference clock source for MCG module is the slow internal clock source 32.768kHz
mbed_official 82:0b31dbcd4769 51 Core clock = 41.94MHz, BusClock = 13.98MHz
mbed_official 82:0b31dbcd4769 52 1 ... Multipurpose Clock Generator (MCG) in PLL Engaged External (PEE) mode
mbed_official 82:0b31dbcd4769 53 Reference clock source for MCG module is an external crystal 8MHz
mbed_official 82:0b31dbcd4769 54 Core clock = 48MHz, BusClock = 24MHz
mbed_official 82:0b31dbcd4769 55 2 ... Multipurpose Clock Generator (MCG) in Bypassed Low Power External (BLPE) mode
mbed_official 82:0b31dbcd4769 56 Core clock/Bus clock derived directly from an external crystal 8MHz with no multiplication
mbed_official 82:0b31dbcd4769 57 Core clock = 8MHz, BusClock = 8MHz
mbed_official 587:61103edf8a92 58 3 ... Multipurpose Clock Generator (MCG) in FLL Engaged External (FEE) mode
mbed_official 587:61103edf8a92 59 Reference clock source for MCG module is an external crystal 32.768kHz
mbed_official 587:61103edf8a92 60 Core clock = 47.97MHz, BusClock = 23.98MHz
mbed_official 587:61103edf8a92 61 This setup sets the RTC to be driven by the MCU clock directly without the need of an external source.
mbed_official 587:61103edf8a92 62 RTC register values are retained when MCU is reset although there will be a slight (mSec's)loss of time
mbed_official 587:61103edf8a92 63 accuracy durring the reset period. RTC will reset on power down.
mbed_official 82:0b31dbcd4769 64 */
mbed_official 82:0b31dbcd4769 65
mbed_official 82:0b31dbcd4769 66 /*----------------------------------------------------------------------------
mbed_official 82:0b31dbcd4769 67 Define clock source values
mbed_official 82:0b31dbcd4769 68 *----------------------------------------------------------------------------*/
mbed_official 82:0b31dbcd4769 69 #if (CLOCK_SETUP == 0)
mbed_official 82:0b31dbcd4769 70 #define CPU_XTAL_CLK_HZ 8000000u /* Value of the external crystal or oscillator clock frequency in Hz */
mbed_official 82:0b31dbcd4769 71 #define CPU_INT_SLOW_CLK_HZ 32768u /* Value of the slow internal oscillator clock frequency in Hz */
mbed_official 82:0b31dbcd4769 72 #define CPU_INT_FAST_CLK_HZ 4000000u /* Value of the fast internal oscillator clock frequency in Hz */
mbed_official 82:0b31dbcd4769 73 #define DEFAULT_SYSTEM_CLOCK 41943040u /* Default System clock value */
mbed_official 82:0b31dbcd4769 74 #elif (CLOCK_SETUP == 1)
mbed_official 82:0b31dbcd4769 75 #define CPU_XTAL_CLK_HZ 8000000u /* Value of the external crystal or oscillator clock frequency in Hz */
mbed_official 82:0b31dbcd4769 76 #define CPU_INT_SLOW_CLK_HZ 32768u /* Value of the slow internal oscillator clock frequency in Hz */
mbed_official 82:0b31dbcd4769 77 #define CPU_INT_FAST_CLK_HZ 4000000u /* Value of the fast internal oscillator clock frequency in Hz */
mbed_official 82:0b31dbcd4769 78 #define DEFAULT_SYSTEM_CLOCK 48000000u /* Default System clock value */
mbed_official 82:0b31dbcd4769 79 #elif (CLOCK_SETUP == 2)
mbed_official 82:0b31dbcd4769 80 #define CPU_XTAL_CLK_HZ 8000000u /* Value of the external crystal or oscillator clock frequency in Hz */
mbed_official 82:0b31dbcd4769 81 #define CPU_INT_SLOW_CLK_HZ 32768u /* Value of the slow internal oscillator clock frequency in Hz */
mbed_official 82:0b31dbcd4769 82 #define CPU_INT_FAST_CLK_HZ 4000000u /* Value of the fast internal oscillator clock frequency in Hz */
mbed_official 82:0b31dbcd4769 83 #define DEFAULT_SYSTEM_CLOCK 8000000u /* Default System clock value */
mbed_official 587:61103edf8a92 84 #elif (CLOCK_SETUP == 3)
mbed_official 587:61103edf8a92 85 #define CPU_XTAL_CLK_HZ 32768u /* Value of the external crystal or oscillator clock frequency in Hz */
mbed_official 587:61103edf8a92 86 #define CPU_INT_SLOW_CLK_HZ 32768u /* Value of the slow internal oscillator clock frequency in Hz */
mbed_official 587:61103edf8a92 87 #define CPU_INT_FAST_CLK_HZ 4000000u /* Value of the fast internal oscillator clock frequency in Hz */
mbed_official 587:61103edf8a92 88 #define DEFAULT_SYSTEM_CLOCK 47972352u /* Default System clock value */
mbed_official 587:61103edf8a92 89 #endif /* (CLOCK_SETUP == 3) */
mbed_official 82:0b31dbcd4769 90
mbed_official 82:0b31dbcd4769 91 /* ----------------------------------------------------------------------------
mbed_official 82:0b31dbcd4769 92 -- Core clock
mbed_official 82:0b31dbcd4769 93 ---------------------------------------------------------------------------- */
mbed_official 82:0b31dbcd4769 94
mbed_official 82:0b31dbcd4769 95 uint32_t SystemCoreClock = DEFAULT_SYSTEM_CLOCK;
mbed_official 82:0b31dbcd4769 96
mbed_official 82:0b31dbcd4769 97 /* ----------------------------------------------------------------------------
mbed_official 82:0b31dbcd4769 98 -- SystemInit()
mbed_official 82:0b31dbcd4769 99 ---------------------------------------------------------------------------- */
mbed_official 82:0b31dbcd4769 100
mbed_official 82:0b31dbcd4769 101 void SystemInit (void) {
mbed_official 82:0b31dbcd4769 102 #if (DISABLE_WDOG)
mbed_official 82:0b31dbcd4769 103 /* Disable the WDOG module */
mbed_official 82:0b31dbcd4769 104 /* SIM_COPC: COPT=0,COPCLKS=0,COPW=0 */
mbed_official 82:0b31dbcd4769 105 SIM->COPC = (uint32_t)0x00u;
mbed_official 82:0b31dbcd4769 106 #endif /* (DISABLE_WDOG) */
mbed_official 82:0b31dbcd4769 107 #if (CLOCK_SETUP == 0)
mbed_official 82:0b31dbcd4769 108 /* SIM->CLKDIV1: OUTDIV1=0,??=0,??=0,??=0,??=0,??=0,??=0,??=0,??=0,??=0,OUTDIV4=2,??=0,??=0,??=0,??=0,??=0,??=0,??=0,??=0,??=0,??=0,??=0,??=0,??=0,??=0,??=0,??=0 */
mbed_official 82:0b31dbcd4769 109 SIM->CLKDIV1 = (uint32_t)0x00020000UL; /* Update system prescalers */
mbed_official 82:0b31dbcd4769 110 /* Switch to FEI Mode */
mbed_official 82:0b31dbcd4769 111 /* MCG->C1: CLKS=0,FRDIV=0,IREFS=1,IRCLKEN=1,IREFSTEN=0 */
mbed_official 82:0b31dbcd4769 112 MCG->C1 = (uint8_t)0x06U;
mbed_official 82:0b31dbcd4769 113 /* MCG_C2: LOCRE0=0,??=0,RANGE0=0,HGO0=0,EREFS0=0,LP=0,IRCS=0 */
mbed_official 82:0b31dbcd4769 114 MCG->C2 = (uint8_t)0x00U;
mbed_official 82:0b31dbcd4769 115 /* MCG->C4: DMX32=0,DRST_DRS=1 */
mbed_official 82:0b31dbcd4769 116 MCG->C4 = (uint8_t)((MCG->C4 & (uint8_t)~(uint8_t)0xC0U) | (uint8_t)0x20U);
mbed_official 82:0b31dbcd4769 117 /* OSC0->CR: ERCLKEN=1,??=0,EREFSTEN=0,??=0,SC2P=0,SC4P=0,SC8P=0,SC16P=0 */
mbed_official 82:0b31dbcd4769 118 OSC0->CR = (uint8_t)0x80U;
mbed_official 82:0b31dbcd4769 119 /* MCG->C5: ??=0,PLLCLKEN0=0,PLLSTEN0=0,PRDIV0=0 */
mbed_official 82:0b31dbcd4769 120 MCG->C5 = (uint8_t)0x00U;
mbed_official 82:0b31dbcd4769 121 /* MCG->C6: LOLIE0=0,PLLS=0,CME0=0,VDIV0=0 */
mbed_official 82:0b31dbcd4769 122 MCG->C6 = (uint8_t)0x00U;
mbed_official 82:0b31dbcd4769 123 while((MCG->S & MCG_S_IREFST_MASK) == 0x00U) { /* Check that the source of the FLL reference clock is the internal reference clock. */
mbed_official 82:0b31dbcd4769 124 }
mbed_official 82:0b31dbcd4769 125 while((MCG->S & 0x0CU) != 0x00U) { /* Wait until output of the FLL is selected */
mbed_official 82:0b31dbcd4769 126 }
mbed_official 82:0b31dbcd4769 127 #elif (CLOCK_SETUP == 1)
mbed_official 82:0b31dbcd4769 128 /* SIM->SCGC5: PORTA=1 */
mbed_official 82:0b31dbcd4769 129 SIM->SCGC5 |= (uint32_t)0x0200UL; /* Enable clock gate for ports to enable pin routing */
mbed_official 82:0b31dbcd4769 130 /* SIM->CLKDIV1: OUTDIV1=1,??=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 */
mbed_official 82:0b31dbcd4769 131 SIM->CLKDIV1 = (uint32_t)0x10010000UL; /* Update system prescalers */
mbed_official 82:0b31dbcd4769 132 /* PORTA->PCR18: ISF=0,MUX=0 */
mbed_official 82:0b31dbcd4769 133 PORTA->PCR[18] &= (uint32_t)~0x01000700UL;
mbed_official 82:0b31dbcd4769 134 /* PORTA->PCR19: ISF=0,MUX=0 */
mbed_official 82:0b31dbcd4769 135 PORTA->PCR[19] &= (uint32_t)~0x01000700UL;
mbed_official 82:0b31dbcd4769 136 /* Switch to FBE Mode */
mbed_official 82:0b31dbcd4769 137 /* OSC0->CR: ERCLKEN=1,??=0,EREFSTEN=0,??=0,SC2P=1,SC4P=0,SC8P=0,SC16P=1 */
mbed_official 82:0b31dbcd4769 138 OSC0->CR = (uint8_t)0x89U;
mbed_official 82:0b31dbcd4769 139 /* MCG->C2: LOCRE0=0,??=0,RANGE0=2,HGO0=0,EREFS0=1,LP=0,IRCS=0 */
mbed_official 82:0b31dbcd4769 140 MCG->C2 = (uint8_t)0x24U;
mbed_official 82:0b31dbcd4769 141 /* MCG->C1: CLKS=2,FRDIV=3,IREFS=0,IRCLKEN=1,IREFSTEN=0 */
mbed_official 82:0b31dbcd4769 142 MCG->C1 = (uint8_t)0x9AU;
mbed_official 82:0b31dbcd4769 143 /* MCG->C4: DMX32=0,DRST_DRS=0 */
mbed_official 82:0b31dbcd4769 144 MCG->C4 &= (uint8_t)~(uint8_t)0xE0U;
mbed_official 82:0b31dbcd4769 145 /* MCG->C5: ??=0,PLLCLKEN0=0,PLLSTEN0=0,PRDIV0=1 */
mbed_official 82:0b31dbcd4769 146 MCG->C5 = (uint8_t)0x01U;
mbed_official 82:0b31dbcd4769 147 /* MCG->C6: LOLIE0=0,PLLS=0,CME0=0,VDIV0=0 */
mbed_official 82:0b31dbcd4769 148 MCG->C6 = (uint8_t)0x00U;
mbed_official 82:0b31dbcd4769 149 while((MCG->S & MCG_S_IREFST_MASK) != 0x00U) { /* Check that the source of the FLL reference clock is the external reference clock. */
mbed_official 82:0b31dbcd4769 150 }
mbed_official 82:0b31dbcd4769 151 while((MCG->S & 0x0CU) != 0x08U) { /* Wait until external reference clock is selected as MCG output */
mbed_official 82:0b31dbcd4769 152 }
mbed_official 82:0b31dbcd4769 153 /* Switch to PBE Mode */
mbed_official 82:0b31dbcd4769 154 /* MCG->C6: LOLIE0=0,PLLS=1,CME0=0,VDIV0=0 */
mbed_official 82:0b31dbcd4769 155 MCG->C6 = (uint8_t)0x40U;
mbed_official 82:0b31dbcd4769 156 while((MCG->S & 0x0CU) != 0x08U) { /* Wait until external reference clock is selected as MCG output */
mbed_official 82:0b31dbcd4769 157 }
mbed_official 82:0b31dbcd4769 158 while((MCG->S & MCG_S_LOCK0_MASK) == 0x00U) { /* Wait until locked */
mbed_official 82:0b31dbcd4769 159 }
mbed_official 82:0b31dbcd4769 160 /* Switch to PEE Mode */
mbed_official 82:0b31dbcd4769 161 /* MCG->C1: CLKS=0,FRDIV=3,IREFS=0,IRCLKEN=1,IREFSTEN=0 */
mbed_official 82:0b31dbcd4769 162 MCG->C1 = (uint8_t)0x1AU;
mbed_official 82:0b31dbcd4769 163 while((MCG->S & 0x0CU) != 0x0CU) { /* Wait until output of the PLL is selected */
mbed_official 82:0b31dbcd4769 164 }
mbed_official 82:0b31dbcd4769 165 #elif (CLOCK_SETUP == 2)
mbed_official 82:0b31dbcd4769 166 /* SIM->SCGC5: PORTA=1 */
mbed_official 82:0b31dbcd4769 167 SIM->SCGC5 |= (uint32_t)0x0200UL; /* Enable clock gate for ports to enable pin routing */
mbed_official 82:0b31dbcd4769 168 /* 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 */
mbed_official 82:0b31dbcd4769 169 SIM->CLKDIV1 = (uint32_t)0x00000000UL; /* Update system prescalers */
mbed_official 82:0b31dbcd4769 170 /* PORTA->PCR18: ISF=0,MUX=0 */
mbed_official 82:0b31dbcd4769 171 PORTA->PCR[18] &= (uint32_t)~0x01000700UL;
mbed_official 82:0b31dbcd4769 172 /* PORTA->PCR19: ISF=0,MUX=0 */
mbed_official 82:0b31dbcd4769 173 PORTA->PCR[19] &= (uint32_t)~0x01000700UL;
mbed_official 82:0b31dbcd4769 174 /* Switch to FBE Mode */
mbed_official 82:0b31dbcd4769 175 /* OSC0->CR: ERCLKEN=1,??=0,EREFSTEN=0,??=0,SC2P=1,SC4P=0,SC8P=0,SC16P=1 */
mbed_official 82:0b31dbcd4769 176 OSC0->CR = (uint8_t)0x89U;
mbed_official 82:0b31dbcd4769 177 /* MCG->C2: LOCRE0=0,??=0,RANGE0=2,HGO0=0,EREFS0=1,LP=0,IRCS=0 */
mbed_official 82:0b31dbcd4769 178 MCG->C2 = (uint8_t)0x24U;
mbed_official 82:0b31dbcd4769 179 /* MCG->C1: CLKS=2,FRDIV=3,IREFS=0,IRCLKEN=1,IREFSTEN=0 */
mbed_official 82:0b31dbcd4769 180 MCG->C1 = (uint8_t)0x9AU;
mbed_official 82:0b31dbcd4769 181 /* MCG->C4: DMX32=0,DRST_DRS=0 */
mbed_official 82:0b31dbcd4769 182 MCG->C4 &= (uint8_t)~(uint8_t)0xE0U;
mbed_official 82:0b31dbcd4769 183 /* MCG->C5: ??=0,PLLCLKEN0=0,PLLSTEN0=0,PRDIV0=0 */
mbed_official 82:0b31dbcd4769 184 MCG->C5 = (uint8_t)0x00U;
mbed_official 82:0b31dbcd4769 185 /* MCG->C6: LOLIE0=0,PLLS=0,CME0=0,VDIV0=0 */
mbed_official 82:0b31dbcd4769 186 MCG->C6 = (uint8_t)0x00U;
mbed_official 82:0b31dbcd4769 187 while((MCG->S & MCG_S_IREFST_MASK) != 0x00U) { /* Check that the source of the FLL reference clock is the external reference clock. */
mbed_official 82:0b31dbcd4769 188 }
mbed_official 82:0b31dbcd4769 189 while((MCG->S & 0x0CU) != 0x08U) { /* Wait until external reference clock is selected as MCG output */
mbed_official 82:0b31dbcd4769 190 }
mbed_official 82:0b31dbcd4769 191 /* Switch to BLPE Mode */
mbed_official 82:0b31dbcd4769 192 /* MCG->C2: LOCRE0=0,??=0,RANGE0=2,HGO0=0,EREFS0=1,LP=1,IRCS=0 */
mbed_official 82:0b31dbcd4769 193 MCG->C2 = (uint8_t)0x26U;
mbed_official 82:0b31dbcd4769 194 while((MCG->S & 0x0CU) != 0x08U) { /* Wait until external reference clock is selected as MCG output */
mbed_official 82:0b31dbcd4769 195 }
mbed_official 587:61103edf8a92 196 #elif (CLOCK_SETUP == 3)
mbed_official 587:61103edf8a92 197 /* SIM->SCGC5: PORTA=1 */
mbed_official 587:61103edf8a92 198 SIM->SCGC5 |= SIM_SCGC5_PORTA_MASK; /* Enable clock gate for ports to enable pin routing */
mbed_official 587:61103edf8a92 199 /* 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 */
mbed_official 587:61103edf8a92 200 SIM->CLKDIV1 = (SIM_CLKDIV1_OUTDIV1(0x00) | SIM_CLKDIV1_OUTDIV4(0x01)); /* Update system prescalers */
mbed_official 587:61103edf8a92 201 /* PORTA->PCR[3]: ISF=0,MUX=0 */
mbed_official 587:61103edf8a92 202 PORTA->PCR[3] &= (uint32_t)~(uint32_t)((PORT_PCR_ISF_MASK | PORT_PCR_MUX(0x07)));
mbed_official 587:61103edf8a92 203 /* PORTA->PCR[4]: ISF=0,MUX=0 */
mbed_official 587:61103edf8a92 204 PORTA->PCR[4] &= (uint32_t)~(uint32_t)((PORT_PCR_ISF_MASK | PORT_PCR_MUX(0x07)));
mbed_official 587:61103edf8a92 205 /* Switch to FEE Mode */
mbed_official 587:61103edf8a92 206 /* MCG->C2: LOCRE0=0,??=0,RANGE0=0,HGO0=0,EREFS0=1,LP=0,IRCS=0 */
mbed_official 587:61103edf8a92 207 MCG->C2 = (MCG_C2_RANGE0(0x00) | MCG_C2_EREFS0_MASK);
mbed_official 587:61103edf8a92 208 /* OSC0->CR: ERCLKEN=1,??=0,EREFSTEN=0,??=0,SC2P=0,SC4P=0,SC8P=0,SC16P=0 */
mbed_official 587:61103edf8a92 209 OSC0->CR = OSC_CR_ERCLKEN_MASK | OSC_CR_SC16P_MASK | OSC_CR_SC4P_MASK | OSC_CR_SC2P_MASK;
mbed_official 587:61103edf8a92 210 /* MCG->C1: CLKS=0,FRDIV=0,IREFS=0,IRCLKEN=1,IREFSTEN=0 */
mbed_official 587:61103edf8a92 211 MCG->C1 = (MCG_C1_CLKS(0x00) | MCG_C1_FRDIV(0x00) | MCG_C1_IRCLKEN_MASK);
mbed_official 587:61103edf8a92 212 /* MCG->C4: DMX32=1,DRST_DRS=1 */
mbed_official 587:61103edf8a92 213 MCG->C4 = (uint8_t)((MCG->C4 & (uint8_t)~(uint8_t)(
mbed_official 587:61103edf8a92 214 MCG_C4_DRST_DRS(0x02)
mbed_official 587:61103edf8a92 215 )) | (uint8_t)(
mbed_official 587:61103edf8a92 216 MCG_C4_DMX32_MASK |
mbed_official 587:61103edf8a92 217 MCG_C4_DRST_DRS(0x01)
mbed_official 587:61103edf8a92 218 ));
mbed_official 587:61103edf8a92 219 while((MCG->S & MCG_S_IREFST_MASK) != 0x00U) { /* Check that the source of the FLL reference clock is the external reference clock. */
mbed_official 587:61103edf8a92 220 }
mbed_official 587:61103edf8a92 221 while((MCG->S & 0x0CU) != 0x00U) { /* Wait until output of the FLL is selected */
mbed_official 587:61103edf8a92 222 }
mbed_official 587:61103edf8a92 223 #endif /* (CLOCK_SETUP == 3) */
mbed_official 82:0b31dbcd4769 224 }
mbed_official 82:0b31dbcd4769 225
mbed_official 82:0b31dbcd4769 226 /* ----------------------------------------------------------------------------
mbed_official 82:0b31dbcd4769 227 -- SystemCoreClockUpdate()
mbed_official 82:0b31dbcd4769 228 ---------------------------------------------------------------------------- */
mbed_official 82:0b31dbcd4769 229
mbed_official 82:0b31dbcd4769 230 void SystemCoreClockUpdate (void) {
mbed_official 82:0b31dbcd4769 231 uint32_t MCGOUTClock; /* Variable to store output clock frequency of the MCG module */
mbed_official 82:0b31dbcd4769 232 uint8_t Divider;
mbed_official 82:0b31dbcd4769 233
mbed_official 82:0b31dbcd4769 234 if ((MCG->C1 & MCG_C1_CLKS_MASK) == 0x0u) {
mbed_official 82:0b31dbcd4769 235 /* Output of FLL or PLL is selected */
mbed_official 82:0b31dbcd4769 236 if ((MCG->C6 & MCG_C6_PLLS_MASK) == 0x0u) {
mbed_official 82:0b31dbcd4769 237 /* FLL is selected */
mbed_official 82:0b31dbcd4769 238 if ((MCG->C1 & MCG_C1_IREFS_MASK) == 0x0u) {
mbed_official 82:0b31dbcd4769 239 /* External reference clock is selected */
mbed_official 82:0b31dbcd4769 240 MCGOUTClock = CPU_XTAL_CLK_HZ; /* System oscillator drives MCG clock */
mbed_official 82:0b31dbcd4769 241 Divider = (uint8_t)(1u << ((MCG->C1 & MCG_C1_FRDIV_MASK) >> MCG_C1_FRDIV_SHIFT));
mbed_official 82:0b31dbcd4769 242 MCGOUTClock = (MCGOUTClock / Divider); /* Calculate the divided FLL reference clock */
mbed_official 82:0b31dbcd4769 243 if ((MCG->C2 & MCG_C2_RANGE0_MASK) != 0x0u) {
mbed_official 82:0b31dbcd4769 244 MCGOUTClock /= 32u; /* If high range is enabled, additional 32 divider is active */
mbed_official 82:0b31dbcd4769 245 } /* ((MCG->C2 & MCG_C2_RANGE0_MASK) != 0x0u) */
mbed_official 82:0b31dbcd4769 246 } else { /* (!((MCG->C1 & MCG_C1_IREFS_MASK) == 0x0u)) */
mbed_official 82:0b31dbcd4769 247 MCGOUTClock = CPU_INT_SLOW_CLK_HZ; /* The slow internal reference clock is selected */
mbed_official 82:0b31dbcd4769 248 } /* (!((MCG->C1 & MCG_C1_IREFS_MASK) == 0x0u)) */
mbed_official 82:0b31dbcd4769 249 /* Select correct multiplier to calculate the MCG output clock */
mbed_official 82:0b31dbcd4769 250 switch (MCG->C4 & (MCG_C4_DMX32_MASK | MCG_C4_DRST_DRS_MASK)) {
mbed_official 82:0b31dbcd4769 251 case 0x0u:
mbed_official 82:0b31dbcd4769 252 MCGOUTClock *= 640u;
mbed_official 82:0b31dbcd4769 253 break;
mbed_official 82:0b31dbcd4769 254 case 0x20u:
mbed_official 82:0b31dbcd4769 255 MCGOUTClock *= 1280u;
mbed_official 82:0b31dbcd4769 256 break;
mbed_official 82:0b31dbcd4769 257 case 0x40u:
mbed_official 82:0b31dbcd4769 258 MCGOUTClock *= 1920u;
mbed_official 82:0b31dbcd4769 259 break;
mbed_official 82:0b31dbcd4769 260 case 0x60u:
mbed_official 82:0b31dbcd4769 261 MCGOUTClock *= 2560u;
mbed_official 82:0b31dbcd4769 262 break;
mbed_official 82:0b31dbcd4769 263 case 0x80u:
mbed_official 82:0b31dbcd4769 264 MCGOUTClock *= 732u;
mbed_official 82:0b31dbcd4769 265 break;
mbed_official 82:0b31dbcd4769 266 case 0xA0u:
mbed_official 82:0b31dbcd4769 267 MCGOUTClock *= 1464u;
mbed_official 82:0b31dbcd4769 268 break;
mbed_official 82:0b31dbcd4769 269 case 0xC0u:
mbed_official 82:0b31dbcd4769 270 MCGOUTClock *= 2197u;
mbed_official 82:0b31dbcd4769 271 break;
mbed_official 82:0b31dbcd4769 272 case 0xE0u:
mbed_official 82:0b31dbcd4769 273 MCGOUTClock *= 2929u;
mbed_official 82:0b31dbcd4769 274 break;
mbed_official 82:0b31dbcd4769 275 default:
mbed_official 82:0b31dbcd4769 276 break;
mbed_official 82:0b31dbcd4769 277 }
mbed_official 82:0b31dbcd4769 278 } else { /* (!((MCG->C6 & MCG_C6_PLLS_MASK) == 0x0u)) */
mbed_official 82:0b31dbcd4769 279 /* PLL is selected */
mbed_official 82:0b31dbcd4769 280 Divider = (1u + (MCG->C5 & MCG_C5_PRDIV0_MASK));
mbed_official 82:0b31dbcd4769 281 MCGOUTClock = (uint32_t)(CPU_XTAL_CLK_HZ / Divider); /* Calculate the PLL reference clock */
mbed_official 82:0b31dbcd4769 282 Divider = ((MCG->C6 & MCG_C6_VDIV0_MASK) + 24u);
mbed_official 82:0b31dbcd4769 283 MCGOUTClock *= Divider; /* Calculate the MCG output clock */
mbed_official 82:0b31dbcd4769 284 } /* (!((MCG->C6 & MCG_C6_PLLS_MASK) == 0x0u)) */
mbed_official 82:0b31dbcd4769 285 } else if ((MCG->C1 & MCG_C1_CLKS_MASK) == 0x40u) {
mbed_official 82:0b31dbcd4769 286 /* Internal reference clock is selected */
mbed_official 82:0b31dbcd4769 287 if ((MCG->C2 & MCG_C2_IRCS_MASK) == 0x0u) {
mbed_official 82:0b31dbcd4769 288 MCGOUTClock = CPU_INT_SLOW_CLK_HZ; /* Slow internal reference clock selected */
mbed_official 82:0b31dbcd4769 289 } else { /* (!((MCG->C2 & MCG_C2_IRCS_MASK) == 0x0u)) */
mbed_official 82:0b31dbcd4769 290 MCGOUTClock = CPU_INT_FAST_CLK_HZ / (1 << ((MCG->SC & MCG_SC_FCRDIV_MASK) >> MCG_SC_FCRDIV_SHIFT)); /* Fast internal reference clock selected */
mbed_official 82:0b31dbcd4769 291 } /* (!((MCG->C2 & MCG_C2_IRCS_MASK) == 0x0u)) */
mbed_official 82:0b31dbcd4769 292 } else if ((MCG->C1 & MCG_C1_CLKS_MASK) == 0x80u) {
mbed_official 82:0b31dbcd4769 293 /* External reference clock is selected */
mbed_official 82:0b31dbcd4769 294 MCGOUTClock = CPU_XTAL_CLK_HZ; /* System oscillator drives MCG clock */
mbed_official 82:0b31dbcd4769 295 } else { /* (!((MCG->C1 & MCG_C1_CLKS_MASK) == 0x80u)) */
mbed_official 82:0b31dbcd4769 296 /* Reserved value */
mbed_official 82:0b31dbcd4769 297 return;
mbed_official 82:0b31dbcd4769 298 } /* (!((MCG->C1 & MCG_C1_CLKS_MASK) == 0x80u)) */
mbed_official 82:0b31dbcd4769 299 SystemCoreClock = (MCGOUTClock / (1u + ((SIM->CLKDIV1 & SIM_CLKDIV1_OUTDIV1_MASK) >> SIM_CLKDIV1_OUTDIV1_SHIFT)));
mbed_official 82:0b31dbcd4769 300 }