IDACEMLIB

Detailed Description

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:

/* IDAC is a HFPERCLK peripheral */

Initialize the peripheral with default settings and modify selected fields such as output select:

/* Initialize with default settings. Change output to APORT1YCH1. */

Set output:

/* Set 50nA step and enable 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.
void IDAC_Init ( IDAC_TypeDef *idac, const IDAC_Init_TypeDef *init)
Initialize IDAC.
__STATIC_INLINE void IDAC_IntClear ( IDAC_TypeDef *idac, uint32_t flags)
Clear one or more pending IDAC interrupts.
__STATIC_INLINE void IDAC_IntDisable ( IDAC_TypeDef *idac, uint32_t flags)
Disable one or more IDAC interrupts.
__STATIC_INLINE void IDAC_IntEnable ( IDAC_TypeDef *idac, uint32_t flags)
Enable one or more IDAC interrupts.
__STATIC_INLINE uint32_t IDAC_IntGet ( IDAC_TypeDef *idac)
Get pending IDAC interrupt flags.
__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.
__STATIC_INLINE void IDAC_IntSet ( IDAC_TypeDef *idac, uint32_t flags)
Set one or more pending IDAC interrupts from SW.
void IDAC_MinimalOutputTransitionMode ( IDAC_TypeDef *idac, bool enable)
Enable/disable Minimal Output Transition mode.
void IDAC_OutEnable ( IDAC_TypeDef *idac, bool enable)
Enable/disable the IDAC OUT pin.
void IDAC_RangeSet ( IDAC_TypeDef *idac, const IDAC_Range_TypeDef range)
Set the current range of the IDAC output.
void IDAC_Reset ( IDAC_TypeDef *idac)
Reset IDAC to same state as after a HW reset.
void IDAC_StepSet ( IDAC_TypeDef *idac, const uint32_t step)
Set the current step of the IDAC output.

Macro Definition Documentation

#define IDAC_INIT_DEFAULT
Value:
{ \
false, \
idacOutputAPORT1XCH0, \
false, \
idacPRSSELCh0, \
false \
}

Default config for IDAC init structure.

Definition at line 202 of file em_idac.h .

Enumeration Type Documentation

Output mode.

Enumerator
idacOutputAPORT1XCH0

Output to APORT 1X CH0

idacOutputAPORT1YCH1

Output to APORT 1Y CH1

idacOutputAPORT1XCH2

Output to APORT 1X CH2

idacOutputAPORT1YCH3

Output to APORT 1Y CH3

idacOutputAPORT1XCH4

Output to APORT 1X CH4

idacOutputAPORT1YCH5

Output to APORT 1Y CH5

idacOutputAPORT1XCH6

Output to APORT 1X CH6

idacOutputAPORT1YCH7

Output to APORT 1Y CH7

idacOutputAPORT1XCH8

Output to APORT 1X CH8

idacOutputAPORT1YCH9

Output to APORT 1Y CH9

idacOutputAPORT1XCH10

Output to APORT 1X CH10

idacOutputAPORT1YCH11

Output to APORT 1Y CH11

idacOutputAPORT1XCH12

Output to APORT 1X CH12

idacOutputAPORT1YCH13

Output to APORT 1Y CH13

idacOutputAPORT1XCH14

Output to APORT 1X CH14

idacOutputAPORT1YCH15

Output to APORT 1Y CH15

idacOutputAPORT1XCH16

Output to APORT 1X CH16

idacOutputAPORT1YCH17

Output to APORT 1Y CH17

idacOutputAPORT1XCH18

Output to APORT 1X CH18

idacOutputAPORT1YCH19

Output to APORT 1Y CH19

idacOutputAPORT1XCH20

Output to APORT 1X CH20

idacOutputAPORT1YCH21

Output to APORT 1Y CH21

idacOutputAPORT1XCH22

Output to APORT 1X CH22

idacOutputAPORT1YCH23

Output to APORT 1Y CH23

idacOutputAPORT1XCH24

Output to APORT 1X CH24

idacOutputAPORT1YCH25

Output to APORT 1Y CH25

idacOutputAPORT1XCH26

Output to APORT 1X CH26

idacOutputAPORT1YCH27

Output to APORT 1Y CH27

idacOutputAPORT1XCH28

Output to APORT 1X CH28

idacOutputAPORT1YCH29

Output to APORT 1Y CH29

idacOutputAPORT1XCH30

Output to APORT 1X CH30

idacOutputAPORT1YCH31

Output to APORT 1Y CH31

Definition at line 93 of file em_idac.h .

Selects which Peripheral Reflex System (PRS) signal to use when PRS is set to control the IDAC output.

Enumerator
idacPRSSELCh0

PRS channel 0.

idacPRSSELCh1

PRS channel 1.

idacPRSSELCh2

PRS channel 2.

idacPRSSELCh3

PRS channel 3.

idacPRSSELCh4

PRS channel 4.

idacPRSSELCh5

PRS channel 5.

idacPRSSELCh6

PRS channel 6.

idacPRSSELCh7

PRS channel 7.

idacPRSSELCh8

PRS channel 8.

idacPRSSELCh9

PRS channel 9.

idacPRSSELCh10

PRS channel 10

idacPRSSELCh11

PRS channel 11

Definition at line 135 of file em_idac.h .

Selects which current range to use.

Enumerator
idacCurrentRange0

current range 0.

idacCurrentRange1

current range 1.

idacCurrentRange2

current range 2.

idacCurrentRange3

current range 3.

Definition at line 155 of file em_idac.h .

Function Documentation

void IDAC_Enable ( IDAC_TypeDef * idac,
bool enable
)

Enable/disable IDAC.

Parameters
[in] idac Pointer to IDAC peripheral register block.
[in] enable true to enable IDAC, false to disable.

Definition at line 115 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.

Note
This function will disable the IDAC prior to configuration.
Parameters
[in] idac Pointer to IDAC peripheral register block.
[in] init Pointer to IDAC initialization structure.

Definition at line 78 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.

Parameters
[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 236 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.

Parameters
[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 252 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.

Note
Depending on the use, a pending interrupt may already be set prior to enabling the interrupt. Consider using IDAC_IntClear() prior to enabling if such a pending interrupt should be ignored.
Parameters
[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 273 of file em_idac.h .

References IDAC_TypeDef::IEN .

__STATIC_INLINE uint32_t IDAC_IntGet ( IDAC_TypeDef * idac )

Get pending IDAC interrupt flags.

Note
The event bits are not cleared by the use of this function.
Parameters
[in] idac Pointer to IDAC peripheral register block.
Returns
IDAC interrupt source(s) pending. Returns one or more valid interrupt flags for the IDAC module (IDAC_IF_nnn) OR'ed together.

Definition at line 292 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.

Parameters
[in] idac Pointer to IDAC peripheral register block.
Note
Interrupt flags are not cleared by the use of this function.
Returns
Pending and enabled IDAC interrupt sources. The return value is the bitwise AND combination of
  • the OR combination of enabled interrupt sources in IDACx_IEN_nnn register (IDACx_IEN_nnn) and
  • the OR combination of valid interrupt flags of the IDAC module (IDACx_IF_nnn).

Definition at line 316 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.

Parameters
[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 339 of file em_idac.h .

References IDAC_TypeDef::IFS .

void IDAC_MinimalOutputTransitionMode ( IDAC_TypeDef * idac,
bool enable
)

Enable/disable Minimal Output Transition mode.

Parameters
[in] idac Pointer to IDAC peripheral register block.
[in] enable true to enable Minimal Output Transition mode, false to disable.

Definition at line 166 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.

Parameters
[in] idac Pointer to IDAC peripheral register block.
[in] enable true to enable the IDAC OUT pin, false to disable.

Definition at line 331 of file em_idac.c .

References _IDAC_CTRL_APORTOUTEN_SHIFT , BUS_RegBitWrite() , and IDAC_TypeDef::CTRL .

void IDAC_Reset ( IDAC_TypeDef * idac )

Reset IDAC to same state as after a HW reset.

Parameters
[in] idac Pointer to IDAC peripheral register block.

Definition at line 128 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.

Parameters
[in] idac Pointer to IDAC peripheral register block.
[in] step Step value for IDAC output. Valid range is 0-31.

Definition at line 308 of file em_idac.c .

References _IDAC_CURPROG_STEPSEL_MASK , _IDAC_CURPROG_STEPSEL_SHIFT , and IDAC_TypeDef::CURPROG .