DAC - Digital to Analog Converter

Description

Digital to Analog Converter (DAC) Peripheral API.

This module contains functions to control the DAC peripheral of Silicon Labs 32-bit MCUs and SoCs. The DAC converts digital values to analog signals at up to 500 ksps with 12-bit accuracy. The DAC is designed for low-energy consumption and can also provide very good performance.

Data Structures

struct DAC_Init_TypeDef
DAC initialization structure, common for both channels.
struct DAC_InitChannel_TypeDef
DAC channel initialization structure.

Functions

void DAC_Enable (DAC_TypeDef *dac, unsigned int ch, bool enable)
Enable/disable the DAC channel.
void DAC_Init (DAC_TypeDef *dac, const DAC_Init_TypeDef *init)
Initialize DAC.
void DAC_InitChannel (DAC_TypeDef *dac, const DAC_InitChannel_TypeDef *init, unsigned int ch)
Initialize DAC channel.
void DAC_ChannelOutputSet (DAC_TypeDef *dac, unsigned int channel, uint32_t value)
Set the output signal of a DAC channel to a given value.
void DAC_Channel0OutputSet (DAC_TypeDef *dac, uint32_t value)
Set the output signal of DAC channel 0 to a given value.
void DAC_Channel1OutputSet (DAC_TypeDef *dac, uint32_t value)
Set the output signal of DAC channel 1 to a given value.
void DAC_IntClear (DAC_TypeDef *dac, uint32_t flags)
Clear one or more pending DAC interrupts.
void DAC_IntDisable (DAC_TypeDef *dac, uint32_t flags)
Disable one or more DAC interrupts.
void DAC_IntEnable (DAC_TypeDef *dac, uint32_t flags)
Enable one or more DAC interrupts.
uint32_t DAC_IntGet (DAC_TypeDef *dac)
Get pending DAC interrupt flags.
uint32_t DAC_IntGetEnabled (DAC_TypeDef *dac)
Get enabled and pending DAC interrupt flags.
void DAC_IntSet (DAC_TypeDef *dac, uint32_t flags)
Set one or more pending DAC interrupts from SW.
uint8_t DAC_PrescaleCalc (uint32_t dacFreq, uint32_t hfperFreq)
Calculate prescaler value used to determine the DAC clock.
void DAC_Reset (DAC_TypeDef *dac)
Reset DAC to the same state that it was in after a hardware reset.

Macros

#define DAC_INIT_DEFAULT
Default configuration for DAC initialization structure.
#define DAC_INITCHANNEL_DEFAULT
Default configuration for DAC channel initialization structure.

Enumerations

enum DAC_ConvMode_TypeDef {
dacConvModeContinuous = _DAC_CTRL_CONVMODE_CONTINUOUS,
dacConvModeSampleHold = _DAC_CTRL_CONVMODE_SAMPLEHOLD,
dacConvModeSampleOff = _DAC_CTRL_CONVMODE_SAMPLEOFF
}
Conversion mode.
enum DAC_Output_TypeDef {
dacOutputDisable = _DAC_CTRL_OUTMODE_DISABLE,
dacOutputPin = _DAC_CTRL_OUTMODE_PIN,
dacOutputADC = _DAC_CTRL_OUTMODE_ADC,
dacOutputPinADC = _DAC_CTRL_OUTMODE_PINADC
}
Output mode.
enum DAC_PRSSEL_TypeDef {
dacPRSSELCh0 = _DAC_CH0CTRL_PRSSEL_PRSCH0,
dacPRSSELCh1 = _DAC_CH0CTRL_PRSSEL_PRSCH1,
dacPRSSELCh2 = _DAC_CH0CTRL_PRSSEL_PRSCH2,
dacPRSSELCh3 = _DAC_CH0CTRL_PRSSEL_PRSCH3,
dacPRSSELCh4 = _DAC_CH0CTRL_PRSSEL_PRSCH4,
dacPRSSELCh5 = _DAC_CH0CTRL_PRSSEL_PRSCH5,
dacPRSSELCh6 = _DAC_CH0CTRL_PRSSEL_PRSCH6,
dacPRSSELCh7 = _DAC_CH0CTRL_PRSSEL_PRSCH7,
dacPRSSELCh8 = _DAC_CH0CTRL_PRSSEL_PRSCH8,
dacPRSSELCh9 = _DAC_CH0CTRL_PRSSEL_PRSCH9,
dacPRSSELCh10 = _DAC_CH0CTRL_PRSSEL_PRSCH10,
dacPRSSELCh11 = _DAC_CH0CTRL_PRSSEL_PRSCH11
}
Peripheral Reflex System signal used to trigger single sample.
enum DAC_Ref_TypeDef {
dacRef1V25 = _DAC_CTRL_REFSEL_1V25,
dacRef2V5 = _DAC_CTRL_REFSEL_2V5,
dacRefVDD = _DAC_CTRL_REFSEL_VDD
}
Reference voltage for DAC.
enum DAC_Refresh_TypeDef {
dacRefresh8 = _DAC_CTRL_REFRSEL_8CYCLES,
dacRefresh16 = _DAC_CTRL_REFRSEL_16CYCLES,
dacRefresh32 = _DAC_CTRL_REFRSEL_32CYCLES,
dacRefresh64 = _DAC_CTRL_REFRSEL_64CYCLES
}
Refresh interval.

