em_dac.h
Go to the documentation of this file.00001
00034 #ifndef __EM_DAC_H
00035 #define __EM_DAC_H
00036
00037 #include "em_device.h"
00038 #include "em_assert.h"
00039
00040 #if defined(DAC_COUNT) && (DAC_COUNT > 0)
00041
00042 #include <stdbool.h>
00043
00044 #ifdef __cplusplus
00045 extern "C" {
00046 #endif
00047
00048
00049
00054
00062 #define DAC_REF_VALID(ref) ((ref) == DAC0)
00063
00066
00067
00068
00069
00071 typedef enum
00072 {
00073 dacConvModeContinuous = _DAC_CTRL_CONVMODE_CONTINUOUS,
00074 dacConvModeSampleHold = _DAC_CTRL_CONVMODE_SAMPLEHOLD,
00075 dacConvModeSampleOff = _DAC_CTRL_CONVMODE_SAMPLEOFF
00076 } DAC_ConvMode_TypeDef;
00077
00079 typedef enum
00080 {
00081 dacOutputDisable = _DAC_CTRL_OUTMODE_DISABLE,
00082 dacOutputPin = _DAC_CTRL_OUTMODE_PIN,
00083 dacOutputADC = _DAC_CTRL_OUTMODE_ADC,
00084 dacOutputPinADC = _DAC_CTRL_OUTMODE_PINADC
00085 } DAC_Output_TypeDef;
00086
00087
00089 typedef enum
00090 {
00091 dacPRSSELCh0 = _DAC_CH0CTRL_PRSSEL_PRSCH0,
00092 dacPRSSELCh1 = _DAC_CH0CTRL_PRSSEL_PRSCH1,
00093 dacPRSSELCh2 = _DAC_CH0CTRL_PRSSEL_PRSCH2,
00094 dacPRSSELCh3 = _DAC_CH0CTRL_PRSSEL_PRSCH3,
00095 dacPRSSELCh4 = _DAC_CH0CTRL_PRSSEL_PRSCH4,
00096 dacPRSSELCh5 = _DAC_CH0CTRL_PRSSEL_PRSCH5,
00097 dacPRSSELCh6 = _DAC_CH0CTRL_PRSSEL_PRSCH6,
00098 dacPRSSELCh7 = _DAC_CH0CTRL_PRSSEL_PRSCH7
00099 } DAC_PRSSEL_TypeDef;
00100
00101
00103 typedef enum
00104 {
00105 dacRef1V25 = _DAC_CTRL_REFSEL_1V25,
00106 dacRef2V5 = _DAC_CTRL_REFSEL_2V5,
00107 dacRefVDD = _DAC_CTRL_REFSEL_VDD
00108 } DAC_Ref_TypeDef;
00109
00110
00112 typedef enum
00113 {
00114 dacRefresh8 = _DAC_CTRL_REFRSEL_8CYCLES,
00115 dacRefresh16 = _DAC_CTRL_REFRSEL_16CYCLES,
00116 dacRefresh32 = _DAC_CTRL_REFRSEL_32CYCLES,
00117 dacRefresh64 = _DAC_CTRL_REFRSEL_64CYCLES
00118 } DAC_Refresh_TypeDef;
00119
00120
00121
00122
00123
00124
00126 typedef struct
00127 {
00129 DAC_Refresh_TypeDef refresh;
00130
00132 DAC_Ref_TypeDef reference;
00133
00135 DAC_Output_TypeDef outMode;
00136
00138 DAC_ConvMode_TypeDef convMode;
00139
00144 uint8_t prescale;
00145
00147 bool lpEnable;
00148
00150 bool ch0ResetPre;
00151
00153 bool outEnablePRS;
00154
00156 bool sineEnable;
00157
00159 bool diff;
00160 } DAC_Init_TypeDef;
00161
00163 #define DAC_INIT_DEFAULT \
00164 { dacRefresh8, \
00165 dacRef1V25, \
00166 dacOutputPin, \
00167 dacConvModeContinuous, \
00168 0, \
00169 false, \
00170 false, \
00171 false, \
00172 false, \
00173 false \
00174 }
00175
00176
00178 typedef struct
00179 {
00181 bool enable;
00182
00187 bool prsEnable;
00188
00193 bool refreshEnable;
00194
00199 DAC_PRSSEL_TypeDef prsSel;
00200 } DAC_InitChannel_TypeDef;
00201
00203 #define DAC_INITCHANNEL_DEFAULT \
00204 { false, \
00205 false, \
00206 false, \
00207 dacPRSSELCh0 \
00208 }
00209
00210
00211
00212
00213
00214
00215 void DAC_Enable(DAC_TypeDef *dac, unsigned int ch, bool enable);
00216 void DAC_Init(DAC_TypeDef *dac, const DAC_Init_TypeDef *init);
00217 void DAC_InitChannel(DAC_TypeDef *dac,
00218 const DAC_InitChannel_TypeDef *init,
00219 unsigned int ch);
00220 void DAC_ChannelOutputSet(DAC_TypeDef *dac,
00221 unsigned int channel,
00222 uint32_t value);
00223
00224
00238 __STATIC_INLINE void DAC_Channel0OutputSet( DAC_TypeDef *dac,
00239 uint32_t value )
00240 {
00241 EFM_ASSERT(value<=_DAC_CH0DATA_MASK);
00242 dac->CH0DATA = value;
00243 }
00244
00245
00246
00260 __STATIC_INLINE void DAC_Channel1OutputSet( DAC_TypeDef *dac,
00261 uint32_t value )
00262 {
00263 EFM_ASSERT(value<=_DAC_CH1DATA_MASK);
00264 dac->CH1DATA = value;
00265 }
00266
00267
00268
00279 __STATIC_INLINE void DAC_IntClear(DAC_TypeDef *dac, uint32_t flags)
00280 {
00281 dac->IFC = flags;
00282 }
00283
00284
00285
00296 __STATIC_INLINE void DAC_IntDisable(DAC_TypeDef *dac, uint32_t flags)
00297 {
00298 dac->IEN &= ~(flags);
00299 }
00300
00301
00302
00318 __STATIC_INLINE void DAC_IntEnable(DAC_TypeDef *dac, uint32_t flags)
00319 {
00320 dac->IEN |= flags;
00321 }
00322
00323
00324
00338 __STATIC_INLINE uint32_t DAC_IntGet(DAC_TypeDef *dac)
00339 {
00340 return(dac->IF);
00341 }
00342
00343
00344
00355 __STATIC_INLINE void DAC_IntSet(DAC_TypeDef *dac, uint32_t flags)
00356 {
00357 dac->IFS = flags;
00358 }
00359
00360 uint8_t DAC_PrescaleCalc(uint32_t dacFreq, uint32_t hfperFreq);
00361 void DAC_Reset(DAC_TypeDef *dac);
00362
00366 #ifdef __cplusplus
00367 }
00368 #endif
00369
00370 #endif
00371
00372 #endif