added prescaler for 16 bit pwm in LPC1347 target

Fork of mbed-dev by mbed official

Committer:
<>
Date:
Fri Sep 02 15:07:44 2016 +0100
Revision:
144:ef7eb2e8f9f7
Parent:
50:a417edff4437
This updates the lib to the mbed lib v125

Who changed what in which revision?

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