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
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
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
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
00346
00347 tmp = VCMP->IEN;
00348
00349
00350 return VCMP->IF & tmp;
00351 }
00352
00356 #ifdef __cplusplus
00357 }
00358 #endif
00359
00360 #endif
00361 #endif