35 #if defined(BURTC_PRESENT)
63 __STATIC_INLINE uint32_t divToLog2(uint32_t div)
68 EFM_ASSERT((div > 0) && (div <= 32768));
71 log2 = (31 - __CLZ(div));
85 __STATIC_INLINE
void regSync(uint32_t mask)
90 if ((BURTC->FREEZE & BURTC_FREEZE_REGFREEZE)
91 || ((BURTC->CTRL & _BURTC_CTRL_CLKSEL_MASK) != _BURTC_CTRL_CLKSEL_NONE))
97 while (BURTC->SYNCBUSY & mask)
125 void BURTC_Init(
const BURTC_Init_TypeDef *burtcInit)
131 EFM_ASSERT(burtcInit != (BURTC_Init_TypeDef *) 0);
133 EFM_ASSERT((burtcInit->clkDiv >= 1) && (burtcInit->clkDiv <= 128));
136 EFM_ASSERT(burtcInit->lowPowerComp <= 6);
138 EFM_ASSERT((burtcInit->enable ==
false) ||
139 ((burtcInit->enable ==
true)
140 && (burtcInit->mode != burtcModeDisable)));
142 EFM_ASSERT((burtcInit->clkSel != burtcClkSelULFRCO)
143 || ((burtcInit->clkSel == burtcClkSelULFRCO)
144 && (burtcInit->lowPowerMode == burtcLPDisable)));
150 presc = divToLog2(burtcInit->clkDiv);
153 if (burtcInit->enable)
155 BURTC_FreezeEnable(
true);
160 regSync(BURTC_SYNCBUSY_LPMODE);
163 BURTC->LPMODE = (uint32_t) (burtcInit->lowPowerMode);
166 ctrl = (BURTC_CTRL_RSTEN
168 | (burtcInit->debugRun << _BURTC_CTRL_DEBUGRUN_SHIFT)
169 | (burtcInit->compare0Top << _BURTC_CTRL_COMP0TOP_SHIFT)
170 | (burtcInit->lowPowerComp << _BURTC_CTRL_LPCOMP_SHIFT)
171 | (presc << _BURTC_CTRL_PRESC_SHIFT)
172 | (burtcInit->clkSel)
173 | (burtcInit->timeStamp << _BURTC_CTRL_BUMODETSEN_SHIFT));
176 BURTC_IntClear(0xFFFFFFFF);
182 if (burtcInit->enable)
188 BURTC_FreezeEnable(
false);
200 void BURTC_CompareSet(
unsigned int comp, uint32_t value)
204 EFM_ASSERT(comp == 0);
208 regSync(BURTC_SYNCBUSY_COMP0);
211 BURTC->COMP0 = value;
222 uint32_t BURTC_CompareGet(
unsigned int comp)
226 EFM_ASSERT(comp == 0);
235 void BURTC_CounterReset(
void)
251 void BURTC_Reset(
void)
269 uint32_t BURTC_ClockFreqGet(
void)
275 clkSel = BURTC->CTRL & _BURTC_CTRL_CLKSEL_MASK;
276 clkDiv = (BURTC->CTRL & _BURTC_CTRL_PRESC_MASK) >> _BURTC_CTRL_PRESC_SHIFT;
281 case BURTC_CTRL_CLKSEL_ULFRCO:
282 if (_BURTC_CTRL_PRESC_DIV1 == clkDiv)
294 case BURTC_CTRL_CLKSEL_LFRCO:
299 case BURTC_CTRL_CLKSEL_LFXO:
__STATIC_INLINE unsigned int BUS_RegBitRead(volatile const uint32_t *addr, unsigned int bit)
Perform a single-bit read operation on a peripheral register.
uint32_t SystemULFRCOClockGet(void)
Get ultra low frequency RC oscillator clock frequency for target system.
Backup Real Time Counter (BURTC) peripheral API.
uint32_t SystemLFXOClockGet(void)
Get low frequency crystal oscillator clock frequency for target system.
__STATIC_INLINE void BUS_RegBitWrite(volatile uint32_t *addr, unsigned int bit, unsigned int val)
Perform a single-bit write operation on a peripheral register.
uint32_t SystemLFRCOClockGet(void)
Get low frequency RC oscillator clock frequency for target system.