EFR32 Flex Gecko 12 Software Documentation
efr32fg12-doc-5.1.2
|
Current Digital-to-Analog Converter (IDAC) Peripheral API.
The current digital-to-analog converter (IDAC) can source or sink a configurable constant current, which can be output on, or sinked from pin or ADC. The current is configurable with several ranges of various step sizes. The IDAC can be used with PRS and it can operate down to EM3.
The following steps are necessary for basic operation:
Clock enable:
Initialize the peripheral with default settings and modify selected fields such as output select:
Set output:
Data Structures | |
struct | IDAC_Init_TypeDef |
Macros | |
#define | IDAC_INIT_DEFAULT |
Enumerations | |
enum | IDAC_OutMode_TypeDef { idacOutputAPORT1XCH0 = IDAC_CTRL_APORTOUTSEL_APORT1XCH0, idacOutputAPORT1YCH1 = IDAC_CTRL_APORTOUTSEL_APORT1YCH1, idacOutputAPORT1XCH2 = IDAC_CTRL_APORTOUTSEL_APORT1XCH2, idacOutputAPORT1YCH3 = IDAC_CTRL_APORTOUTSEL_APORT1YCH3, idacOutputAPORT1XCH4 = IDAC_CTRL_APORTOUTSEL_APORT1XCH4, idacOutputAPORT1YCH5 = IDAC_CTRL_APORTOUTSEL_APORT1YCH5, idacOutputAPORT1XCH6 = IDAC_CTRL_APORTOUTSEL_APORT1XCH6, idacOutputAPORT1YCH7 = IDAC_CTRL_APORTOUTSEL_APORT1YCH7, idacOutputAPORT1XCH8 = IDAC_CTRL_APORTOUTSEL_APORT1XCH8, idacOutputAPORT1YCH9 = IDAC_CTRL_APORTOUTSEL_APORT1YCH9, idacOutputAPORT1XCH10 = IDAC_CTRL_APORTOUTSEL_APORT1XCH10, idacOutputAPORT1YCH11 = IDAC_CTRL_APORTOUTSEL_APORT1YCH11, idacOutputAPORT1XCH12 = IDAC_CTRL_APORTOUTSEL_APORT1XCH12, idacOutputAPORT1YCH13 = IDAC_CTRL_APORTOUTSEL_APORT1YCH13, idacOutputAPORT1XCH14 = IDAC_CTRL_APORTOUTSEL_APORT1XCH14, idacOutputAPORT1YCH15 = IDAC_CTRL_APORTOUTSEL_APORT1YCH15, idacOutputAPORT1XCH16 = IDAC_CTRL_APORTOUTSEL_APORT1XCH16, idacOutputAPORT1YCH17 = IDAC_CTRL_APORTOUTSEL_APORT1YCH17, idacOutputAPORT1XCH18 = IDAC_CTRL_APORTOUTSEL_APORT1XCH18, idacOutputAPORT1YCH19 = IDAC_CTRL_APORTOUTSEL_APORT1YCH19, idacOutputAPORT1XCH20 = IDAC_CTRL_APORTOUTSEL_APORT1XCH20, idacOutputAPORT1YCH21 = IDAC_CTRL_APORTOUTSEL_APORT1YCH21, idacOutputAPORT1XCH22 = IDAC_CTRL_APORTOUTSEL_APORT1XCH22, idacOutputAPORT1YCH23 = IDAC_CTRL_APORTOUTSEL_APORT1YCH23, idacOutputAPORT1XCH24 = IDAC_CTRL_APORTOUTSEL_APORT1XCH24, idacOutputAPORT1YCH25 = IDAC_CTRL_APORTOUTSEL_APORT1YCH25, idacOutputAPORT1XCH26 = IDAC_CTRL_APORTOUTSEL_APORT1XCH26, idacOutputAPORT1YCH27 = IDAC_CTRL_APORTOUTSEL_APORT1YCH27, idacOutputAPORT1XCH28 = IDAC_CTRL_APORTOUTSEL_APORT1XCH28, idacOutputAPORT1YCH29 = IDAC_CTRL_APORTOUTSEL_APORT1YCH29, idacOutputAPORT1XCH30 = IDAC_CTRL_APORTOUTSEL_APORT1XCH30, idacOutputAPORT1YCH31 = IDAC_CTRL_APORTOUTSEL_APORT1YCH31 } |
enum | IDAC_PRSSEL_TypeDef { idacPRSSELCh0 = IDAC_CTRL_PRSSEL_PRSCH0, idacPRSSELCh1 = IDAC_CTRL_PRSSEL_PRSCH1, idacPRSSELCh2 = IDAC_CTRL_PRSSEL_PRSCH2, idacPRSSELCh3 = IDAC_CTRL_PRSSEL_PRSCH3, idacPRSSELCh4 = IDAC_CTRL_PRSSEL_PRSCH4, idacPRSSELCh5 = IDAC_CTRL_PRSSEL_PRSCH5, idacPRSSELCh6 = IDAC_CTRL_PRSSEL_PRSCH6, idacPRSSELCh7 = IDAC_CTRL_PRSSEL_PRSCH7, idacPRSSELCh8 = IDAC_CTRL_PRSSEL_PRSCH8, idacPRSSELCh9 = IDAC_CTRL_PRSSEL_PRSCH9, idacPRSSELCh10 = IDAC_CTRL_PRSSEL_PRSCH10, idacPRSSELCh11 = IDAC_CTRL_PRSSEL_PRSCH11 } |
enum | IDAC_Range_TypeDef { idacCurrentRange0 = IDAC_CURPROG_RANGESEL_RANGE0, idacCurrentRange1 = IDAC_CURPROG_RANGESEL_RANGE1, idacCurrentRange2 = IDAC_CURPROG_RANGESEL_RANGE2, idacCurrentRange3 = IDAC_CURPROG_RANGESEL_RANGE3 } |
Functions | |
void | IDAC_Enable (IDAC_TypeDef *idac, bool enable) |
Enable/disable IDAC. More... | |
void | IDAC_Init (IDAC_TypeDef *idac, const IDAC_Init_TypeDef *init) |
Initialize IDAC. More... | |
__STATIC_INLINE void | IDAC_IntClear (IDAC_TypeDef *idac, uint32_t flags) |
Clear one or more pending IDAC interrupts. More... | |
__STATIC_INLINE void | IDAC_IntDisable (IDAC_TypeDef *idac, uint32_t flags) |
Disable one or more IDAC interrupts. More... | |
__STATIC_INLINE void | IDAC_IntEnable (IDAC_TypeDef *idac, uint32_t flags) |
Enable one or more IDAC interrupts. More... | |
__STATIC_INLINE uint32_t | IDAC_IntGet (IDAC_TypeDef *idac) |
Get pending IDAC interrupt flags. More... | |
__STATIC_INLINE uint32_t | IDAC_IntGetEnabled (IDAC_TypeDef *idac) |
Get enabled and pending IDAC interrupt flags. Useful for handling more interrupt sources in the same interrupt handler. More... | |
__STATIC_INLINE void | IDAC_IntSet (IDAC_TypeDef *idac, uint32_t flags) |
Set one or more pending IDAC interrupts from SW. More... | |
void | IDAC_MinimalOutputTransitionMode (IDAC_TypeDef *idac, bool enable) |
Enable/disable Minimal Output Transition mode. More... | |
void | IDAC_OutEnable (IDAC_TypeDef *idac, bool enable) |
Enable/disable the IDAC OUT pin. More... | |
void | IDAC_RangeSet (IDAC_TypeDef *idac, const IDAC_Range_TypeDef range) |
Set the current range of the IDAC output. More... | |
void | IDAC_Reset (IDAC_TypeDef *idac) |
Reset IDAC to same state as after a HW reset. More... | |
void | IDAC_StepSet (IDAC_TypeDef *idac, const uint32_t step) |
Set the current step of the IDAC output. More... | |
#define IDAC_INIT_DEFAULT |
Default config for IDAC init structure.
enum IDAC_OutMode_TypeDef |
Output mode.
enum IDAC_PRSSEL_TypeDef |
Selects which Peripheral Reflex System (PRS) signal to use when PRS is set to control the IDAC output.
enum IDAC_Range_TypeDef |
void IDAC_Enable | ( | IDAC_TypeDef * | idac, |
bool | enable | ||
) |
Enable/disable IDAC.
[in] | idac | Pointer to IDAC peripheral register block. |
[in] | enable | true to enable IDAC, false to disable. |
Definition at line 120 of file em_idac.c.
References _IDAC_CTRL_EN_SHIFT, BUS_RegBitWrite(), and IDAC_TypeDef::CTRL.
void IDAC_Init | ( | IDAC_TypeDef * | idac, |
const IDAC_Init_TypeDef * | init | ||
) |
Initialize IDAC.
Initializes IDAC according to the initialization structure parameter, and sets the default calibration value stored in the DEVINFO structure.
[in] | idac | Pointer to IDAC peripheral register block. |
[in] | init | Pointer to IDAC initialization structure. |
Definition at line 79 of file em_idac.c.
References IDAC_TypeDef::CTRL, IDAC_Init_TypeDef::enable, IDAC_CTRL_APORTOUTENPRS, IDAC_CTRL_CURSINK, IDAC_CTRL_EN, IDAC_Init_TypeDef::outMode, IDAC_Init_TypeDef::prsEnable, IDAC_Init_TypeDef::prsSel, and IDAC_Init_TypeDef::sinkEnable.
__STATIC_INLINE void IDAC_IntClear | ( | IDAC_TypeDef * | idac, |
uint32_t | flags | ||
) |
Clear one or more pending IDAC interrupts.
[in] | idac | Pointer to IDAC peripheral register block. |
[in] | flags | Pending IDAC interrupt source(s) to clear. Use one or more valid interrupt flags for the IDAC module (IDAC_IF_nnn) OR'ed together. |
Definition at line 246 of file em_idac.h.
References IDAC_TypeDef::IFC.
__STATIC_INLINE void IDAC_IntDisable | ( | IDAC_TypeDef * | idac, |
uint32_t | flags | ||
) |
Disable one or more IDAC interrupts.
[in] | idac | Pointer to IDAC peripheral register block. |
[in] | flags | IDAC interrupt source(s) to disable. Use one or more valid interrupt flags for the IDAC module (IDAC_IF_nnn) OR'ed together. |
Definition at line 263 of file em_idac.h.
References IDAC_TypeDef::IEN.
__STATIC_INLINE void IDAC_IntEnable | ( | IDAC_TypeDef * | idac, |
uint32_t | flags | ||
) |
Enable one or more IDAC interrupts.
[in] | idac | Pointer to IDAC peripheral register block. |
[in] | flags | IDAC interrupt source(s) to enable. Use one or more valid interrupt flags for the IDAC module (IDAC_IF_nnn) OR'ed together. |
Definition at line 285 of file em_idac.h.
References IDAC_TypeDef::IEN.
__STATIC_INLINE uint32_t IDAC_IntGet | ( | IDAC_TypeDef * | idac | ) |
Get pending IDAC interrupt flags.
[in] | idac | Pointer to IDAC peripheral register block. |
Definition at line 305 of file em_idac.h.
References IDAC_TypeDef::IF.
__STATIC_INLINE uint32_t IDAC_IntGetEnabled | ( | IDAC_TypeDef * | idac | ) |
Get enabled and pending IDAC interrupt flags. Useful for handling more interrupt sources in the same interrupt handler.
[in] | idac | Pointer to IDAC peripheral register block. |
Definition at line 330 of file em_idac.h.
References IDAC_TypeDef::IEN, and IDAC_TypeDef::IF.
__STATIC_INLINE void IDAC_IntSet | ( | IDAC_TypeDef * | idac, |
uint32_t | flags | ||
) |
Set one or more pending IDAC interrupts from SW.
[in] | idac | Pointer to IDAC peripheral register block. |
[in] | flags | IDAC interrupt source(s) to set to pending. Use one or more valid interrupt flags for the IDAC module (IDAC_IF_nnn) OR'ed together. |
Definition at line 354 of file em_idac.h.
References IDAC_TypeDef::IFS.
void IDAC_MinimalOutputTransitionMode | ( | IDAC_TypeDef * | idac, |
bool | enable | ||
) |
Enable/disable Minimal Output Transition mode.
[in] | idac | Pointer to IDAC peripheral register block. |
[in] | enable | true to enable Minimal Output Transition mode, false to disable. |
Definition at line 173 of file em_idac.c.
References _IDAC_CTRL_MINOUTTRANS_SHIFT, BUS_RegBitWrite(), and IDAC_TypeDef::CTRL.
void IDAC_OutEnable | ( | IDAC_TypeDef * | idac, |
bool | enable | ||
) |
Enable/disable the IDAC OUT pin.
[in] | idac | Pointer to IDAC peripheral register block. |
[in] | enable | true to enable the IDAC OUT pin, false to disable. |
Definition at line 347 of file em_idac.c.
References _IDAC_CTRL_APORTOUTEN_SHIFT, BUS_RegBitWrite(), and IDAC_TypeDef::CTRL.
void IDAC_RangeSet | ( | IDAC_TypeDef * | idac, |
const IDAC_Range_TypeDef | range | ||
) |
Set the current range of the IDAC output.
This function sets the current range of the IDAC output. The function also updates the IDAC calibration register (IDAC_CAL) with the default calibration value from DEVINFO (factory calibration) corresponding to the specified range.
[in] | idac | Pointer to IDAC peripheral register block. |
[in] | range | Current range value. |
Definition at line 196 of file em_idac.c.
References _DEVINFO_IDAC0CAL0_SOURCERANGE0TUNING_MASK, _DEVINFO_IDAC0CAL0_SOURCERANGE0TUNING_SHIFT, _DEVINFO_IDAC0CAL0_SOURCERANGE1TUNING_MASK, _DEVINFO_IDAC0CAL0_SOURCERANGE1TUNING_SHIFT, _DEVINFO_IDAC0CAL0_SOURCERANGE2TUNING_MASK, _DEVINFO_IDAC0CAL0_SOURCERANGE2TUNING_SHIFT, _DEVINFO_IDAC0CAL0_SOURCERANGE3TUNING_MASK, _DEVINFO_IDAC0CAL0_SOURCERANGE3TUNING_SHIFT, _DEVINFO_IDAC0CAL1_SINKRANGE0TUNING_MASK, _DEVINFO_IDAC0CAL1_SINKRANGE0TUNING_SHIFT, _DEVINFO_IDAC0CAL1_SINKRANGE1TUNING_MASK, _DEVINFO_IDAC0CAL1_SINKRANGE1TUNING_SHIFT, _DEVINFO_IDAC0CAL1_SINKRANGE2TUNING_MASK, _DEVINFO_IDAC0CAL1_SINKRANGE2TUNING_SHIFT, _DEVINFO_IDAC0CAL1_SINKRANGE3TUNING_MASK, _DEVINFO_IDAC0CAL1_SINKRANGE3TUNING_SHIFT, _IDAC_CURPROG_RANGESEL_MASK, _IDAC_CURPROG_RANGESEL_SHIFT, _IDAC_CURPROG_TUNING_MASK, _IDAC_CURPROG_TUNING_SHIFT, IDAC_TypeDef::CTRL, IDAC_TypeDef::CURPROG, DEVINFO, IDAC0, IDAC_CTRL_CURSINK, idacCurrentRange0, idacCurrentRange1, idacCurrentRange2, and idacCurrentRange3.
void IDAC_Reset | ( | IDAC_TypeDef * | idac | ) |
Reset IDAC to same state as after a HW reset.
[in] | idac | Pointer to IDAC peripheral register block. |
Definition at line 134 of file em_idac.c.
References _IDAC_CTRL_RESETVALUE, _IDAC_CURPROG_RESETVALUE, _IDAC_CURPROG_STEPSEL_SHIFT, _IDAC_DUTYCONFIG_RESETVALUE, IDAC_TypeDef::CTRL, IDAC_TypeDef::CURPROG, IDAC_TypeDef::DUTYCONFIG, IDAC_CTRL_EN, and IDAC_CURPROG_RANGESEL_RANGE0.
void IDAC_StepSet | ( | IDAC_TypeDef * | idac, |
const uint32_t | step | ||
) |
Set the current step of the IDAC output.
[in] | idac | Pointer to IDAC peripheral register block. |
[in] | step | Step value for IDAC output. Valid range is 0-31. |
Definition at line 323 of file em_idac.c.
References _IDAC_CURPROG_STEPSEL_MASK, _IDAC_CURPROG_STEPSEL_SHIFT, and IDAC_TypeDef::CURPROG.