34 #if defined(DAC_COUNT) && (DAC_COUNT > 0)
57 #define DAC_CH_VALID(ch) ((ch) <= 1)
60 #define DAC_MAX_CLOCK 1000000
81 void DAC_Enable(DAC_TypeDef *dac,
unsigned int ch,
bool enable)
83 volatile uint32_t *reg;
85 EFM_ASSERT(DAC_REF_VALID(dac));
86 EFM_ASSERT(DAC_CH_VALID(ch));
90 reg = &(dac->CH0CTRL);
94 reg = &(dac->CH1CTRL);
118 void DAC_Init(DAC_TypeDef *dac,
const DAC_Init_TypeDef *init)
122 EFM_ASSERT(DAC_REF_VALID(dac));
129 switch (init->reference)
144 tmp = ((uint32_t)(init->refresh) << _DAC_CTRL_REFRSEL_SHIFT)
145 | (((uint32_t)(init->prescale) << _DAC_CTRL_PRESC_SHIFT)
146 & _DAC_CTRL_PRESC_MASK)
147 | ((uint32_t)(init->reference) << _DAC_CTRL_REFSEL_SHIFT)
148 | ((uint32_t)(init->outMode) << _DAC_CTRL_OUTMODE_SHIFT)
149 | ((uint32_t)(init->convMode) << _DAC_CTRL_CONVMODE_SHIFT);
151 if (init->ch0ResetPre)
153 tmp |= DAC_CTRL_CH0PRESCRST;
156 if (init->outEnablePRS)
158 tmp |= DAC_CTRL_OUTENPRS;
161 if (init->sineEnable)
163 tmp |= DAC_CTRL_SINEMODE;
168 tmp |= DAC_CTRL_DIFF;
188 void DAC_InitChannel(DAC_TypeDef *dac,
189 const DAC_InitChannel_TypeDef *init,
194 EFM_ASSERT(DAC_REF_VALID(dac));
195 EFM_ASSERT(DAC_CH_VALID(ch));
197 tmp = (uint32_t)(init->prsSel) << _DAC_CH0CTRL_PRSSEL_SHIFT;
201 tmp |= DAC_CH0CTRL_EN;
206 tmp |= DAC_CH0CTRL_PRSEN;
209 if (init->refreshEnable)
211 tmp |= DAC_CH0CTRL_REFREN;
242 void DAC_ChannelOutputSet( DAC_TypeDef *dac,
243 unsigned int channel,
249 DAC_Channel0OutputSet(dac, value);
252 DAC_Channel1OutputSet(dac, value);
282 uint8_t DAC_PrescaleCalc(uint32_t dacFreq, uint32_t hfperFreq)
287 if (dacFreq > DAC_MAX_CLOCK)
289 dacFreq = DAC_MAX_CLOCK;
301 for (ret = 0; ret <= (_DAC_CTRL_PRESC_MASK >> _DAC_CTRL_PRESC_SHIFT); ret++)
303 if ((hfperFreq >> ret) <= dacFreq)
309 if (ret > (_DAC_CTRL_PRESC_MASK >> _DAC_CTRL_PRESC_SHIFT))
311 ret = _DAC_CTRL_PRESC_MASK >> _DAC_CTRL_PRESC_SHIFT;
325 void DAC_Reset(DAC_TypeDef *dac)
328 dac->CH0CTRL = _DAC_CH0CTRL_RESETVALUE;
329 dac->CH1CTRL = _DAC_CH1CTRL_RESETVALUE;
330 dac->CTRL = _DAC_CTRL_RESETVALUE;
331 dac->IEN = _DAC_IEN_RESETVALUE;
332 dac->IFC = _DAC_IFC_MASK;
334 dac->BIASPROG = _DAC_BIASPROG_RESETVALUE;
Clock management unit (CMU) API.
Emlib peripheral API "assert" implementation.
RAM and peripheral bit-field set and clear API.
Digital to Analog Converter (DAC) peripheral API.
__STATIC_INLINE void BUS_RegBitWrite(volatile uint32_t *addr, unsigned int bit, unsigned int val)
Perform a single-bit write operation on a peripheral register.
uint32_t CMU_ClockFreqGet(CMU_Clock_TypeDef clock)
Get clock frequency for a clock point.