VDAC - Voltage DAC#
Digital to Analog Voltage Converter (VDAC) Peripheral API.
This module contains functions to control the VDAC peripheral of Silicon Labs' 32-bit MCUs and SoCs. VDAC converts digital values to analog signals at up to 500 ksps with 12-bit accuracy. VDAC is designed for low energy consumption, but can also provide very good performance.
The following steps are necessary for basic operation:
Clock enable:
CMU_ClockEnable(cmuClock_VDAC0, true);
Initialize the VDAC with default settings and modify selected fields:
VDAC_Init_TypeDef vdacInit = VDAC_INIT_DEFAULT;
VDAC_InitChannel_TypeDef vdacChInit = VDAC_INITCHANNEL_DEFAULT;
// Set prescaler to get 1 MHz VDAC clock frequency.
vdacInit.prescaler = VDAC_PrescaleCalc(1000000, true, 0); // function call for series 0/1
VDAC_Init(VDAC0, &vdacInit);
vdacChInit.enable = true;
VDAC_InitChannel(VDAC0, &vdacChInit, 0);
Perform a conversion:
VDAC_ChannelOutputSet(VDAC0, 0, 250);
Note
The output stage of a VDAC channel consists of an on-chip operational amplifier (OPAMP) in the OPAMP module. This OPAMP is highly configurable; and to exploit the VDAC functionality fully, configure the OPAMP using the OPAMP API. Using the OPAMP API also loads OPAMP calibration values. The default (reset) settings of OPAMP is sufficient for many applications.
Modules#
Enumerations#
Channel refresh period.
Timer overflow period.
Reference voltage for VDAC.
Refresh source for VDAC.
Channel conversion trigger mode.
Channel power mode.
VDAC channel Abus port selection.
Functions#
Enable/disable the VDAC channel.
Initialize VDAC.
Initialize a VDAC channel.
Set the output signal of a VDAC channel to a given value.
Calculate the prescaler value used to determine VDAC clock.
Reset VDAC to same state that it was in after a hardwares reset.
Start/stop Sinemode.
Set the output signal of VDAC channel 0 to a given value.
Set the output signal of VDAC channel 1 to a given value.
Clear one or more pending VDAC interrupts.
Disable one or more VDAC interrupts.
Enable one or more VDAC interrupts.
Get pending VDAC interrupt flags.
Get enabled and pending VDAC interrupt flags.
Set one or more pending VDAC interrupts from SW.
Get the VDAC Status register.
Macros#
Default configuration for VDAC initialization structure.
Sine mode configuration for VDAC initialization structure.
Default configuration for VDAC channel initialization structure.
Enumeration Documentation#
VDAC_Refresh_TypeDef#
VDAC_Refresh_TypeDef
Channel refresh period.
Enumerator | |
---|---|
vdacRefresh2 | Refresh every 2 clock cycles. |
vdacRefresh4 | Refresh every 4 clock cycles. |
vdacRefresh8 | Refresh every 8 clock cycles. |
vdacRefresh16 | Refresh every 16 clock cycles. |
vdacRefresh32 | Refresh every 32 clock cycles. |
vdacRefresh64 | Refresh every 64 clock cycles. |
vdacRefresh128 | Refresh every 128 clock cycles. |
vdacRefresh256 | Refresh every 256 clock cycles. |
242
of file platform/emlib/inc/em_vdac.h
VDAC_TimerOverflow_TypeDef#
VDAC_TimerOverflow_TypeDef
Timer overflow period.
Enumerator | |
---|---|
vdacCycles2 | Overflows every 2 clock cycles. |
vdacCycles4 | Overflows every 4 clock cycles. |
vdacCycles8 | Overflows every 8 clock cycles. |
vdacCycles16 | Overflows every 16 clock cycles. |
vdacCycles32 | Overflows every 32 clock cycles. |
vdacCycles64 | Overflows every 64 clock cycles. |
254
of file platform/emlib/inc/em_vdac.h
VDAC_Ref_TypeDef#
VDAC_Ref_TypeDef
Reference voltage for VDAC.
Enumerator | |
---|---|
vdacRef1V25 | Internal 1.25 V band gap reference. |
vdacRef2V5 | Internal 2.5 V band gap reference. |
vdacRefAvdd | AVDD reference. |
vdacRefExtPin | External pin reference. |
264
of file platform/emlib/inc/em_vdac.h
VDAC_RefreshSource_TypeDef#
VDAC_RefreshSource_TypeDef
Refresh source for VDAC.
Enumerator | |
---|---|
vdacRefreshSrcNone | No refresh source. |
vdacRefreshSrcRefreshTimer | Refresh triggered by refresh timer overflow. |
vdacRefreshSrcSyncPrs | Refresh triggered by sync PRS. |
vdacRefreshSrcAsyncPrs | Refresh triggered by async PRS. |
272
of file platform/emlib/inc/em_vdac.h
VDAC_TrigMode_TypeDef#
VDAC_TrigMode_TypeDef
Channel conversion trigger mode.
Enumerator | |
---|---|
vdacTrigModeNone | No conversion trigger source selected. |
vdacTrigModeSw | Channel is triggered by CHnDATA or COMBDATA write. |
vdacTrigModeSyncPrs | Channel is triggered by Sync PRS input. |
vdacTrigModeLesense | Channel is triggered by LESENSE. |
vdacTrigModeInternalTimer | Channel is triggered by Internal Timer. |
vdacTrigModeAsyncPrs | Channel is triggered by Async PRS input. |
280
of file platform/emlib/inc/em_vdac.h
VDAC_PowerMode_TypeDef#
VDAC_PowerMode_TypeDef
Channel power mode.
Enumerator | |
---|---|
vdacPowerModeHighPower | High power buffer mode. |
vdacPowerModeLowPower | Low power buffer mode. |
292
of file platform/emlib/inc/em_vdac.h
VDAC_ChPortSel_t#
VDAC_ChPortSel_t
VDAC channel Abus port selection.
Enumerator | |
---|---|
vdacChPortNone | No GPIO selected. |
vdacChPortA | Port A selected. |
vdacChPortB | Port B selected. |
vdacChPortC | Port C selected. |
vdacChPortD | Port D selected. |
298
of file platform/emlib/inc/em_vdac.h
Function Documentation#
VDAC_Enable#
void VDAC_Enable (VDAC_TypeDef * vdac, unsigned int ch, bool enable)
Enable/disable the VDAC channel.
[in] | vdac | A pointer to the VDAC peripheral register block. |
[in] | ch | A channel to enable/disable. |
[in] | enable | True to enable VDAC channel, false to disable. |
114
of file platform/emlib/src/em_vdac.c
VDAC_Init#
void VDAC_Init (VDAC_TypeDef * vdac, const VDAC_Init_TypeDef * init)
Initialize VDAC.
[in] | vdac | A pointer to the VDAC peripheral register block. |
[in] | init | A pointer to the VDAC initialization structure. |
Initializes the common parts for both channels. This function will also load calibration values from the Device Information (DI) page into the VDAC calibration register. To complete a VDAC setup, channel control configuration must also be done. See VDAC_InitChannel().
Note
This function will disable both channels prior to configuration.
182
of file platform/emlib/src/em_vdac.c
VDAC_InitChannel#
void VDAC_InitChannel (VDAC_TypeDef * vdac, const VDAC_InitChannel_TypeDef * init, unsigned int ch)
Initialize a VDAC channel.
[in] | vdac | A pointer to the VDAC peripheral register block. |
[in] | init | A pointer to the VDAC channel initialization structure. |
[in] | ch | A channel number to initialize. |
315
of file platform/emlib/src/em_vdac.c
VDAC_ChannelOutputSet#
void VDAC_ChannelOutputSet (VDAC_TypeDef * vdac, unsigned int channel, uint32_t value)
Set the output signal of a VDAC channel to a given value.
[in] | vdac | A pointer to the VDAC peripheral register block. |
[in] | channel | A channel number to set the output of. |
[in] | value | A value to write to the channel output register CHnDATA. |
This function sets the output signal of a VDAC channel by writing value
to the corresponding CHnDATA register.
426
of file platform/emlib/src/em_vdac.c
VDAC_PrescaleCalc#
uint32_t VDAC_PrescaleCalc (VDAC_TypeDef * vdac, uint32_t vdacFreq)
Calculate the prescaler value used to determine VDAC clock.
[in] | vdac | Pointer to VDAC peripheral register block. |
[in] | vdacFreq | VDAC frequency target. The frequency will automatically be adjusted to be below maximum allowed VDAC clock. |
The VDAC clock is given by the input clock divided by the prescaler+1.
VDAC_CLK = IN_CLK / (prescale + 1)
The maximum VDAC clock is 1 MHz.
Note
If the requested VDAC frequency is low and the maximum prescaler value can't adjust the actual VDAC frequency lower than requested, the maximum prescaler value is returned resulting in a higher VDAC frequency than requested.
Returns
A prescaler value to use for VDAC to achieve a clock value less than or equal to
vdacFreq
.
539
of file platform/emlib/src/em_vdac.c
VDAC_Reset#
void VDAC_Reset (VDAC_TypeDef * vdac)
Reset VDAC to same state that it was in after a hardwares reset.
[in] | vdac | A pointer to the VDAC peripheral register block. |
587
of file platform/emlib/src/em_vdac.c
VDAC_SineModeStart#
void VDAC_SineModeStart (VDAC_TypeDef * vdac, bool start)
Start/stop Sinemode.
[in] | vdac | Pointer to VDAC peripheral register block. |
[in] | start | True to start the Sine mode, false to stop it. |
This function sends the sine mode start/stop signal to the DAC.
539
of file platform/emlib/inc/em_vdac.h
VDAC_Channel0OutputSet#
void VDAC_Channel0OutputSet (VDAC_TypeDef * vdac, uint32_t value)
Set the output signal of VDAC channel 0 to a given value.
[in] | vdac | Pointer to VDAC peripheral register block. |
[in] | value | Value to write to channel 0 output register CH0DATA. |
This function sets the output signal of VDAC channel 0 by writing value
to the CH0DATA register.
572
of file platform/emlib/inc/em_vdac.h
VDAC_Channel1OutputSet#
void VDAC_Channel1OutputSet (VDAC_TypeDef * vdac, uint32_t value)
Set the output signal of VDAC channel 1 to a given value.
[in] | vdac | Pointer to VDAC peripheral register block. |
[in] | value | Value to write to channel 1 output register CH1DATA. |
This function sets the output signal of VDAC channel 1 by writing value
to the CH1DATA register.
598
of file platform/emlib/inc/em_vdac.h
VDAC_IntClear#
void VDAC_IntClear (VDAC_TypeDef * vdac, uint32_t flags)
Clear one or more pending VDAC interrupts.
[in] | vdac | Pointer to VDAC peripheral register block. |
[in] | flags | Pending VDAC interrupt source to clear. Use a bitwise logic OR combination of valid interrupt flags for the VDAC module (VDAC_IF_nnn). |
621
of file platform/emlib/inc/em_vdac.h
VDAC_IntDisable#
void VDAC_IntDisable (VDAC_TypeDef * vdac, uint32_t flags)
Disable one or more VDAC interrupts.
[in] | vdac | Pointer to VDAC peripheral register block. |
[in] | flags | VDAC interrupt sources to disable. Use a bitwise logic OR combination of valid interrupt flags for the VDAC module (VDAC_IF_nnn). |
641
of file platform/emlib/inc/em_vdac.h
VDAC_IntEnable#
void VDAC_IntEnable (VDAC_TypeDef * vdac, uint32_t flags)
Enable one or more VDAC interrupts.
[in] | vdac | Pointer to VDAC peripheral register block. |
[in] | flags | VDAC interrupt sources to enable. Use a bitwise logic OR combination of valid interrupt flags for the VDAC module (VDAC_IF_nnn). |
Note
Depending on the use, a pending interrupt may already be set prior to enabling the interrupt. To ignore a pending interrupt, consider using VDAC_IntClear() prior to enabling the interrupt.
666
of file platform/emlib/inc/em_vdac.h
VDAC_IntGet#
uint32_t VDAC_IntGet (VDAC_TypeDef * vdac)
Get pending VDAC interrupt flags.
[in] | vdac | Pointer to VDAC peripheral register block. |
Note
The event bits are not cleared by the use of this function.
Returns
VDAC interrupt sources pending. Use a bitwise logic OR combination of valid interrupt flags for the VDAC module (VDAC_IF_nnn).
689
of file platform/emlib/inc/em_vdac.h
VDAC_IntGetEnabled#
uint32_t VDAC_IntGetEnabled (VDAC_TypeDef * vdac)
Get enabled and pending VDAC interrupt flags.
[in] | vdac | Pointer to VDAC peripheral register block. |
Useful for handling more interrupt sources in the same interrupt handler.
Note
Interrupt flags are not cleared by the use of this function.
Returns
Pending and enabled VDAC interrupt sources. The return value is the bitwise AND combination of
the OR combination of enabled interrupt sources in VDACx_IEN_nnn register (VDACx_IEN_nnn) and
the OR combination of valid interrupt flags of the VDAC module (VDACx_IF_nnn).
713
of file platform/emlib/inc/em_vdac.h
VDAC_IntSet#
void VDAC_IntSet (VDAC_TypeDef * vdac, uint32_t flags)
Set one or more pending VDAC interrupts from SW.
[in] | vdac | Pointer to VDAC peripheral register block. |
[in] | flags | VDAC interrupt sources to set to pending. Use a bitwise logic OR combination of valid interrupt flags for the VDAC module (VDAC_IF_nnn). |
732
of file platform/emlib/inc/em_vdac.h
VDAC_GetStatus#
uint32_t VDAC_GetStatus (VDAC_TypeDef * vdac)
Get the VDAC Status register.
[in] | vdac | Pointer to VDAC peripheral register block. |
Returns
Current STATUS register value.
752
of file platform/emlib/inc/em_vdac.h
Macro Definition Documentation#
VDAC_INIT_DEFAULT#
#define VDAC_INIT_DEFAULTValue:
Default configuration for VDAC initialization structure.
388
of file platform/emlib/inc/em_vdac.h
VDAC_INIT_SINE_GENERATION_MODE#
#define VDAC_INIT_SINE_GENERATION_MODEValue:
Sine mode configuration for VDAC initialization structure.
428
of file platform/emlib/inc/em_vdac.h
VDAC_INITCHANNEL_DEFAULT#
#define VDAC_INITCHANNEL_DEFAULTValue:
Default configuration for VDAC channel initialization structure.
493
of file platform/emlib/inc/em_vdac.h