added prescaler for 16 bit pwm in LPC1347 target

Fork of mbed-dev by mbed official

Committer:
bogdanm
Date:
Thu Oct 01 15:25:22 2015 +0300
Revision:
0:9b334a45a8ff
Child:
50:a417edff4437
Initial commit on mbed-dev

Replaces mbed-src (now inactive)

Who changed what in which revision?

UserRevisionLine numberNew contents of line
bogdanm 0:9b334a45a8ff 1 /***************************************************************************//**
bogdanm 0:9b334a45a8ff 2 * @file em_burtc.c
bogdanm 0:9b334a45a8ff 3 * @brief Backup Real Time Counter (BURTC) Peripheral API
bogdanm 0:9b334a45a8ff 4 * @version 3.20.12
bogdanm 0:9b334a45a8ff 5 *******************************************************************************
bogdanm 0:9b334a45a8ff 6 * @section License
bogdanm 0:9b334a45a8ff 7 * <b>(C) Copyright 2014 Silicon Labs, http://www.silabs.com</b>
bogdanm 0:9b334a45a8ff 8 *******************************************************************************
bogdanm 0:9b334a45a8ff 9 *
bogdanm 0:9b334a45a8ff 10 * Permission is granted to anyone to use this software for any purpose,
bogdanm 0:9b334a45a8ff 11 * including commercial applications, and to alter it and redistribute it
bogdanm 0:9b334a45a8ff 12 * freely, subject to the following restrictions:
bogdanm 0:9b334a45a8ff 13 *
bogdanm 0:9b334a45a8ff 14 * 1. The origin of this software must not be misrepresented; you must not
bogdanm 0:9b334a45a8ff 15 * claim that you wrote the original software.
bogdanm 0:9b334a45a8ff 16 * 2. Altered source versions must be plainly marked as such, and must not be
bogdanm 0:9b334a45a8ff 17 * misrepresented as being the original software.
bogdanm 0:9b334a45a8ff 18 * 3. This notice may not be removed or altered from any source distribution.
bogdanm 0:9b334a45a8ff 19 *
bogdanm 0:9b334a45a8ff 20 * DISCLAIMER OF WARRANTY/LIMITATION OF REMEDIES: Silicon Labs has no
bogdanm 0:9b334a45a8ff 21 * obligation to support this Software. Silicon Labs is providing the
bogdanm 0:9b334a45a8ff 22 * Software "AS IS", with no express or implied warranties of any kind,
bogdanm 0:9b334a45a8ff 23 * including, but not limited to, any implied warranties of merchantability
bogdanm 0:9b334a45a8ff 24 * or fitness for any particular purpose or warranties against infringement
bogdanm 0:9b334a45a8ff 25 * of any proprietary rights of a third party.
bogdanm 0:9b334a45a8ff 26 *
bogdanm 0:9b334a45a8ff 27 * Silicon Labs will not be liable for any consequential, incidental, or
bogdanm 0:9b334a45a8ff 28 * special damages, or any other relief, or for any claim by any third party,
bogdanm 0:9b334a45a8ff 29 * arising from your use of this Software.
bogdanm 0:9b334a45a8ff 30 *
bogdanm 0:9b334a45a8ff 31 ******************************************************************************/
bogdanm 0:9b334a45a8ff 32
bogdanm 0:9b334a45a8ff 33
bogdanm 0:9b334a45a8ff 34 #include "em_device.h"
bogdanm 0:9b334a45a8ff 35 #if defined(BURTC_PRESENT)
bogdanm 0:9b334a45a8ff 36 #include "em_burtc.h"
bogdanm 0:9b334a45a8ff 37
bogdanm 0:9b334a45a8ff 38 #include "em_assert.h"
bogdanm 0:9b334a45a8ff 39 #include "em_bitband.h"
bogdanm 0:9b334a45a8ff 40
bogdanm 0:9b334a45a8ff 41 /***************************************************************************//**
bogdanm 0:9b334a45a8ff 42 * @addtogroup EM_Library
bogdanm 0:9b334a45a8ff 43 * @{
bogdanm 0:9b334a45a8ff 44 ******************************************************************************/
bogdanm 0:9b334a45a8ff 45
bogdanm 0:9b334a45a8ff 46 /***************************************************************************//**
bogdanm 0:9b334a45a8ff 47 * @addtogroup BURTC
bogdanm 0:9b334a45a8ff 48 * @brief Backup Real Time Counter (BURTC) Peripheral API
bogdanm 0:9b334a45a8ff 49 * @{
bogdanm 0:9b334a45a8ff 50 ******************************************************************************/
bogdanm 0:9b334a45a8ff 51
bogdanm 0:9b334a45a8ff 52 /*******************************************************************************
bogdanm 0:9b334a45a8ff 53 ******************************* DEFINES ***********************************
bogdanm 0:9b334a45a8ff 54 ******************************************************************************/
bogdanm 0:9b334a45a8ff 55
bogdanm 0:9b334a45a8ff 56 /*******************************************************************************
bogdanm 0:9b334a45a8ff 57 ************************** LOCAL FUNCTIONS ********************************
bogdanm 0:9b334a45a8ff 58 ******************************************************************************/
bogdanm 0:9b334a45a8ff 59
bogdanm 0:9b334a45a8ff 60 /***************************************************************************//**
bogdanm 0:9b334a45a8ff 61 * @brief Convert dividend to prescaler logarithmic value. Only works for even
bogdanm 0:9b334a45a8ff 62 * numbers equal to 2^n
bogdanm 0:9b334a45a8ff 63 * @param[in] div Unscaled dividend,
bogdanm 0:9b334a45a8ff 64 * @return Base 2 logarithm of input, as used by fixed prescalers
bogdanm 0:9b334a45a8ff 65 ******************************************************************************/
bogdanm 0:9b334a45a8ff 66 __STATIC_INLINE uint32_t BURTC_DivToLog2(uint32_t div)
bogdanm 0:9b334a45a8ff 67 {
bogdanm 0:9b334a45a8ff 68 uint32_t log2;
bogdanm 0:9b334a45a8ff 69
bogdanm 0:9b334a45a8ff 70 /* Prescaler accepts an argument of 128 or less, valid values being 2^n */
bogdanm 0:9b334a45a8ff 71 EFM_ASSERT((div > 0) && (div <= 32768));
bogdanm 0:9b334a45a8ff 72
bogdanm 0:9b334a45a8ff 73 /* Count leading zeroes and "reverse" result, Cortex-M3 intrinsic */
bogdanm 0:9b334a45a8ff 74 log2 = (31 - __CLZ(div));
bogdanm 0:9b334a45a8ff 75
bogdanm 0:9b334a45a8ff 76 return log2;
bogdanm 0:9b334a45a8ff 77 }
bogdanm 0:9b334a45a8ff 78
bogdanm 0:9b334a45a8ff 79
bogdanm 0:9b334a45a8ff 80 /***************************************************************************//**
bogdanm 0:9b334a45a8ff 81 * @brief
bogdanm 0:9b334a45a8ff 82 * Wait for ongoing sync of register(s) to low frequency domain to complete.
bogdanm 0:9b334a45a8ff 83 *
bogdanm 0:9b334a45a8ff 84 * @param[in] mask
bogdanm 0:9b334a45a8ff 85 * Bitmask corresponding to SYNCBUSY register defined bits, indicating
bogdanm 0:9b334a45a8ff 86 * registers that must complete any ongoing synchronization.
bogdanm 0:9b334a45a8ff 87 ******************************************************************************/
bogdanm 0:9b334a45a8ff 88 __STATIC_INLINE void BURTC_Sync(uint32_t mask)
bogdanm 0:9b334a45a8ff 89 {
bogdanm 0:9b334a45a8ff 90 /* Avoid deadlock if modifying the same register twice when freeze mode is
bogdanm 0:9b334a45a8ff 91 activated, or when no clock is selected for the BURTC. If no clock is
bogdanm 0:9b334a45a8ff 92 selected, then the sync is done once the clock source is set. */
bogdanm 0:9b334a45a8ff 93 if ((BURTC->FREEZE & BURTC_FREEZE_REGFREEZE)
bogdanm 0:9b334a45a8ff 94 || ((BURTC->CTRL & _BURTC_CTRL_CLKSEL_MASK) != _BURTC_CTRL_CLKSEL_NONE))
bogdanm 0:9b334a45a8ff 95 {
bogdanm 0:9b334a45a8ff 96 return;
bogdanm 0:9b334a45a8ff 97 }
bogdanm 0:9b334a45a8ff 98 /* Wait for any pending previous write operation to have been completed */
bogdanm 0:9b334a45a8ff 99 /* in low frequency domain. This is only required for the Gecko Family */
bogdanm 0:9b334a45a8ff 100 while (BURTC->SYNCBUSY & mask)
bogdanm 0:9b334a45a8ff 101 ;
bogdanm 0:9b334a45a8ff 102 }
bogdanm 0:9b334a45a8ff 103
bogdanm 0:9b334a45a8ff 104
bogdanm 0:9b334a45a8ff 105 /*******************************************************************************
bogdanm 0:9b334a45a8ff 106 ************************** GLOBAL FUNCTIONS *******************************
bogdanm 0:9b334a45a8ff 107 ******************************************************************************/
bogdanm 0:9b334a45a8ff 108
bogdanm 0:9b334a45a8ff 109 /***************************************************************************//**
bogdanm 0:9b334a45a8ff 110 * @brief Initialize BURTC
bogdanm 0:9b334a45a8ff 111 *
bogdanm 0:9b334a45a8ff 112 * @details
bogdanm 0:9b334a45a8ff 113 * Configures the BURTC peripheral.
bogdanm 0:9b334a45a8ff 114 *
bogdanm 0:9b334a45a8ff 115 * @note
bogdanm 0:9b334a45a8ff 116 * Before initialization, BURTC module must first be enabled by clearing the
bogdanm 0:9b334a45a8ff 117 * reset bit in the RMU, i.e.
bogdanm 0:9b334a45a8ff 118 * @verbatim
bogdanm 0:9b334a45a8ff 119 * RMU_ResetControl(rmuResetBU, false);
bogdanm 0:9b334a45a8ff 120 * @endverbatim
bogdanm 0:9b334a45a8ff 121 * Compare channel 0 must be configured outside this function, before
bogdanm 0:9b334a45a8ff 122 * initialization if enable is set to true. The counter will always be reset.
bogdanm 0:9b334a45a8ff 123 *
bogdanm 0:9b334a45a8ff 124 * @param[in] burtcInit
bogdanm 0:9b334a45a8ff 125 * Pointer to BURTC initialization structure
bogdanm 0:9b334a45a8ff 126 ******************************************************************************/
bogdanm 0:9b334a45a8ff 127 void BURTC_Init(const BURTC_Init_TypeDef *burtcInit)
bogdanm 0:9b334a45a8ff 128 {
bogdanm 0:9b334a45a8ff 129 uint32_t ctrl;
bogdanm 0:9b334a45a8ff 130 uint32_t presc;
bogdanm 0:9b334a45a8ff 131
bogdanm 0:9b334a45a8ff 132 /* Check initializer structure integrity */
bogdanm 0:9b334a45a8ff 133 EFM_ASSERT(burtcInit != (BURTC_Init_TypeDef *) 0);
bogdanm 0:9b334a45a8ff 134 /* Clock divider must be between 1 and 128, really on the form 2^n */
bogdanm 0:9b334a45a8ff 135 EFM_ASSERT((burtcInit->clkDiv >= 1) && (burtcInit->clkDiv <= 128));
bogdanm 0:9b334a45a8ff 136 /* Ignored compare bits during low power operation must be less than 7 */
bogdanm 0:9b334a45a8ff 137 /* Note! Giant Gecko revision C errata, do NOT use LPCOMP=7 */
bogdanm 0:9b334a45a8ff 138 EFM_ASSERT(burtcInit->lowPowerComp <= 6);
bogdanm 0:9b334a45a8ff 139 /* You cannot enable the BURTC if mode is set to disabled */
bogdanm 0:9b334a45a8ff 140 EFM_ASSERT((burtcInit->enable == false) ||
bogdanm 0:9b334a45a8ff 141 ((burtcInit->enable == true) && (burtcInit->mode != burtcModeDisable)));
bogdanm 0:9b334a45a8ff 142 /* Low power mode is only available with LFRCO or LFXO as clock source */
bogdanm 0:9b334a45a8ff 143 EFM_ASSERT((burtcInit->clkSel != burtcClkSelULFRCO) ||
bogdanm 0:9b334a45a8ff 144 ((burtcInit->clkSel == burtcClkSelULFRCO) && (burtcInit->lowPowerMode == burtcLPDisable)));
bogdanm 0:9b334a45a8ff 145
bogdanm 0:9b334a45a8ff 146 /* Calculate prescaler value from clock divider input */
bogdanm 0:9b334a45a8ff 147 /* Note! If clock select (clkSel) is ULFRCO, a clock divisor (clkDiv) of
bogdanm 0:9b334a45a8ff 148 value 1 will select a 2kHz ULFRCO clock, while any other value will
bogdanm 0:9b334a45a8ff 149 select a 1kHz ULFRCO clock source. */
bogdanm 0:9b334a45a8ff 150 presc = BURTC_DivToLog2(burtcInit->clkDiv);
bogdanm 0:9b334a45a8ff 151
bogdanm 0:9b334a45a8ff 152 /* Make sure all registers are updated simultaneously */
bogdanm 0:9b334a45a8ff 153 if (burtcInit->enable)
bogdanm 0:9b334a45a8ff 154 {
bogdanm 0:9b334a45a8ff 155 BURTC_FreezeEnable(true);
bogdanm 0:9b334a45a8ff 156 }
bogdanm 0:9b334a45a8ff 157
bogdanm 0:9b334a45a8ff 158 /* Modification of LPMODE register requires sync with potential ongoing
bogdanm 0:9b334a45a8ff 159 * register updates in LF domain. */
bogdanm 0:9b334a45a8ff 160 BURTC_Sync(BURTC_SYNCBUSY_LPMODE);
bogdanm 0:9b334a45a8ff 161
bogdanm 0:9b334a45a8ff 162 /* Configure low power mode */
bogdanm 0:9b334a45a8ff 163 BURTC->LPMODE = (uint32_t) (burtcInit->lowPowerMode);
bogdanm 0:9b334a45a8ff 164
bogdanm 0:9b334a45a8ff 165 /* New configuration */
bogdanm 0:9b334a45a8ff 166 ctrl = ((BURTC_CTRL_RSTEN) |
bogdanm 0:9b334a45a8ff 167 (burtcInit->mode) |
bogdanm 0:9b334a45a8ff 168 (burtcInit->debugRun << _BURTC_CTRL_DEBUGRUN_SHIFT) |
bogdanm 0:9b334a45a8ff 169 (burtcInit->compare0Top << _BURTC_CTRL_COMP0TOP_SHIFT) |
bogdanm 0:9b334a45a8ff 170 (burtcInit->lowPowerComp << _BURTC_CTRL_LPCOMP_SHIFT) |
bogdanm 0:9b334a45a8ff 171 (presc << _BURTC_CTRL_PRESC_SHIFT) |
bogdanm 0:9b334a45a8ff 172 (burtcInit->clkSel) |
bogdanm 0:9b334a45a8ff 173 (burtcInit->timeStamp << _BURTC_CTRL_BUMODETSEN_SHIFT));
bogdanm 0:9b334a45a8ff 174
bogdanm 0:9b334a45a8ff 175 /* Clear interrupts */
bogdanm 0:9b334a45a8ff 176 BURTC_IntClear(0xFFFFFFFF);
bogdanm 0:9b334a45a8ff 177
bogdanm 0:9b334a45a8ff 178 /* Set new configuration */
bogdanm 0:9b334a45a8ff 179 BURTC->CTRL = ctrl;
bogdanm 0:9b334a45a8ff 180
bogdanm 0:9b334a45a8ff 181 /* Enable BURTC and counter */
bogdanm 0:9b334a45a8ff 182 if (burtcInit->enable)
bogdanm 0:9b334a45a8ff 183 {
bogdanm 0:9b334a45a8ff 184 /* To enable BURTC counter, we need to disable reset */
bogdanm 0:9b334a45a8ff 185 BURTC_Enable(true);
bogdanm 0:9b334a45a8ff 186
bogdanm 0:9b334a45a8ff 187 /* Clear freeze */
bogdanm 0:9b334a45a8ff 188 BURTC_FreezeEnable(false);
bogdanm 0:9b334a45a8ff 189 }
bogdanm 0:9b334a45a8ff 190 }
bogdanm 0:9b334a45a8ff 191
bogdanm 0:9b334a45a8ff 192
bogdanm 0:9b334a45a8ff 193 /***************************************************************************//**
bogdanm 0:9b334a45a8ff 194 * @brief Set BURTC compare channel
bogdanm 0:9b334a45a8ff 195 *
bogdanm 0:9b334a45a8ff 196 * @param[in] comp Compare channel index, must be 0 for Giant / Leopard Gecko
bogdanm 0:9b334a45a8ff 197 *
bogdanm 0:9b334a45a8ff 198 * @param[in] value New compare value
bogdanm 0:9b334a45a8ff 199 ******************************************************************************/
bogdanm 0:9b334a45a8ff 200 void BURTC_CompareSet(unsigned int comp, uint32_t value)
bogdanm 0:9b334a45a8ff 201 {
bogdanm 0:9b334a45a8ff 202 (void) comp; /* Unused parameter when EFM_ASSERT is undefined. */
bogdanm 0:9b334a45a8ff 203
bogdanm 0:9b334a45a8ff 204 EFM_ASSERT(comp == 0);
bogdanm 0:9b334a45a8ff 205
bogdanm 0:9b334a45a8ff 206 /* Modification of COMP0 register requires sync with potential ongoing
bogdanm 0:9b334a45a8ff 207 * register updates in LF domain. */
bogdanm 0:9b334a45a8ff 208 BURTC_Sync(BURTC_SYNCBUSY_COMP0);
bogdanm 0:9b334a45a8ff 209
bogdanm 0:9b334a45a8ff 210 /* Configure compare channel 0 */
bogdanm 0:9b334a45a8ff 211 BURTC->COMP0 = value;
bogdanm 0:9b334a45a8ff 212 }
bogdanm 0:9b334a45a8ff 213
bogdanm 0:9b334a45a8ff 214
bogdanm 0:9b334a45a8ff 215 /***************************************************************************//**
bogdanm 0:9b334a45a8ff 216 * @brief Get BURTC compare value
bogdanm 0:9b334a45a8ff 217 *
bogdanm 0:9b334a45a8ff 218 * @param[in] comp Compare channel index value, must be 0 for Giant/Leopard.
bogdanm 0:9b334a45a8ff 219 *
bogdanm 0:9b334a45a8ff 220 * @return Currently configured value for this compare channel
bogdanm 0:9b334a45a8ff 221 ******************************************************************************/
bogdanm 0:9b334a45a8ff 222 uint32_t BURTC_CompareGet(unsigned int comp)
bogdanm 0:9b334a45a8ff 223 {
bogdanm 0:9b334a45a8ff 224 (void) comp; /* Unused parameter when EFM_ASSERT is undefined. */
bogdanm 0:9b334a45a8ff 225
bogdanm 0:9b334a45a8ff 226 EFM_ASSERT(comp == 0);
bogdanm 0:9b334a45a8ff 227
bogdanm 0:9b334a45a8ff 228 return BURTC->COMP0;
bogdanm 0:9b334a45a8ff 229 }
bogdanm 0:9b334a45a8ff 230
bogdanm 0:9b334a45a8ff 231
bogdanm 0:9b334a45a8ff 232 /***************************************************************************//**
bogdanm 0:9b334a45a8ff 233 * @brief Reset counter
bogdanm 0:9b334a45a8ff 234 ******************************************************************************/
bogdanm 0:9b334a45a8ff 235 void BURTC_CounterReset(void)
bogdanm 0:9b334a45a8ff 236 {
bogdanm 0:9b334a45a8ff 237 /* Set and clear reset bit */
bogdanm 0:9b334a45a8ff 238 BITBAND_Peripheral(&BURTC->CTRL, _BURTC_CTRL_RSTEN_SHIFT, 1);
bogdanm 0:9b334a45a8ff 239 BITBAND_Peripheral(&BURTC->CTRL, _BURTC_CTRL_RSTEN_SHIFT, 0);
bogdanm 0:9b334a45a8ff 240 }
bogdanm 0:9b334a45a8ff 241
bogdanm 0:9b334a45a8ff 242
bogdanm 0:9b334a45a8ff 243 /***************************************************************************//**
bogdanm 0:9b334a45a8ff 244 * @brief
bogdanm 0:9b334a45a8ff 245 * Restore BURTC to reset state
bogdanm 0:9b334a45a8ff 246 * @note
bogdanm 0:9b334a45a8ff 247 * Before accessing the BURTC, BURSTEN in RMU->CTRL must be cleared.
bogdanm 0:9b334a45a8ff 248 * LOCK will not be reset to default value, as this will disable access
bogdanm 0:9b334a45a8ff 249 * to core BURTC registers.
bogdanm 0:9b334a45a8ff 250 ******************************************************************************/
bogdanm 0:9b334a45a8ff 251 void BURTC_Reset(void)
bogdanm 0:9b334a45a8ff 252 {
bogdanm 0:9b334a45a8ff 253 bool buResetState;
bogdanm 0:9b334a45a8ff 254
bogdanm 0:9b334a45a8ff 255 /* Read reset state, set reset and restore state */
bogdanm 0:9b334a45a8ff 256 buResetState = BITBAND_PeripheralRead(&RMU->CTRL, _RMU_CTRL_BURSTEN_SHIFT);
bogdanm 0:9b334a45a8ff 257 BITBAND_Peripheral(&RMU->CTRL, _RMU_CTRL_BURSTEN_SHIFT, 1);
bogdanm 0:9b334a45a8ff 258 BITBAND_Peripheral(&RMU->CTRL, _RMU_CTRL_BURSTEN_SHIFT, buResetState);
bogdanm 0:9b334a45a8ff 259 }
bogdanm 0:9b334a45a8ff 260
bogdanm 0:9b334a45a8ff 261
bogdanm 0:9b334a45a8ff 262 /***************************************************************************//**
bogdanm 0:9b334a45a8ff 263 * @brief
bogdanm 0:9b334a45a8ff 264 * Get clock frequency of the BURTC.
bogdanm 0:9b334a45a8ff 265 *
bogdanm 0:9b334a45a8ff 266 * @return
bogdanm 0:9b334a45a8ff 267 * The current frequency in Hz.
bogdanm 0:9b334a45a8ff 268 ******************************************************************************/
bogdanm 0:9b334a45a8ff 269 uint32_t BURTC_ClockFreqGet(void)
bogdanm 0:9b334a45a8ff 270 {
bogdanm 0:9b334a45a8ff 271 uint32_t clkSel;
bogdanm 0:9b334a45a8ff 272 uint32_t clkDiv;
bogdanm 0:9b334a45a8ff 273 uint32_t frequency;
bogdanm 0:9b334a45a8ff 274
bogdanm 0:9b334a45a8ff 275 clkSel = BURTC->CTRL & _BURTC_CTRL_CLKSEL_MASK;
bogdanm 0:9b334a45a8ff 276 clkDiv = (BURTC->CTRL & _BURTC_CTRL_PRESC_MASK) >> _BURTC_CTRL_PRESC_SHIFT;
bogdanm 0:9b334a45a8ff 277
bogdanm 0:9b334a45a8ff 278 switch (clkSel)
bogdanm 0:9b334a45a8ff 279 {
bogdanm 0:9b334a45a8ff 280 /** Ultra low frequency (1 kHz) clock */
bogdanm 0:9b334a45a8ff 281 case BURTC_CTRL_CLKSEL_ULFRCO:
bogdanm 0:9b334a45a8ff 282 if (_BURTC_CTRL_PRESC_DIV1 == clkDiv)
bogdanm 0:9b334a45a8ff 283 {
bogdanm 0:9b334a45a8ff 284 frequency = 2000; /* 2KHz when clock divisor is 1. */
bogdanm 0:9b334a45a8ff 285 }
bogdanm 0:9b334a45a8ff 286 else
bogdanm 0:9b334a45a8ff 287 {
bogdanm 0:9b334a45a8ff 288 frequency = SystemULFRCOClockGet(); /* 1KHz when divisor is different
bogdanm 0:9b334a45a8ff 289 from 1. */
bogdanm 0:9b334a45a8ff 290 }
bogdanm 0:9b334a45a8ff 291 break;
bogdanm 0:9b334a45a8ff 292
bogdanm 0:9b334a45a8ff 293 /** Low frequency RC oscillator */
bogdanm 0:9b334a45a8ff 294 case BURTC_CTRL_CLKSEL_LFRCO:
bogdanm 0:9b334a45a8ff 295 frequency = SystemLFRCOClockGet() / (1 << clkDiv); /* freq=32768/2^clkDiv */
bogdanm 0:9b334a45a8ff 296 break;
bogdanm 0:9b334a45a8ff 297
bogdanm 0:9b334a45a8ff 298 /** Low frequency crystal osciallator */
bogdanm 0:9b334a45a8ff 299 case BURTC_CTRL_CLKSEL_LFXO:
bogdanm 0:9b334a45a8ff 300 frequency = SystemLFXOClockGet() / (1 << clkDiv); /* freq=32768/2^clkDiv */
bogdanm 0:9b334a45a8ff 301 break;
bogdanm 0:9b334a45a8ff 302
bogdanm 0:9b334a45a8ff 303 default:
bogdanm 0:9b334a45a8ff 304 /* No clock selected for BURTC. */
bogdanm 0:9b334a45a8ff 305 frequency = 0;
bogdanm 0:9b334a45a8ff 306 }
bogdanm 0:9b334a45a8ff 307 return frequency;
bogdanm 0:9b334a45a8ff 308 }
bogdanm 0:9b334a45a8ff 309
bogdanm 0:9b334a45a8ff 310
bogdanm 0:9b334a45a8ff 311 /** @} (end addtogroup BURTC) */
bogdanm 0:9b334a45a8ff 312 /** @} (end addtogroup EM_Library) */
bogdanm 0:9b334a45a8ff 313
bogdanm 0:9b334a45a8ff 314 #endif /* BURTC_PRESENT */