em_burtc.h
Go to the documentation of this file.00001
00034 #ifndef __EM_BURTC_H
00035 #define __EM_BURTC_H
00036
00037 #include <stdbool.h>
00038 #include "em_device.h"
00039
00040 #if defined(BURTC_PRESENT)
00041
00042 #include "em_assert.h"
00043 #include "em_bitband.h"
00044
00045 #ifdef __cplusplus
00046 extern "C" {
00047 #endif
00048
00049
00054
00059
00060
00061
00062
00064 #define burtcClkDiv_1 1
00065 #define burtcClkDiv_2 2
00066 #define burtcClkDiv_4 4
00067 #define burtcClkDiv_8 8
00068 #define burtcClkDiv_16 16
00069 #define burtcClkDiv_32 32
00070 #define burtcClkDiv_64 64
00071 #define burtcClkDiv_128 128
00073
00074
00075
00076
00078 typedef enum
00079 {
00081 burtcClkSelULFRCO = BURTC_CTRL_CLKSEL_ULFRCO,
00083 burtcClkSelLFRCO = BURTC_CTRL_CLKSEL_LFRCO,
00085 burtcClkSelLFXO = BURTC_CTRL_CLKSEL_LFXO
00086 } BURTC_ClkSel_TypeDef;
00087
00088
00090 typedef enum
00091 {
00093 burtcModeDisable = BURTC_CTRL_MODE_DISABLE,
00095 burtcModeEM2 = BURTC_CTRL_MODE_EM2EN,
00097 burtcModeEM3 = BURTC_CTRL_MODE_EM3EN,
00099 burtcModeEM4 = BURTC_CTRL_MODE_EM4EN,
00100 } BURTC_Mode_TypeDef;
00101
00103 typedef enum
00104 {
00106 burtcLPDisable = BURTC_LPMODE_LPMODE_DISABLE,
00108 burtcLPEnable = BURTC_LPMODE_LPMODE_ENABLE,
00110 burtcLPBU = BURTC_LPMODE_LPMODE_BUEN
00111 } BURTC_LP_TypeDef;
00112
00113
00114
00115
00116
00118 typedef struct
00119 {
00120 bool enable;
00122 BURTC_Mode_TypeDef mode;
00123 bool debugRun;
00124 BURTC_ClkSel_TypeDef clkSel;
00125 uint32_t clkDiv;
00127 uint32_t lowPowerComp;
00128 bool timeStamp;
00130 bool compare0Top;
00132 BURTC_LP_TypeDef lowPowerMode;
00133 } BURTC_Init_TypeDef;
00134
00136 #define BURTC_INIT_DEFAULT \
00137 { true, \
00138 burtcModeEM2, \
00139 false, \
00140 burtcClkSelULFRCO, \
00141 burtcClkDiv_1, \
00142 0, \
00143 true, \
00144 false, \
00145 burtcLPDisable, \
00146 }
00147
00148
00149
00150
00151
00152
00161 __STATIC_INLINE void BURTC_IntClear(uint32_t flags)
00162 {
00163 BURTC->IFC = flags;
00164 }
00165
00166
00167
00176 __STATIC_INLINE void BURTC_IntDisable(uint32_t flags)
00177 {
00178 BURTC->IEN &= ~(flags);
00179 }
00180
00181
00182
00196 __STATIC_INLINE void BURTC_IntEnable(uint32_t flags)
00197 {
00198 BURTC->IEN |= flags;
00199 }
00200
00201
00202
00213 __STATIC_INLINE uint32_t BURTC_IntGet(void)
00214 {
00215 return(BURTC->IF);
00216 }
00217
00218
00219
00231 __STATIC_INLINE uint32_t BURTC_IntGetEnabled(void)
00232 {
00233 uint32_t tmp;
00234
00235
00236 tmp = BURTC->IEN;
00237
00238
00239 return BURTC->IF & tmp;
00240 }
00241
00242
00243
00252 __STATIC_INLINE void BURTC_IntSet(uint32_t flags)
00253 {
00254 BURTC->IFS = flags;
00255 }
00256
00257
00258
00264 __STATIC_INLINE uint32_t BURTC_Status(void)
00265 {
00266 return BURTC->STATUS;
00267 }
00268
00269
00270
00274 __STATIC_INLINE void BURTC_StatusClear(void)
00275 {
00276 BURTC->CMD = BURTC_CMD_CLRSTATUS;
00277 }
00278
00279
00280
00286 __STATIC_INLINE void BURTC_Enable(bool enable)
00287 {
00288
00289 EFM_ASSERT(((enable == true) && ((BURTC->CTRL & _BURTC_CTRL_MODE_MASK) != BURTC_CTRL_MODE_DISABLE))
00290 || (enable == false));
00291 if (enable)
00292 {
00293 BITBAND_Peripheral(&BURTC->CTRL, _BURTC_CTRL_RSTEN_SHIFT, 0);
00294 }
00295 else
00296 {
00297 BITBAND_Peripheral(&BURTC->CTRL, _BURTC_CTRL_RSTEN_SHIFT, 1);
00298 }
00299 }
00300
00301
00302
00308 __STATIC_INLINE uint32_t BURTC_CounterGet(void)
00309 {
00310 return BURTC->CNT;
00311 }
00312
00313
00314
00320 __STATIC_INLINE uint32_t BURTC_TimestampGet(void)
00321 {
00322 return BURTC->TIMESTAMP;
00323 }
00324
00325
00326
00330 __STATIC_INLINE void BURTC_FreezeEnable(bool enable)
00331 {
00332 BITBAND_Peripheral(&BURTC->FREEZE, _BURTC_FREEZE_REGFREEZE_SHIFT, enable);
00333 }
00334
00335
00336
00344 __STATIC_INLINE void BURTC_Powerdown(bool enable)
00345 {
00346 BITBAND_Peripheral(&BURTC->POWERDOWN, _BURTC_POWERDOWN_RAM_SHIFT, enable);
00347 }
00348
00349
00350
00359 __STATIC_INLINE void BURTC_RetRegSet(uint32_t num, uint32_t data)
00360 {
00361 EFM_ASSERT(num <= 127);
00362
00363 BURTC->RET[num].REG = data;
00364 }
00365
00366
00367
00374 __STATIC_INLINE uint32_t BURTC_RetRegGet(uint32_t num)
00375 {
00376 EFM_ASSERT(num <= 127);
00377
00378 return BURTC->RET[num].REG;
00379 }
00380
00381
00382
00386 __STATIC_INLINE void BURTC_Lock(void)
00387 {
00388 BURTC->LOCK = BURTC_LOCK_LOCKKEY_LOCK;
00389 }
00390
00391
00392
00396 __STATIC_INLINE void BURTC_Unlock(void)
00397 {
00398 BURTC->LOCK = BURTC_LOCK_LOCKKEY_UNLOCK;
00399 }
00400
00401
00402 void BURTC_Reset(void);
00403 void BURTC_Init(const BURTC_Init_TypeDef *burtcInit);
00404 void BURTC_CounterReset(void);
00405 void BURTC_CompareSet(unsigned int comp, uint32_t value);
00406 uint32_t BURTC_CompareGet(unsigned int comp);
00407 uint32_t BURTC_ClockFreqGet(void);
00408
00409
00413 #ifdef __cplusplus
00414 }
00415 #endif
00416
00417 #endif
00418
00419 #endif