Johannes Stratmann / mbed-dev

Fork of mbed-dev by mbed official

Committer:
JojoS
Date:
Sat Sep 10 15:32:04 2016 +0000
Revision:
147:ba84b7dc41a7
Parent:
50:a417edff4437
added prescaler for 16 bit timers (solution as in LPC11xx), default prescaler 31 for max 28 ms period time

Who changed what in which revision?

UserRevisionLine numberNew contents of line
mbed_official 50:a417edff4437 1 /***************************************************************************//**
mbed_official 50:a417edff4437 2 * @file system_efm32pg1b.c
mbed_official 50:a417edff4437 3 * @brief CMSIS Cortex-M3/M4 System Layer for EFM32 devices.
mbed_official 50:a417edff4437 4 * @version 4.2.0
mbed_official 50:a417edff4437 5 ******************************************************************************
mbed_official 50:a417edff4437 6 * @section License
mbed_official 50:a417edff4437 7 * <b>Copyright 2015 Silicon Laboratories, Inc. http://www.silabs.com</b>
mbed_official 50:a417edff4437 8 ******************************************************************************
mbed_official 50:a417edff4437 9 *
mbed_official 50:a417edff4437 10 * Permission is granted to anyone to use this software for any purpose,
mbed_official 50:a417edff4437 11 * including commercial applications, and to alter it and redistribute it
mbed_official 50:a417edff4437 12 * freely, subject to the following restrictions:
mbed_official 50:a417edff4437 13 *
mbed_official 50:a417edff4437 14 * 1. The origin of this software must not be misrepresented; you must not
mbed_official 50:a417edff4437 15 * claim that you wrote the original software.@n
mbed_official 50:a417edff4437 16 * 2. Altered source versions must be plainly marked as such, and must not be
mbed_official 50:a417edff4437 17 * misrepresented as being the original software.@n
mbed_official 50:a417edff4437 18 * 3. This notice may not be removed or altered from any source distribution.
mbed_official 50:a417edff4437 19 *
mbed_official 50:a417edff4437 20 * DISCLAIMER OF WARRANTY/LIMITATION OF REMEDIES: Silicon Laboratories, Inc.
mbed_official 50:a417edff4437 21 * has no obligation to support this Software. Silicon Laboratories, Inc. is
mbed_official 50:a417edff4437 22 * providing the Software "AS IS", with no express or implied warranties of any
mbed_official 50:a417edff4437 23 * kind, including, but not limited to, any implied warranties of
mbed_official 50:a417edff4437 24 * merchantability or fitness for any particular purpose or warranties against
mbed_official 50:a417edff4437 25 * infringement of any proprietary rights of a third party.
mbed_official 50:a417edff4437 26 *
mbed_official 50:a417edff4437 27 * Silicon Laboratories, Inc. will not be liable for any consequential,
mbed_official 50:a417edff4437 28 * incidental, or special damages, or any other relief, or for any claim by
mbed_official 50:a417edff4437 29 * any third party, arising from your use of this Software.
mbed_official 50:a417edff4437 30 *
mbed_official 50:a417edff4437 31 *****************************************************************************/
mbed_official 50:a417edff4437 32
mbed_official 50:a417edff4437 33 #include <stdint.h>
mbed_official 50:a417edff4437 34 #include "em_device.h"
mbed_official 50:a417edff4437 35
mbed_official 50:a417edff4437 36 /*******************************************************************************
mbed_official 50:a417edff4437 37 ****************************** DEFINES ************************************
mbed_official 50:a417edff4437 38 ******************************************************************************/
mbed_official 50:a417edff4437 39
mbed_official 50:a417edff4437 40 /** LFRCO frequency, tuned to below frequency during manufacturing. */
mbed_official 50:a417edff4437 41 #define EFM32_LFRCO_FREQ (32768UL)
mbed_official 50:a417edff4437 42 #define EFM32_ULFRCO_FREQ (1000UL)
mbed_official 50:a417edff4437 43
mbed_official 50:a417edff4437 44 /*******************************************************************************
mbed_official 50:a417edff4437 45 ************************** LOCAL VARIABLES ********************************
mbed_official 50:a417edff4437 46 ******************************************************************************/
mbed_official 50:a417edff4437 47
mbed_official 50:a417edff4437 48 /* System oscillator frequencies. These frequencies are normally constant */
mbed_official 50:a417edff4437 49 /* for a target, but they are made configurable in order to allow run-time */
mbed_official 50:a417edff4437 50 /* handling of different boards. The crystal oscillator clocks can be set */
mbed_official 50:a417edff4437 51 /* compile time to a non-default value by defining respective EFM_nFXO_FREQ */
mbed_official 50:a417edff4437 52 /* values according to board design. By defining the EFM_nFXO_FREQ to 0, */
mbed_official 50:a417edff4437 53 /* one indicates that the oscillator is not present, in order to save some */
mbed_official 50:a417edff4437 54 /* SW footprint. */
mbed_official 50:a417edff4437 55
mbed_official 50:a417edff4437 56 #ifndef EFM32_HFRCO_MAX_FREQ
mbed_official 50:a417edff4437 57 #define EFM32_HFRCO_MAX_FREQ (38000000UL)
mbed_official 50:a417edff4437 58 #endif
mbed_official 50:a417edff4437 59
mbed_official 50:a417edff4437 60 #ifndef EFM32_HFXO_FREQ
mbed_official 50:a417edff4437 61 #define EFM32_HFXO_FREQ (40000000UL)
mbed_official 50:a417edff4437 62 #endif
mbed_official 50:a417edff4437 63
mbed_official 50:a417edff4437 64 #ifndef EFM32_HFRCO_STARTUP_FREQ
mbed_official 50:a417edff4437 65 #define EFM32_HFRCO_STARTUP_FREQ (19000000UL)
mbed_official 50:a417edff4437 66 #endif
mbed_official 50:a417edff4437 67
mbed_official 50:a417edff4437 68
mbed_official 50:a417edff4437 69 /* Do not define variable if HF crystal oscillator not present */
mbed_official 50:a417edff4437 70 #if (EFM32_HFXO_FREQ > 0UL)
mbed_official 50:a417edff4437 71 /** @cond DO_NOT_INCLUDE_WITH_DOXYGEN */
mbed_official 50:a417edff4437 72 /** System HFXO clock. */
mbed_official 50:a417edff4437 73 static uint32_t SystemHFXOClock = EFM32_HFXO_FREQ;
mbed_official 50:a417edff4437 74 /** @endcond (DO_NOT_INCLUDE_WITH_DOXYGEN) */
mbed_official 50:a417edff4437 75 #endif
mbed_official 50:a417edff4437 76
mbed_official 50:a417edff4437 77 #ifndef EFM32_LFXO_FREQ
mbed_official 50:a417edff4437 78 #define EFM32_LFXO_FREQ (EFM32_LFRCO_FREQ)
mbed_official 50:a417edff4437 79 #endif
mbed_official 50:a417edff4437 80 /* Do not define variable if LF crystal oscillator not present */
mbed_official 50:a417edff4437 81 #if (EFM32_LFXO_FREQ > 0UL)
mbed_official 50:a417edff4437 82 /** @cond DO_NOT_INCLUDE_WITH_DOXYGEN */
mbed_official 50:a417edff4437 83 /** System LFXO clock. */
mbed_official 50:a417edff4437 84 static uint32_t SystemLFXOClock = 32768UL;
mbed_official 50:a417edff4437 85 /** @endcond (DO_NOT_INCLUDE_WITH_DOXYGEN) */
mbed_official 50:a417edff4437 86 #endif
mbed_official 50:a417edff4437 87
mbed_official 50:a417edff4437 88
mbed_official 50:a417edff4437 89 /*******************************************************************************
mbed_official 50:a417edff4437 90 ************************** GLOBAL VARIABLES *******************************
mbed_official 50:a417edff4437 91 ******************************************************************************/
mbed_official 50:a417edff4437 92
mbed_official 50:a417edff4437 93 /**
mbed_official 50:a417edff4437 94 * @brief
mbed_official 50:a417edff4437 95 * System System Clock Frequency (Core Clock).
mbed_official 50:a417edff4437 96 *
mbed_official 50:a417edff4437 97 * @details
mbed_official 50:a417edff4437 98 * Required CMSIS global variable that must be kept up-to-date.
mbed_official 50:a417edff4437 99 */
mbed_official 50:a417edff4437 100 uint32_t SystemCoreClock;
mbed_official 50:a417edff4437 101
mbed_official 50:a417edff4437 102
mbed_official 50:a417edff4437 103 /**
mbed_official 50:a417edff4437 104 * @brief
mbed_official 50:a417edff4437 105 * System HFRCO frequency
mbed_official 50:a417edff4437 106 *
mbed_official 50:a417edff4437 107 * @note
mbed_official 50:a417edff4437 108 * This is an EFM32 proprietary variable, not part of the CMSIS definition.
mbed_official 50:a417edff4437 109 *
mbed_official 50:a417edff4437 110 * @details
mbed_official 50:a417edff4437 111 * Frequency of the system HFRCO oscillator
mbed_official 50:a417edff4437 112 */
mbed_official 50:a417edff4437 113 uint32_t SystemHfrcoFreq = EFM32_HFRCO_STARTUP_FREQ;
mbed_official 50:a417edff4437 114
mbed_official 50:a417edff4437 115
mbed_official 50:a417edff4437 116 /*******************************************************************************
mbed_official 50:a417edff4437 117 ************************** GLOBAL FUNCTIONS *******************************
mbed_official 50:a417edff4437 118 ******************************************************************************/
mbed_official 50:a417edff4437 119
mbed_official 50:a417edff4437 120 /***************************************************************************//**
mbed_official 50:a417edff4437 121 * @brief
mbed_official 50:a417edff4437 122 * Get the current core clock frequency.
mbed_official 50:a417edff4437 123 *
mbed_official 50:a417edff4437 124 * @details
mbed_official 50:a417edff4437 125 * Calculate and get the current core clock frequency based on the current
mbed_official 50:a417edff4437 126 * configuration. Assuming that the SystemCoreClock global variable is
mbed_official 50:a417edff4437 127 * maintained, the core clock frequency is stored in that variable as well.
mbed_official 50:a417edff4437 128 * This function will however calculate the core clock based on actual HW
mbed_official 50:a417edff4437 129 * configuration. It will also update the SystemCoreClock global variable.
mbed_official 50:a417edff4437 130 *
mbed_official 50:a417edff4437 131 * @note
mbed_official 50:a417edff4437 132 * This is an EFM32 proprietary function, not part of the CMSIS definition.
mbed_official 50:a417edff4437 133 *
mbed_official 50:a417edff4437 134 * @return
mbed_official 50:a417edff4437 135 * The current core clock frequency in Hz.
mbed_official 50:a417edff4437 136 ******************************************************************************/
mbed_official 50:a417edff4437 137 uint32_t SystemCoreClockGet(void)
mbed_official 50:a417edff4437 138 {
mbed_official 50:a417edff4437 139 uint32_t ret;
mbed_official 50:a417edff4437 140 uint32_t presc;
mbed_official 50:a417edff4437 141
mbed_official 50:a417edff4437 142 ret = SystemHFClockGet();
mbed_official 50:a417edff4437 143 presc = (CMU->HFCOREPRESC & _CMU_HFCOREPRESC_PRESC_MASK) >>
mbed_official 50:a417edff4437 144 _CMU_HFCOREPRESC_PRESC_SHIFT;
mbed_official 50:a417edff4437 145 ret /= (presc + 1);
mbed_official 50:a417edff4437 146
mbed_official 50:a417edff4437 147 /* Keep CMSIS system clock variable up-to-date */
mbed_official 50:a417edff4437 148 SystemCoreClock = ret;
mbed_official 50:a417edff4437 149
mbed_official 50:a417edff4437 150 return ret;
mbed_official 50:a417edff4437 151 }
mbed_official 50:a417edff4437 152
mbed_official 50:a417edff4437 153
mbed_official 50:a417edff4437 154 /***************************************************************************//**
mbed_official 50:a417edff4437 155 * @brief
mbed_official 50:a417edff4437 156 * Get the maximum core clock frequency.
mbed_official 50:a417edff4437 157 *
mbed_official 50:a417edff4437 158 * @note
mbed_official 50:a417edff4437 159 * This is an EFM32 proprietary function, not part of the CMSIS definition.
mbed_official 50:a417edff4437 160 *
mbed_official 50:a417edff4437 161 * @return
mbed_official 50:a417edff4437 162 * The maximum core clock frequency in Hz.
mbed_official 50:a417edff4437 163 ******************************************************************************/
mbed_official 50:a417edff4437 164 uint32_t SystemMaxCoreClockGet(void)
mbed_official 50:a417edff4437 165 {
mbed_official 50:a417edff4437 166 return (EFM32_HFRCO_MAX_FREQ > EFM32_HFXO_FREQ ? \
mbed_official 50:a417edff4437 167 EFM32_HFRCO_MAX_FREQ : EFM32_HFXO_FREQ);
mbed_official 50:a417edff4437 168 }
mbed_official 50:a417edff4437 169
mbed_official 50:a417edff4437 170
mbed_official 50:a417edff4437 171 /***************************************************************************//**
mbed_official 50:a417edff4437 172 * @brief
mbed_official 50:a417edff4437 173 * Get the current HFCLK frequency.
mbed_official 50:a417edff4437 174 *
mbed_official 50:a417edff4437 175 * @note
mbed_official 50:a417edff4437 176 * This is an EFM32 proprietary function, not part of the CMSIS definition.
mbed_official 50:a417edff4437 177 *
mbed_official 50:a417edff4437 178 * @return
mbed_official 50:a417edff4437 179 * The current HFCLK frequency in Hz.
mbed_official 50:a417edff4437 180 ******************************************************************************/
mbed_official 50:a417edff4437 181 uint32_t SystemHFClockGet(void)
mbed_official 50:a417edff4437 182 {
mbed_official 50:a417edff4437 183 uint32_t ret;
mbed_official 50:a417edff4437 184
mbed_official 50:a417edff4437 185 switch (CMU->HFCLKSTATUS & _CMU_HFCLKSTATUS_SELECTED_MASK)
mbed_official 50:a417edff4437 186 {
mbed_official 50:a417edff4437 187 case CMU_HFCLKSTATUS_SELECTED_LFXO:
mbed_official 50:a417edff4437 188 #if (EFM32_LFXO_FREQ > 0)
mbed_official 50:a417edff4437 189 ret = SystemLFXOClock;
mbed_official 50:a417edff4437 190 #else
mbed_official 50:a417edff4437 191 /* We should not get here, since core should not be clocked. May */
mbed_official 50:a417edff4437 192 /* be caused by a misconfiguration though. */
mbed_official 50:a417edff4437 193 ret = 0;
mbed_official 50:a417edff4437 194 #endif
mbed_official 50:a417edff4437 195 break;
mbed_official 50:a417edff4437 196
mbed_official 50:a417edff4437 197 case CMU_HFCLKSTATUS_SELECTED_LFRCO:
mbed_official 50:a417edff4437 198 ret = EFM32_LFRCO_FREQ;
mbed_official 50:a417edff4437 199 break;
mbed_official 50:a417edff4437 200
mbed_official 50:a417edff4437 201 case CMU_HFCLKSTATUS_SELECTED_HFXO:
mbed_official 50:a417edff4437 202 #if (EFM32_HFXO_FREQ > 0)
mbed_official 50:a417edff4437 203 ret = SystemHFXOClock;
mbed_official 50:a417edff4437 204 #else
mbed_official 50:a417edff4437 205 /* We should not get here, since core should not be clocked. May */
mbed_official 50:a417edff4437 206 /* be caused by a misconfiguration though. */
mbed_official 50:a417edff4437 207 ret = 0;
mbed_official 50:a417edff4437 208 #endif
mbed_official 50:a417edff4437 209 break;
mbed_official 50:a417edff4437 210
mbed_official 50:a417edff4437 211 default: /* CMU_HFCLKSTATUS_SELECTED_HFRCO */
mbed_official 50:a417edff4437 212 ret = SystemHfrcoFreq;
mbed_official 50:a417edff4437 213 break;
mbed_official 50:a417edff4437 214 }
mbed_official 50:a417edff4437 215
mbed_official 50:a417edff4437 216 return ret;
mbed_official 50:a417edff4437 217 }
mbed_official 50:a417edff4437 218
mbed_official 50:a417edff4437 219
mbed_official 50:a417edff4437 220 /**************************************************************************//**
mbed_official 50:a417edff4437 221 * @brief
mbed_official 50:a417edff4437 222 * Get high frequency crystal oscillator clock frequency for target system.
mbed_official 50:a417edff4437 223 *
mbed_official 50:a417edff4437 224 * @note
mbed_official 50:a417edff4437 225 * This is an EFM32 proprietary function, not part of the CMSIS definition.
mbed_official 50:a417edff4437 226 *
mbed_official 50:a417edff4437 227 * @return
mbed_official 50:a417edff4437 228 * HFXO frequency in Hz.
mbed_official 50:a417edff4437 229 *****************************************************************************/
mbed_official 50:a417edff4437 230 uint32_t SystemHFXOClockGet(void)
mbed_official 50:a417edff4437 231 {
mbed_official 50:a417edff4437 232 /* External crystal oscillator present? */
mbed_official 50:a417edff4437 233 #if (EFM32_HFXO_FREQ > 0)
mbed_official 50:a417edff4437 234 return SystemHFXOClock;
mbed_official 50:a417edff4437 235 #else
mbed_official 50:a417edff4437 236 return 0;
mbed_official 50:a417edff4437 237 #endif
mbed_official 50:a417edff4437 238 }
mbed_official 50:a417edff4437 239
mbed_official 50:a417edff4437 240
mbed_official 50:a417edff4437 241 /**************************************************************************//**
mbed_official 50:a417edff4437 242 * @brief
mbed_official 50:a417edff4437 243 * Set high frequency crystal oscillator clock frequency for target system.
mbed_official 50:a417edff4437 244 *
mbed_official 50:a417edff4437 245 * @note
mbed_official 50:a417edff4437 246 * This function is mainly provided for being able to handle target systems
mbed_official 50:a417edff4437 247 * with different HF crystal oscillator frequencies run-time. If used, it
mbed_official 50:a417edff4437 248 * should probably only be used once during system startup.
mbed_official 50:a417edff4437 249 *
mbed_official 50:a417edff4437 250 * @note
mbed_official 50:a417edff4437 251 * This is an EFM32 proprietary function, not part of the CMSIS definition.
mbed_official 50:a417edff4437 252 *
mbed_official 50:a417edff4437 253 * @param[in] freq
mbed_official 50:a417edff4437 254 * HFXO frequency in Hz used for target.
mbed_official 50:a417edff4437 255 *****************************************************************************/
mbed_official 50:a417edff4437 256 void SystemHFXOClockSet(uint32_t freq)
mbed_official 50:a417edff4437 257 {
mbed_official 50:a417edff4437 258 /* External crystal oscillator present? */
mbed_official 50:a417edff4437 259 #if (EFM32_HFXO_FREQ > 0)
mbed_official 50:a417edff4437 260 SystemHFXOClock = freq;
mbed_official 50:a417edff4437 261
mbed_official 50:a417edff4437 262 /* Update core clock frequency if HFXO is used to clock core */
mbed_official 50:a417edff4437 263 if ((CMU->HFCLKSTATUS & _CMU_HFCLKSTATUS_SELECTED_MASK) == CMU_HFCLKSTATUS_SELECTED_HFXO)
mbed_official 50:a417edff4437 264 {
mbed_official 50:a417edff4437 265 /* The function will update the global variable */
mbed_official 50:a417edff4437 266 SystemCoreClockGet();
mbed_official 50:a417edff4437 267 }
mbed_official 50:a417edff4437 268 #else
mbed_official 50:a417edff4437 269 (void)freq; /* Unused parameter */
mbed_official 50:a417edff4437 270 #endif
mbed_official 50:a417edff4437 271 }
mbed_official 50:a417edff4437 272
mbed_official 50:a417edff4437 273
mbed_official 50:a417edff4437 274 /**************************************************************************//**
mbed_official 50:a417edff4437 275 * @brief
mbed_official 50:a417edff4437 276 * Initialize the system.
mbed_official 50:a417edff4437 277 *
mbed_official 50:a417edff4437 278 * @details
mbed_official 50:a417edff4437 279 * Do required generic HW system init.
mbed_official 50:a417edff4437 280 *
mbed_official 50:a417edff4437 281 * @note
mbed_official 50:a417edff4437 282 * This function is invoked during system init, before the main() routine
mbed_official 50:a417edff4437 283 * and any data has been initialized. For this reason, it cannot do any
mbed_official 50:a417edff4437 284 * initialization of variables etc.
mbed_official 50:a417edff4437 285 *****************************************************************************/
mbed_official 50:a417edff4437 286 void SystemInit(void)
mbed_official 50:a417edff4437 287 {
mbed_official 50:a417edff4437 288 #if (__FPU_PRESENT == 1)
mbed_official 50:a417edff4437 289 /* Set floating point coprosessor access mode. */
mbed_official 50:a417edff4437 290 SCB->CPACR |= ((3UL << 10 * 2) | /* set CP10 Full Access */
mbed_official 50:a417edff4437 291 (3UL << 11 * 2)); /* set CP11 Full Access */
mbed_official 50:a417edff4437 292 #endif
mbed_official 50:a417edff4437 293 }
mbed_official 50:a417edff4437 294
mbed_official 50:a417edff4437 295
mbed_official 50:a417edff4437 296 /**************************************************************************//**
mbed_official 50:a417edff4437 297 * @brief
mbed_official 50:a417edff4437 298 * Get low frequency RC oscillator clock frequency for target system.
mbed_official 50:a417edff4437 299 *
mbed_official 50:a417edff4437 300 * @note
mbed_official 50:a417edff4437 301 * This is an EFM32 proprietary function, not part of the CMSIS definition.
mbed_official 50:a417edff4437 302 *
mbed_official 50:a417edff4437 303 * @return
mbed_official 50:a417edff4437 304 * LFRCO frequency in Hz.
mbed_official 50:a417edff4437 305 *****************************************************************************/
mbed_official 50:a417edff4437 306 uint32_t SystemLFRCOClockGet(void)
mbed_official 50:a417edff4437 307 {
mbed_official 50:a417edff4437 308 /* Currently we assume that this frequency is properly tuned during */
mbed_official 50:a417edff4437 309 /* manufacturing and is not changed after reset. If future requirements */
mbed_official 50:a417edff4437 310 /* for re-tuning by user, we can add support for that. */
mbed_official 50:a417edff4437 311 return EFM32_LFRCO_FREQ;
mbed_official 50:a417edff4437 312 }
mbed_official 50:a417edff4437 313
mbed_official 50:a417edff4437 314
mbed_official 50:a417edff4437 315 /**************************************************************************//**
mbed_official 50:a417edff4437 316 * @brief
mbed_official 50:a417edff4437 317 * Get ultra low frequency RC oscillator clock frequency for target system.
mbed_official 50:a417edff4437 318 *
mbed_official 50:a417edff4437 319 * @note
mbed_official 50:a417edff4437 320 * This is an EFM32 proprietary function, not part of the CMSIS definition.
mbed_official 50:a417edff4437 321 *
mbed_official 50:a417edff4437 322 * @return
mbed_official 50:a417edff4437 323 * ULFRCO frequency in Hz.
mbed_official 50:a417edff4437 324 *****************************************************************************/
mbed_official 50:a417edff4437 325 uint32_t SystemULFRCOClockGet(void)
mbed_official 50:a417edff4437 326 {
mbed_official 50:a417edff4437 327 /* The ULFRCO frequency is not tuned, and can be very inaccurate */
mbed_official 50:a417edff4437 328 return EFM32_ULFRCO_FREQ;
mbed_official 50:a417edff4437 329 }
mbed_official 50:a417edff4437 330
mbed_official 50:a417edff4437 331
mbed_official 50:a417edff4437 332 /**************************************************************************//**
mbed_official 50:a417edff4437 333 * @brief
mbed_official 50:a417edff4437 334 * Get low frequency crystal oscillator clock frequency for target system.
mbed_official 50:a417edff4437 335 *
mbed_official 50:a417edff4437 336 * @note
mbed_official 50:a417edff4437 337 * This is an EFM32 proprietary function, not part of the CMSIS definition.
mbed_official 50:a417edff4437 338 *
mbed_official 50:a417edff4437 339 * @return
mbed_official 50:a417edff4437 340 * LFXO frequency in Hz.
mbed_official 50:a417edff4437 341 *****************************************************************************/
mbed_official 50:a417edff4437 342 uint32_t SystemLFXOClockGet(void)
mbed_official 50:a417edff4437 343 {
mbed_official 50:a417edff4437 344 /* External crystal oscillator present? */
mbed_official 50:a417edff4437 345 #if (EFM32_LFXO_FREQ > 0)
mbed_official 50:a417edff4437 346 return SystemLFXOClock;
mbed_official 50:a417edff4437 347 #else
mbed_official 50:a417edff4437 348 return 0;
mbed_official 50:a417edff4437 349 #endif
mbed_official 50:a417edff4437 350 }
mbed_official 50:a417edff4437 351
mbed_official 50:a417edff4437 352
mbed_official 50:a417edff4437 353 /**************************************************************************//**
mbed_official 50:a417edff4437 354 * @brief
mbed_official 50:a417edff4437 355 * Set low frequency crystal oscillator clock frequency for target system.
mbed_official 50:a417edff4437 356 *
mbed_official 50:a417edff4437 357 * @note
mbed_official 50:a417edff4437 358 * This function is mainly provided for being able to handle target systems
mbed_official 50:a417edff4437 359 * with different HF crystal oscillator frequencies run-time. If used, it
mbed_official 50:a417edff4437 360 * should probably only be used once during system startup.
mbed_official 50:a417edff4437 361 *
mbed_official 50:a417edff4437 362 * @note
mbed_official 50:a417edff4437 363 * This is an EFM32 proprietary function, not part of the CMSIS definition.
mbed_official 50:a417edff4437 364 *
mbed_official 50:a417edff4437 365 * @param[in] freq
mbed_official 50:a417edff4437 366 * LFXO frequency in Hz used for target.
mbed_official 50:a417edff4437 367 *****************************************************************************/
mbed_official 50:a417edff4437 368 void SystemLFXOClockSet(uint32_t freq)
mbed_official 50:a417edff4437 369 {
mbed_official 50:a417edff4437 370 /* External crystal oscillator present? */
mbed_official 50:a417edff4437 371 #if (EFM32_LFXO_FREQ > 0)
mbed_official 50:a417edff4437 372 SystemLFXOClock = freq;
mbed_official 50:a417edff4437 373
mbed_official 50:a417edff4437 374 /* Update core clock frequency if LFXO is used to clock core */
mbed_official 50:a417edff4437 375 if ((CMU->HFCLKSTATUS & _CMU_HFCLKSTATUS_SELECTED_MASK) == CMU_HFCLKSTATUS_SELECTED_LFXO)
mbed_official 50:a417edff4437 376 {
mbed_official 50:a417edff4437 377 /* The function will update the global variable */
mbed_official 50:a417edff4437 378 SystemCoreClockGet();
mbed_official 50:a417edff4437 379 }
mbed_official 50:a417edff4437 380 #else
mbed_official 50:a417edff4437 381 (void)freq; /* Unused parameter */
mbed_official 50:a417edff4437 382 #endif
mbed_official 50:a417edff4437 383 }