fix LPC812 PWM

Dependents:   IR_LED_Send

Fork of mbed-dev by mbed official

Committer:
nameless129
Date:
Mon May 16 16:50:30 2016 +0000
Revision:
129:2e517c56bcfb
Parent:
50:a417edff4437
PWM Fix:Duty 0%??H???????????????

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 }