EFR32 Blue Gecko 12 Software Documentation
efr32bg12-doc-5.1.2
|
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. The VDAC converts digital values to analog signals at up to 500 ksps with 12-bit accuracy. The VDAC is designed for low energy consumption, but can also provide very good performance.
The following steps are necessary for basic operation:
Clock enable:
Initialize the VDAC with default settings and modify selected fields:
Perform a conversion:
Data Structures | |
struct | VDAC_Init_TypeDef |
struct | VDAC_InitChannel_TypeDef |
Macros | |
#define | VDAC_INIT_DEFAULT |
#define | VDAC_INITCHANNEL_DEFAULT |
Enumerations | |
enum | VDAC_PrsSel_TypeDef { vdacPrsSelCh0 = _VDAC_CH0CTRL_PRSSEL_PRSCH0, vdacPrsSelCh1 = _VDAC_CH0CTRL_PRSSEL_PRSCH1, vdacPrsSelCh2 = _VDAC_CH0CTRL_PRSSEL_PRSCH2, vdacPrsSelCh3 = _VDAC_CH0CTRL_PRSSEL_PRSCH3, vdacPrsSelCh4 = _VDAC_CH0CTRL_PRSSEL_PRSCH4, vdacPrsSelCh5 = _VDAC_CH0CTRL_PRSSEL_PRSCH5, vdacPrsSelCh6 = _VDAC_CH0CTRL_PRSSEL_PRSCH6, vdacPrsSelCh7 = _VDAC_CH0CTRL_PRSSEL_PRSCH7, vdacPrsSelCh8 = _VDAC_CH0CTRL_PRSSEL_PRSCH8, vdacPrsSelCh9 = _VDAC_CH0CTRL_PRSSEL_PRSCH9, vdacPrsSelCh10 = _VDAC_CH0CTRL_PRSSEL_PRSCH10, vdacPrsSelCh11 = _VDAC_CH0CTRL_PRSSEL_PRSCH11 } |
enum | VDAC_Ref_TypeDef { vdacRef1V25Ln = _VDAC_CTRL_REFSEL_1V25LN, vdacRef2V5Ln = _VDAC_CTRL_REFSEL_2V5LN, vdacRef1V25 = _VDAC_CTRL_REFSEL_1V25, vdacRef2V5 = _VDAC_CTRL_REFSEL_2V5, vdacRefAvdd = _VDAC_CTRL_REFSEL_VDD, vdacRefExtPin = _VDAC_CTRL_REFSEL_EXT } |
enum | VDAC_Refresh_TypeDef { vdacRefresh8 = _VDAC_CTRL_REFRESHPERIOD_8CYCLES, vdacRefresh16 = _VDAC_CTRL_REFRESHPERIOD_16CYCLES, vdacRefresh32 = _VDAC_CTRL_REFRESHPERIOD_32CYCLES, vdacRefresh64 = _VDAC_CTRL_REFRESHPERIOD_64CYCLES } |
enum | VDAC_TrigMode_TypeDef { vdacTrigModeSw = _VDAC_CH0CTRL_TRIGMODE_SW, vdacTrigModePrs = _VDAC_CH0CTRL_TRIGMODE_PRS, vdacTrigModeRefresh = _VDAC_CH0CTRL_TRIGMODE_REFRESH, vdacTrigModeSwPrs = _VDAC_CH0CTRL_TRIGMODE_SWPRS, vdacTrigModeSwRefresh = _VDAC_CH0CTRL_TRIGMODE_SWREFRESH, vdacTrigModeLesense = _VDAC_CH0CTRL_TRIGMODE_LESENSE } |
Functions | |
__STATIC_INLINE void | VDAC_Channel0OutputSet (VDAC_TypeDef *vdac, uint32_t value) |
Set the output signal of VDAC channel 0 to a given value. More... | |
__STATIC_INLINE void | VDAC_Channel1OutputSet (VDAC_TypeDef *vdac, uint32_t value) |
Set the output signal of VDAC channel 1 to a given value. More... | |
void | VDAC_ChannelOutputSet (VDAC_TypeDef *vdac, unsigned int channel, uint32_t value) |
Set the output signal of a VDAC channel to a given value. More... | |
void | VDAC_Enable (VDAC_TypeDef *vdac, unsigned int ch, bool enable) |
Enable/disable VDAC channel. More... | |
void | VDAC_Init (VDAC_TypeDef *vdac, const VDAC_Init_TypeDef *init) |
Initialize VDAC. More... | |
void | VDAC_InitChannel (VDAC_TypeDef *vdac, const VDAC_InitChannel_TypeDef *init, unsigned int ch) |
Initialize a VDAC channel. More... | |
__STATIC_INLINE void | VDAC_IntClear (VDAC_TypeDef *vdac, uint32_t flags) |
Clear one or more pending VDAC interrupts. More... | |
__STATIC_INLINE void | VDAC_IntDisable (VDAC_TypeDef *vdac, uint32_t flags) |
Disable one or more VDAC interrupts. More... | |
__STATIC_INLINE void | VDAC_IntEnable (VDAC_TypeDef *vdac, uint32_t flags) |
Enable one or more VDAC interrupts. More... | |
__STATIC_INLINE uint32_t | VDAC_IntGet (VDAC_TypeDef *vdac) |
Get pending VDAC interrupt flags. More... | |
__STATIC_INLINE uint32_t | VDAC_IntGetEnabled (VDAC_TypeDef *vdac) |
Get enabled and pending VDAC interrupt flags. Useful for handling more interrupt sources in the same interrupt handler. More... | |
__STATIC_INLINE void | VDAC_IntSet (VDAC_TypeDef *vdac, uint32_t flags) |
Set one or more pending VDAC interrupts from SW. More... | |
uint32_t | VDAC_PrescaleCalc (uint32_t vdacFreq, bool syncMode, uint32_t hfperFreq) |
Calculate prescaler value used to determine VDAC clock. More... | |
void | VDAC_Reset (VDAC_TypeDef *vdac) |
Reset VDAC to same state as after a HW reset. More... | |
#define VDAC_INIT_DEFAULT |
Default config for VDAC init structure.
#define VDAC_INITCHANNEL_DEFAULT |
Default config for VDAC channel init structure.
enum VDAC_PrsSel_TypeDef |
Peripheral Reflex System signal used to trig VDAC channel conversion.
enum VDAC_Ref_TypeDef |
Reference voltage for VDAC.
enum VDAC_Refresh_TypeDef |
Channel conversion trigger mode.
__STATIC_INLINE void VDAC_Channel0OutputSet | ( | VDAC_TypeDef * | vdac, |
uint32_t | value | ||
) |
Set the output signal of VDAC channel 0 to a given value.
This function sets the output signal of VDAC channel 0 by writing value
to the CH0DATA register.
[in] | vdac | Pointer to VDAC peripheral register block. |
[in] | value | Value to write to channel 0 output register CH0DATA. |
Definition at line 266 of file em_vdac.h.
References _VDAC_CH0DATA_MASK, and VDAC_TypeDef::CH0DATA.
Referenced by VDAC_ChannelOutputSet().
__STATIC_INLINE void VDAC_Channel1OutputSet | ( | VDAC_TypeDef * | vdac, |
uint32_t | value | ||
) |
Set the output signal of VDAC channel 1 to a given value.
This function sets the output signal of VDAC channel 1 by writing value
to the CH1DATA register.
[in] | vdac | Pointer to VDAC peripheral register block. |
[in] | value | Value to write to channel 1 output register CH1DATA. |
Definition at line 287 of file em_vdac.h.
References _VDAC_CH1DATA_MASK, and VDAC_TypeDef::CH1DATA.
Referenced by 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.
This function sets the output signal of a VDAC channel by writing value
to the corresponding CHnDATA register.
[in] | vdac | Pointer to VDAC peripheral register block. |
[in] | channel | Channel number to set output of. |
[in] | value | Value to write to the channel output register CHnDATA. |
Definition at line 316 of file em_vdac.c.
References VDAC_Channel0OutputSet(), and VDAC_Channel1OutputSet().
void VDAC_Enable | ( | VDAC_TypeDef * | vdac, |
unsigned int | ch, | ||
bool | enable | ||
) |
Enable/disable VDAC channel.
[in] | vdac | Pointer to VDAC peripheral register block. |
[in] | ch | Channel to enable/disable. |
[in] | enable | true to enable VDAC channel, false to disable. |
Definition at line 81 of file em_vdac.c.
References VDAC_TypeDef::CMD, VDAC_TypeDef::STATUS, VDAC_CMD_CH0DIS, VDAC_CMD_CH0EN, VDAC_CMD_CH1DIS, VDAC_CMD_CH1EN, VDAC_STATUS_CH0ENS, and VDAC_STATUS_CH1ENS.
void VDAC_Init | ( | VDAC_TypeDef * | vdac, |
const VDAC_Init_TypeDef * | init | ||
) |
Initialize VDAC.
Initializes 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, please refer to VDAC_InitChannel().
[in] | vdac | Pointer to VDAC peripheral register block. |
[in] | init | Pointer to VDAC initialization structure. |
Definition at line 132 of file em_vdac.c.
References _DEVINFO_VDAC0CH1CAL_GAINERRTRIMCH1A_MASK, _DEVINFO_VDAC0CH1CAL_GAINERRTRIMCH1A_SHIFT, _DEVINFO_VDAC0CH1CAL_GAINERRTRIMCH1B_MASK, _DEVINFO_VDAC0CH1CAL_GAINERRTRIMCH1B_SHIFT, _DEVINFO_VDAC0CH1CAL_OFFSETTRIM_MASK, _DEVINFO_VDAC0CH1CAL_OFFSETTRIM_SHIFT, _DEVINFO_VDAC0MAINCAL_GAINERRTRIM1V25_MASK, _DEVINFO_VDAC0MAINCAL_GAINERRTRIM1V25_SHIFT, _DEVINFO_VDAC0MAINCAL_GAINERRTRIM1V25LN_MASK, _DEVINFO_VDAC0MAINCAL_GAINERRTRIM1V25LN_SHIFT, _DEVINFO_VDAC0MAINCAL_GAINERRTRIM2V5_MASK, _DEVINFO_VDAC0MAINCAL_GAINERRTRIM2V5_SHIFT, _DEVINFO_VDAC0MAINCAL_GAINERRTRIM2V5LN_MASK, _DEVINFO_VDAC0MAINCAL_GAINERRTRIM2V5LN_SHIFT, _DEVINFO_VDAC0MAINCAL_GAINERRTRIMVDDANAEXTPIN_MASK, _DEVINFO_VDAC0MAINCAL_GAINERRTRIMVDDANAEXTPIN_SHIFT, _VDAC_CAL_GAINERRTRIM_SHIFT, _VDAC_CAL_GAINERRTRIMCH1_SHIFT, _VDAC_CAL_OFFSETTRIM_SHIFT, _VDAC_CTRL_CH0PRESCRST_SHIFT, _VDAC_CTRL_DACCLKMODE_SHIFT, _VDAC_CTRL_DIFF_SHIFT, _VDAC_CTRL_OUTENPRS_SHIFT, _VDAC_CTRL_PRESC_MASK, _VDAC_CTRL_PRESC_SHIFT, _VDAC_CTRL_REFRESHPERIOD_SHIFT, _VDAC_CTRL_REFSEL_SHIFT, _VDAC_CTRL_SINEMODE_SHIFT, _VDAC_CTRL_WARMUPMODE_SHIFT, VDAC_Init_TypeDef::asyncClockMode, VDAC_TypeDef::CAL, VDAC_Init_TypeDef::ch0ResetPre, VDAC_TypeDef::CMD, VDAC_TypeDef::CTRL, DEVINFO, VDAC_Init_TypeDef::diff, VDAC_Init_TypeDef::mainCalibration, VDAC_Init_TypeDef::outEnablePRS, VDAC_Init_TypeDef::prescaler, VDAC_Init_TypeDef::reference, VDAC_Init_TypeDef::refresh, VDAC_Init_TypeDef::sineEnable, VDAC_TypeDef::STATUS, VDAC_CMD_CH0DIS, VDAC_CMD_CH1DIS, VDAC_STATUS_CH0ENS, VDAC_STATUS_CH1ENS, vdacRef1V25, vdacRef1V25Ln, vdacRef2V5, vdacRef2V5Ln, vdacRefAvdd, vdacRefExtPin, and VDAC_Init_TypeDef::warmupKeepOn.
void VDAC_InitChannel | ( | VDAC_TypeDef * | vdac, |
const VDAC_InitChannel_TypeDef * | init, | ||
unsigned int | ch | ||
) |
Initialize a VDAC channel.
[in] | vdac | Pointer to VDAC peripheral register block. |
[in] | init | Pointer to VDAC channel initialization structure. |
[in] | ch | Channel number to initialize. |
Definition at line 240 of file em_vdac.c.
References _VDAC_CH0CTRL_CONVMODE_SHIFT, _VDAC_CH0CTRL_PRSASYNC_SHIFT, _VDAC_CH0CTRL_PRSSEL_SHIFT, _VDAC_CH0CTRL_TRIGMODE_SHIFT, VDAC_TypeDef::CH0CTRL, VDAC_TypeDef::CH1CTRL, VDAC_TypeDef::CMD, VDAC_InitChannel_TypeDef::enable, VDAC_InitChannel_TypeDef::prsAsync, VDAC_InitChannel_TypeDef::prsSel, VDAC_InitChannel_TypeDef::sampleOffMode, VDAC_TypeDef::STATUS, VDAC_InitChannel_TypeDef::trigMode, VDAC_CMD_CH0DIS, VDAC_CMD_CH0EN, VDAC_CMD_CH1DIS, VDAC_CMD_CH1EN, VDAC_STATUS_CH0ENS, and VDAC_STATUS_CH1ENS.
__STATIC_INLINE 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). |
Definition at line 305 of file em_vdac.h.
References VDAC_TypeDef::IFC.
__STATIC_INLINE 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). |
Definition at line 321 of file em_vdac.h.
References VDAC_TypeDef::IEN.
__STATIC_INLINE 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). |
Definition at line 342 of file em_vdac.h.
References VDAC_TypeDef::IEN.
__STATIC_INLINE uint32_t VDAC_IntGet | ( | VDAC_TypeDef * | vdac | ) |
Get pending VDAC interrupt flags.
[in] | vdac | Pointer to VDAC peripheral register block. |
Definition at line 361 of file em_vdac.h.
References VDAC_TypeDef::IF.
__STATIC_INLINE uint32_t VDAC_IntGetEnabled | ( | VDAC_TypeDef * | vdac | ) |
Get enabled and pending VDAC interrupt flags. Useful for handling more interrupt sources in the same interrupt handler.
[in] | vdac | Pointer to VDAC peripheral register block. |
Definition at line 385 of file em_vdac.h.
References VDAC_TypeDef::IEN, and VDAC_TypeDef::IF.
__STATIC_INLINE 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). |
Definition at line 404 of file em_vdac.h.
References VDAC_TypeDef::IFS.
uint32_t VDAC_PrescaleCalc | ( | uint32_t | vdacFreq, |
bool | syncMode, | ||
uint32_t | hfperFreq | ||
) |
Calculate prescaler value used to determine VDAC clock.
The VDAC clock is given by input clock divided by prescaler+1.
VDAC_CLK = IN_CLK / (prescale + 1)
Maximum VDAC clock is 1 MHz. Input clock is HFPERCLK when VDAC synchronous mode is selected, or an internal oscillator of 10 MHz +/- 20% when asynchronous mode is selected.
[in] | vdacFreq | VDAC frequency target. The frequency will automatically be adjusted to be below max allowed VDAC clock. |
[in] | syncMode | Set to true if you intend to use VDAC in synchronous mode. |
[in] | hfperFreq | Frequency in Hz of HFPERCLK oscillator. Set to 0 to use currently defined HFPERCLK clock setting. This parameter is only used when syncMode is set to true. |
vdacFreq
. Definition at line 366 of file em_vdac.c.
References _VDAC_CTRL_PRESC_MASK, _VDAC_CTRL_PRESC_SHIFT, CMU_ClockFreqGet(), and cmuClock_HFPER.
void VDAC_Reset | ( | VDAC_TypeDef * | vdac | ) |
Reset VDAC to same state as after a HW reset.
[in] | vdac | Pointer to VDAC peripheral register block. |
Definition at line 420 of file em_vdac.c.
References _VDAC_CAL_RESETVALUE, _VDAC_CH0CTRL_RESETVALUE, _VDAC_CH0DATA_RESETVALUE, _VDAC_CH1CTRL_RESETVALUE, _VDAC_CH1DATA_RESETVALUE, _VDAC_CTRL_RESETVALUE, _VDAC_IEN_RESETVALUE, _VDAC_IFC_MASK, VDAC_TypeDef::CAL, VDAC_TypeDef::CH0CTRL, VDAC_TypeDef::CH0DATA, VDAC_TypeDef::CH1CTRL, VDAC_TypeDef::CH1DATA, VDAC_TypeDef::CMD, VDAC_TypeDef::CTRL, VDAC_TypeDef::IEN, VDAC_TypeDef::IFC, VDAC_TypeDef::STATUS, VDAC_CMD_CH0DIS, VDAC_CMD_CH1DIS, VDAC_STATUS_CH0ENS, and VDAC_STATUS_CH1ENS.