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  *******************************   DEFINES   ***********************************
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  ********************************   ENUMS   ************************************
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  *******************************   STRUCTS   ***********************************
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  *****************************   PROTOTYPES   **********************************
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   /* Get enabled interrupts */
00236   tmp = BURTC->IEN;
00237 
00238   /* Return set intterupts */
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   /* Note! If mode is disabled, BURTC counter will not start */
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 /* BURTC_PRESENT */
00418 
00419 #endif /* __EM_BURTC_H */