Function Documentation

DAC_Enable()

void DAC_Enable ( DAC_TypeDef * dac,
unsigned int ch,
bool enable
)

Enable/disable the DAC channel.

Parameters
[in] dac A pointer to the DAC peripheral register block.
[in] ch A channel to enable/disable.
[in] enable true to enable DAC channel, false to disable.

DAC_Init()

void DAC_Init ( DAC_TypeDef * dac,
const DAC_Init_TypeDef * init
)

Initialize DAC.

Initializes common parts for both channels. In addition, channel control configuration must be done. See DAC_InitChannel() .

Note
This function will disable both channels prior to configuration.
Parameters
[in] dac A pointer to the DAC peripheral register block.
[in] init A pointer to the DAC initialization structure.

DAC_InitChannel()

void DAC_InitChannel ( DAC_TypeDef * dac,
const DAC_InitChannel_TypeDef * init,
unsigned int ch
)

Initialize DAC channel.

Parameters
[in] dac A pointer to the DAC peripheral register block.
[in] init A pointer to the DAC initialization structure.
[in] ch A channel number to initialize.

DAC_ChannelOutputSet()

void DAC_ChannelOutputSet ( DAC_TypeDef * dac,
unsigned int channel,
uint32_t value
)

Set the output signal of a DAC channel to a given value.

This function sets the output signal of a DAC channel by writing value to the corresponding CHnDATA register.

Parameters
[in] dac A pointer to the DAC peripheral register block.
[in] channel A channel number to set the output.
[in] value A value to write to the channel output register CHnDATA.

DAC_Channel0OutputSet()

void DAC_Channel0OutputSet ( DAC_TypeDef * dac,
uint32_t value
)
inline

Set the output signal of DAC channel 0 to a given value.

This function sets the output signal of DAC channel 0 by writing value to the CH0DATA register.

Parameters
[in] dac Pointer to DAC peripheral register block.
[in] value Value to write to the channel 0 output register CH0DATA.

DAC_Channel1OutputSet()

void DAC_Channel1OutputSet ( DAC_TypeDef * dac,
uint32_t value
)
inline

Set the output signal of DAC channel 1 to a given value.

Sets the output signal of DAC channel 1 by writing value to the CH1DATA register.

Parameters
[in] dac Pointer to DAC peripheral register block.
[in] value Value to write to the channel 1 output register CH1DATA.

DAC_IntClear()

void DAC_IntClear ( DAC_TypeDef * dac,
uint32_t flags
)
inline

Clear one or more pending DAC interrupts.

Parameters
[in] dac Pointer to DAC peripheral register block.
[in] flags Pending DAC interrupt source to clear. Use a bitwise logic OR combination of valid interrupt flags for the DAC module (DAC_IF_nnn).

DAC_IntDisable()

void DAC_IntDisable ( DAC_TypeDef * dac,
uint32_t flags
)
inline

Disable one or more DAC interrupts.

Parameters
[in] dac Pointer to DAC peripheral register block.
[in] flags DAC interrupt sources to disable. Use a bitwise logic OR combination of valid interrupt flags for the DAC module (DAC_IF_nnn).

DAC_IntEnable()

void DAC_IntEnable ( DAC_TypeDef * dac,
uint32_t flags
)
inline

Enable one or more DAC interrupts.

Note
Depending on the use, a pending interrupt may already be set prior to enabling the interrupt. To ignore a pending interrupt, consider using DAC_IntClear() prior to enabling the interrupt.
Parameters
[in] dac Pointer to DAC peripheral register block.
[in] flags DAC interrupt sources to enable. Use a bitwise logic OR combination of valid interrupt flags for the DAC module (DAC_IF_nnn).

DAC_IntGet()

uint32_t DAC_IntGet ( DAC_TypeDef * dac )
inline

Get pending DAC interrupt flags.

Note
Event bits are not cleared by the use of this function.
Parameters
[in] dac Pointer to DAC peripheral register block.
Returns
DAC interrupt sources pending. A bitwise logic OR combination of valid interrupt flags for the DAC module (DAC_IF_nnn).

DAC_IntGetEnabled()

uint32_t DAC_IntGetEnabled ( DAC_TypeDef * dac )
inline

Get enabled and pending DAC interrupt flags.

Useful for handling more interrupt sources in the same interrupt handler.

Parameters
[in] dac Pointer to DAC peripheral register block.
Note
Interrupt flags are not cleared by the use of this function.
Returns
Pending and enabled DAC interrupt sources. Return value is the bitwise AND combination of
  • the OR combination of enabled interrupt sources in DACx_IEN_nnn register (DACx_IEN_nnn) and
  • the OR combination of valid interrupt flags of the DAC module (DACx_IF_nnn).

DAC_IntSet()

void DAC_IntSet ( DAC_TypeDef * dac,
uint32_t flags
)
inline

Set one or more pending DAC interrupts from SW.

Parameters
[in] dac Pointer to DAC peripheral register block.
[in] flags DAC interrupt sources to set to pending. Use a bitwise logic OR combination of valid interrupt flags for the DAC module (DAC_IF_nnn).

DAC_PrescaleCalc()

uint8_t DAC_PrescaleCalc ( uint32_t dacFreq,
uint32_t hfperFreq
)