IDAC - Current DAC#

Current Digital-to-Analog Converter (IDAC) Peripheral API.

IDAC can source or sink a configurable constant current, which can be output on, or sinked from pin or ADC. Current is configurable with several ranges of various step sizes. IDAC can be used with PRS and can operate down to EM3.

The following steps are necessary for basic operation:

Clock enable:

/* IDAC is a HFPERCLK peripheral */
CMU_ClockEnable(cmuClock_HFPER, true);
CMU_ClockEnable(cmuClock_IDAC0, true);

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

/* Initialize with default settings. Change output to APORT1YCH1. */
IDAC_Init_TypeDef init = IDAC_INIT_DEFAULT;
init.outMode = idacOutputAPORT1YCH1;
IDAC_Init(IDAC0, &init);

Set output:

/* Set 50nA step and enable output */
IDAC_StepSet(IDAC0, 0);
IDAC_OutEnable(IDAC0, true);

Modules#

IDAC_Init_TypeDef

Enumerations#

enum
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
}

Output mode.

enum
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
}

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

enum
idacCurrentRange0 = IDAC_CURPROG_RANGESEL_RANGE0
idacCurrentRange1 = IDAC_CURPROG_RANGESEL_RANGE1
idacCurrentRange2 = IDAC_CURPROG_RANGESEL_RANGE2
idacCurrentRange3 = IDAC_CURPROG_RANGESEL_RANGE3
}

Selects which current range to use.

Functions#

void
IDAC_Init(IDAC_TypeDef *idac, const IDAC_Init_TypeDef *init)

Initialize IDAC.

void
IDAC_Enable(IDAC_TypeDef *idac, bool enable)

Enable/disable IDAC.

void
IDAC_Reset(IDAC_TypeDef *idac)

Reset IDAC to the same state that it was in after a hardware reset.

void
IDAC_MinimalOutputTransitionMode(IDAC_TypeDef *idac, bool enable)

Enable/disable Minimal Output Transition mode.

void
IDAC_RangeSet(IDAC_TypeDef *idac, const IDAC_Range_TypeDef range)

Set the current range of the IDAC output.

void
IDAC_StepSet(IDAC_TypeDef *idac, const uint32_t step)

Set the current step of the IDAC output.

void
IDAC_OutEnable(IDAC_TypeDef *idac, bool enable)

Enable/disable the IDAC OUT pin.

void
IDAC_IntClear(IDAC_TypeDef *idac, uint32_t flags)

Clear one or more pending IDAC interrupts.

void
IDAC_IntDisable(IDAC_TypeDef *idac, uint32_t flags)

Disable one or more IDAC interrupts.

void
IDAC_IntEnable(IDAC_TypeDef *idac, uint32_t flags)

Enable one or more IDAC interrupts.

uint32_t
IDAC_IntGet(IDAC_TypeDef *idac)

Get pending IDAC interrupt flags.

uint32_t
IDAC_IntGetEnabled(IDAC_TypeDef *idac)

Get enabled and pending IDAC interrupt flags.

void
IDAC_IntSet(IDAC_TypeDef *idac, uint32_t flags)

Set one or more pending IDAC interrupts from SW.

Macros#

#define

Default configuration for IDAC initialization structure.

Enumeration Documentation#

IDAC_OutMode_TypeDef#

IDAC_OutMode_TypeDef

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 86 of file platform/emlib/inc/em_idac.h

IDAC_PRSSEL_TypeDef#

IDAC_PRSSEL_TypeDef

Selects which Peripheral Reflex System (PRS) signal to use when PRS is set to control 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 128 of file platform/emlib/inc/em_idac.h

IDAC_Range_TypeDef#

IDAC_Range_TypeDef

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 148 of file platform/emlib/inc/em_idac.h

Function Documentation#

IDAC_Init#

void IDAC_Init (IDAC_TypeDef *idac, const IDAC_Init_TypeDef *init)

Initialize IDAC.

Parameters
[in]idac

A pointer to the IDAC peripheral register block.

[in]init

A pointer to the IDAC initialization structure.

Initializes IDAC according to the initialization structure parameter and sets the default calibration value stored in the DEVINFO structure.

Note

  • This function will disable IDAC prior to configuration.


Definition at line 71 of file platform/emlib/src/em_idac.c

IDAC_Enable#

void IDAC_Enable (IDAC_TypeDef *idac, bool enable)

