em_vcmp.h

Go to the documentation of this file.
00001 /***************************************************************************/
00034 #ifndef __EM_VCMP_H
00035 #define __EM_VCMP_H
00036 
00037 #include "em_device.h"
00038 #if defined(VCMP_COUNT) && (VCMP_COUNT > 0)
00039 
00040 #include <stdint.h>
00041 #include <stdbool.h>
00042 
00043 #ifdef __cplusplus
00044 extern "C" {
00045 #endif
00046 
00047 /***************************************************************************/
00052 /***************************************************************************/
00057 /*******************************************************************************
00058  ********************************   ENUMS   ************************************
00059  ******************************************************************************/
00060 
00062 typedef enum
00063 {
00065   vcmpWarmTime4Cycles   = _VCMP_CTRL_WARMTIME_4CYCLES,
00067   vcmpWarmTime8Cycles   = _VCMP_CTRL_WARMTIME_8CYCLES,
00069   vcmpWarmTime16Cycles  = _VCMP_CTRL_WARMTIME_16CYCLES,
00071   vcmpWarmTime32Cycles  = _VCMP_CTRL_WARMTIME_32CYCLES,
00073   vcmpWarmTime64Cycles  = _VCMP_CTRL_WARMTIME_64CYCLES,
00075   vcmpWarmTime128Cycles = _VCMP_CTRL_WARMTIME_128CYCLES,
00077   vcmpWarmTime256Cycles = _VCMP_CTRL_WARMTIME_256CYCLES,
00079   vcmpWarmTime512Cycles = _VCMP_CTRL_WARMTIME_512CYCLES
00080 } VCMP_WarmTime_TypeDef;
00081 
00083 typedef enum
00084 {
00086   vcmpHystNone,
00089   vcmpHyst20mV
00090 } VCMP_Hysteresis_TypeDef;
00091 
00092 /*******************************************************************************
00093  *******************************   STRUCTS   ***********************************
00094  ******************************************************************************/
00095 
00097 typedef struct
00098 {
00100   bool                    halfBias;
00103   int                     biasProg;
00105   bool                    irqFalling;
00107   bool                    irqRising;
00109   VCMP_WarmTime_TypeDef   warmup;
00111   VCMP_Hysteresis_TypeDef hyst;
00113   int                     inactive;
00115   bool                    lowPowerRef;
00118   int                     triggerLevel;
00120   bool                    enable;
00121 } VCMP_Init_TypeDef;
00122 
00124 #define VCMP_INIT_DEFAULT                                                  \
00125   { true,                                          \
00126     0x7,                  \
00127     false,                            \
00128     false,                             \
00129     vcmpWarmTime4Cycles,                 \
00130     vcmpHystNone,                                      \
00131     0,                              \
00132     true,                             \
00133     39,                                  \
00134     true,                                          \
00135   }
00136 
00137 /*******************************************************************************
00138  *****************************   PROTOTYPES   **********************************
00139  ******************************************************************************/
00140 void VCMP_Init(const VCMP_Init_TypeDef *vcmpInit);
00141 void VCMP_LowPowerRefSet(bool enable);
00142 void VCMP_TriggerSet(int level);
00143 
00144 __STATIC_INLINE void VCMP_Enable(void);
00145 __STATIC_INLINE void VCMP_Disable(void);
00146 __STATIC_INLINE uint32_t VCMP_VoltageToLevel(float v);
00147 __STATIC_INLINE bool VCMP_VDDLower(void);
00148 __STATIC_INLINE bool VCMP_VDDHigher(void);
00149 __STATIC_INLINE bool VCMP_Ready(void);
00150 __STATIC_INLINE void VCMP_IntClear(uint32_t flags);
00151 __STATIC_INLINE void VCMP_IntSet(uint32_t flags);
00152 __STATIC_INLINE void VCMP_IntDisable(uint32_t flags);
00153 __STATIC_INLINE void VCMP_IntEnable(uint32_t flags);
00154 __STATIC_INLINE uint32_t VCMP_IntGet(void);
00155 __STATIC_INLINE uint32_t VCMP_IntGetEnabled(void);
00156 
00157 /***************************************************************************/
00161 __STATIC_INLINE void VCMP_Enable(void)
00162 {
00163   VCMP->CTRL |= VCMP_CTRL_EN;
00164 }
00165 
00166 
00167 /***************************************************************************/
00171 __STATIC_INLINE void VCMP_Disable(void)
00172 {
00173   VCMP->CTRL &= ~(VCMP_CTRL_EN);
00174 }
00175 
00176 
00177 /***************************************************************************/
00187 __STATIC_INLINE uint32_t VCMP_VoltageToLevel(float v)
00188 {
00189   return (uint32_t)((v - (float)1.667) / (float)0.034);
00190 }
00191 
00192 
00193 /***************************************************************************/
00198 __STATIC_INLINE bool VCMP_VDDLower(void)
00199 {
00200   if (VCMP->STATUS & VCMP_STATUS_VCMPOUT)
00201   {
00202     return false;
00203   }
00204   else
00205   {
00206     return true;
00207   }
00208 }
00209 
00210 
00211 /***************************************************************************/
00216 __STATIC_INLINE bool VCMP_VDDHigher(void)
00217 {
00218   if (VCMP->STATUS & VCMP_STATUS_VCMPOUT)
00219   {
00220     return true;
00221   }
00222   else
00223   {
00224     return false;
00225   }
00226 }
00227 
00228 
00229 /***************************************************************************/
00233 __STATIC_INLINE bool VCMP_Ready(void)
00234 {
00235   if (VCMP->STATUS & VCMP_STATUS_VCMPACT)
00236   {
00237     return true;
00238   }
00239   else
00240   {
00241     return false;
00242   }
00243 }
00244 
00245 
00246 /***************************************************************************/
00255 __STATIC_INLINE void VCMP_IntClear(uint32_t flags)
00256 {
00257   VCMP->IFC = flags;
00258 }
00259 
00260 
00261 /***************************************************************************/
00270 __STATIC_INLINE void VCMP_IntSet(uint32_t flags)
00271 {
00272   VCMP->IFS = flags;
00273 }
00274 
00275 
00276 /***************************************************************************/
00285 __STATIC_INLINE void VCMP_IntDisable(uint32_t flags)
00286 {
00287   VCMP->IEN &= ~(flags);
00288 }
00289 
00290 
00291 /***************************************************************************/
00300 __STATIC_INLINE void VCMP_IntEnable(uint32_t flags)
00301 {
00302   VCMP->IEN |= flags;
00303 }
00304 
00305 
00306 /***************************************************************************/
00317 __STATIC_INLINE uint32_t VCMP_IntGet(void)
00318 {
00319   return(VCMP->IF);
00320 }
00321 
00322 
00323 /***************************************************************************/
00341 __STATIC_INLINE uint32_t VCMP_IntGetEnabled(void)
00342 {
00343   uint32_t tmp = 0U;
00344 
00345   /* Store VCMP->IEN in temporary variable in order to define explicit order
00346    * of volatile accesses. */
00347   tmp = VCMP->IEN;
00348 
00349   /* Bitwise AND of pending and enabled interrupts */
00350   return VCMP->IF & tmp;
00351 }
00352 
00356 #ifdef __cplusplus
00357 }
00358 #endif
00359 
00360 #endif /* defined(VCMP_COUNT) && (VCMP_COUNT > 0) */
00361 #endif /* __EM_VCMP_H */