em_letimer.h

Go to the documentation of this file.
00001 /***************************************************************************/
00034 #ifndef __SILICON_LABS_EM_LETIMER_H_
00035 #define __SILICON_LABS_EM_LETIMER_H_
00036 
00037 #include <stdbool.h>
00038 #include "em_device.h"
00039 #if defined(LETIMER_COUNT) && (LETIMER_COUNT > 0)
00040 
00041 #ifdef __cplusplus
00042 extern "C" {
00043 #endif
00044 
00045 /***************************************************************************/
00050 /***************************************************************************/
00055 /*******************************************************************************
00056  ********************************   ENUMS   ************************************
00057  ******************************************************************************/
00058 
00060 typedef enum
00061 {
00063   letimerRepeatFree     = _LETIMER_CTRL_REPMODE_FREE,
00065   letimerRepeatOneshot  = _LETIMER_CTRL_REPMODE_ONESHOT,
00070   letimerRepeatBuffered = _LETIMER_CTRL_REPMODE_BUFFERED,
00075   letimerRepeatDouble   = _LETIMER_CTRL_REPMODE_DOUBLE
00076 } LETIMER_RepeatMode_TypeDef;
00077 
00078 
00080 typedef enum
00081 {
00083   letimerUFOANone   = _LETIMER_CTRL_UFOA0_NONE,
00085   letimerUFOAToggle = _LETIMER_CTRL_UFOA0_TOGGLE,
00087   letimerUFOAPulse  = _LETIMER_CTRL_UFOA0_PULSE,
00089   letimerUFOAPwm    = _LETIMER_CTRL_UFOA0_PWM
00090 } LETIMER_UFOA_TypeDef;
00091 
00092 /*******************************************************************************
00093  *******************************   STRUCTS   ***********************************
00094  ******************************************************************************/
00095 
00097 typedef struct
00098 {
00099   bool                       enable;         
00100   bool                       debugRun;       
00101   bool                       rtcComp0Enable; 
00102   bool                       rtcComp1Enable; 
00103   bool                       comp0Top;       
00104   bool                       bufTop;         
00105   uint8_t                    out0Pol;        
00106   uint8_t                    out1Pol;        
00107   LETIMER_UFOA_TypeDef       ufoa0;          
00108   LETIMER_UFOA_TypeDef       ufoa1;          
00109   LETIMER_RepeatMode_TypeDef repMode;        
00110 } LETIMER_Init_TypeDef;
00111 
00113 #define LETIMER_INIT_DEFAULT                                                    \
00114   { true,               /* Enable timer when init complete. */                  \
00115     false,              /* Stop counter during debug halt. */                   \
00116     false,              /* Do not start counting on RTC COMP0 match. */         \
00117     false,              /* Do not start counting on RTC COMP1 match. */         \
00118     false,              /* Do not load COMP0 into CNT on underflow. */          \
00119     false,              /* Do not load COMP1 into COMP0 when REP0 reaches 0. */ \
00120     0,                  /* Idle value 0 for output 0. */                        \
00121     0,                  /* Idle value 0 for output 1. */                        \
00122     letimerUFOANone,    /* No action on underflow on output 0. */               \
00123     letimerUFOANone,    /* No action on underflow on output 1. */               \
00124     letimerRepeatFree   /* Count until stopped by SW. */                        \
00125   }
00126 
00127 
00128 /*******************************************************************************
00129  *****************************   PROTOTYPES   **********************************
00130  ******************************************************************************/
00131 
00132 uint32_t LETIMER_CompareGet(LETIMER_TypeDef *letimer, unsigned int comp);
00133 void LETIMER_CompareSet(LETIMER_TypeDef *letimer,
00134                         unsigned int comp,
00135                         uint32_t value);
00136 
00137 
00138 /***************************************************************************/
00148 __STATIC_INLINE uint32_t LETIMER_CounterGet(LETIMER_TypeDef *letimer)
00149 {
00150   return(letimer->CNT);
00151 }
00152 
00153 
00154 void LETIMER_Enable(LETIMER_TypeDef *letimer, bool enable);
00155 void LETIMER_FreezeEnable(LETIMER_TypeDef *letimer, bool enable);
00156 void LETIMER_Init(LETIMER_TypeDef *letimer, const LETIMER_Init_TypeDef *init);
00157 
00158 
00159 /***************************************************************************/
00171 __STATIC_INLINE void LETIMER_IntClear(LETIMER_TypeDef *letimer, uint32_t flags)
00172 {
00173   letimer->IFC = flags;
00174 }
00175 
00176 
00177 /***************************************************************************/
00188 __STATIC_INLINE void LETIMER_IntDisable(LETIMER_TypeDef *letimer, uint32_t flags)
00189 {
00190   letimer->IEN &= ~(flags);
00191 }
00192 
00193 
00194 /***************************************************************************/
00210 __STATIC_INLINE void LETIMER_IntEnable(LETIMER_TypeDef *letimer, uint32_t flags)
00211 {
00212   letimer->IEN |= flags;
00213 }
00214 
00215 
00216 /***************************************************************************/
00230 __STATIC_INLINE uint32_t LETIMER_IntGet(LETIMER_TypeDef *letimer)
00231 {
00232   return(letimer->IF);
00233 }
00234 
00235 
00236 /***************************************************************************/
00247 __STATIC_INLINE void LETIMER_IntSet(LETIMER_TypeDef *letimer, uint32_t flags)
00248 {
00249   letimer->IFS = flags;
00250 }
00251 
00252 uint32_t LETIMER_RepeatGet(LETIMER_TypeDef *letimer, unsigned int rep);
00253 void LETIMER_RepeatSet(LETIMER_TypeDef *letimer,
00254                        unsigned int rep,
00255                        uint32_t value);
00256 void LETIMER_Reset(LETIMER_TypeDef *letimer);
00257 
00258 
00262 #ifdef __cplusplus
00263 }
00264 #endif
00265 
00266 #endif /* defined(LETIMER_COUNT) && (LETIMER_COUNT > 0) */
00267 
00268 #endif /* __SILICON_LABS_EM_LETIMER_H_ */