Enable/disable IDAC.

Parameters
[in]idac

A pointer to the IDAC peripheral register block.

[in]enable

True to enable IDAC, false to disable.


Definition at line 113 of file platform/emlib/src/em_idac.c

IDAC_Reset#

void IDAC_Reset (IDAC_TypeDef *idac)

Reset IDAC to the same state that it was in after a hardware reset.

Parameters
[in]idac

A pointer to the IDAC peripheral register block.


Definition at line 126 of file platform/emlib/src/em_idac.c

IDAC_MinimalOutputTransitionMode#

void IDAC_MinimalOutputTransitionMode (IDAC_TypeDef *idac, bool enable)

Enable/disable Minimal Output Transition mode.

Parameters
[in]idac

A pointer to the IDAC peripheral register block.

[in]enable

True to enable Minimal Output Transition mode, false to disable.


Definition at line 164 of file platform/emlib/src/em_idac.c

IDAC_RangeSet#

void IDAC_RangeSet (IDAC_TypeDef *idac, const IDAC_Range_TypeDef range)

Set the current range of the IDAC output.

Parameters
[in]idac

A pointer to the IDAC peripheral register block.

[in]range

The current range value.

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.


Definition at line 186 of file platform/emlib/src/em_idac.c

IDAC_StepSet#

void IDAC_StepSet (IDAC_TypeDef *idac, const uint32_t step)

Set the current step of the IDAC output.

Parameters
[in]idac

A pointer to the IDAC peripheral register block.

[in]step

A step value for the IDAC output. A valid range is 0-31.


Definition at line 306 of file platform/emlib/src/em_idac.c

IDAC_OutEnable#

void IDAC_OutEnable (IDAC_TypeDef *idac, bool enable)

Enable/disable the IDAC OUT pin.

Parameters
[in]idac

A pointer to the IDAC peripheral register block.

[in]enable

True to enable the IDAC OUT pin, false to disable.

Warnings

  • This function will not enable/disable the IDAC OUT pin if APORTOUTENPRS is set because output enable will be controlled by PRS.


Definition at line 333 of file platform/emlib/src/em_idac.c

IDAC_IntClear#

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 250 of file platform/emlib/inc/em_idac.h

IDAC_IntDisable#

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 266 of file platform/emlib/inc/em_idac.h

IDAC_IntEnable#

void IDAC_IntEnable (IDAC_TypeDef *idac, uint32_t flags)

Enable one or more IDAC interrupts.

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 IDAC module (IDAC_IF_nnn) OR'ed together.

Note

  • Depending on the use, a pending interrupt may already be set prior to enabling the interrupt. To ignore a pending interrupt, consider using IDAC_IntClear() prior to enabling the interrupt.


Definition at line 287 of file platform/emlib/inc/em_idac.h

IDAC_IntGet#

uint32_t IDAC_IntGet (IDAC_TypeDef *idac)

Get pending IDAC interrupt flags.

Parameters
[in]idac

Pointer to IDAC peripheral register block.

Note

  • Event bits are not cleared by the use of this function.

Returns

  • IDAC interrupt source(s) pending. Returns one or more valid interrupt flags for IDAC module (IDAC_IF_nnn) OR'ed together.


Definition at line 306 of file platform/emlib/inc/em_idac.h

IDAC_IntGetEnabled#

uint32_t IDAC_IntGetEnabled (IDAC_TypeDef *idac)

Get enabled and pending IDAC interrupt flags.

Parameters
[in]idac

Pointer to IDAC 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 IDAC interrupt sources. 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 IDAC module (IDACx_IF_nnn).


Definition at line 330 of file platform/emlib/inc/em_idac.h

IDAC_IntSet#

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 IDAC module (IDAC_IF_nnn) OR'ed together.


Definition at line 353 of file platform/emlib/inc/em_idac.h

Macro Definition Documentation#

IDAC_INIT_DEFAULT#

#define IDAC_INIT_DEFAULT
Value:
{ \
false, /**< Leave IDAC disabled when initialization done. */ \
idacOutputAPORT1XCH0, /**< Output to APORT. */ \
false, /**< Disable PRS triggering. */ \
idacPRSSELCh0, /**< Select PRS ch0 (if PRS triggering enabled). */ \
false /**< Disable current sink mode. */ \
}

Default configuration for IDAC initialization structure.


Definition at line 213 of file platform/emlib/inc/em_idac.h