nrfx 2.5
Modules | Data Structures | Macros | Typedefs | Enumerations | Functions
SAADC driver

Successive Approximation Analog-to-Digital Converter (SAADC) peripheral driver. More...

Modules

 SAADC peripheral driver configuration
 

Data Structures

struct  nrfx_saadc_channel_t
 SAADC channel configuration structure. More...
 
struct  nrfx_saadc_adv_config_t
 SAADC driver advanced mode configuration structure. More...
 
struct  nrfx_saadc_done_evt_t
 SAADC driver done event data. More...
 
struct  nrfx_saadc_limit_evt_t
 SAADC driver limit event data. More...
 
struct  nrfx_saadc_evt_t
 SAADC driver event structure. More...
 

Macros

#define NRFX_SAADC_DEFAULT_CHANNEL_SE(_pin_p, _index)
 SAADC channel default configuration for the single-ended mode. More...
 
#define NRFX_SAADC_DEFAULT_CHANNEL_DIFFERENTIAL(_pin_p, _pin_n, _index)
 SAADC channel default configuration for the differential mode. More...
 
#define NRFX_SAADC_DEFAULT_ADV_CONFIG
 SAADC driver advanced mode default configuration. More...
 

Typedefs

typedef void(* nrfx_saadc_event_handler_t) (nrfx_saadc_evt_t const *p_event)
 SAADC driver event handler. More...
 

Enumerations

enum  nrfx_saadc_evt_type_t {
  NRFX_SAADC_EVT_DONE,
  NRFX_SAADC_EVT_LIMIT,
  NRFX_SAADC_EVT_CALIBRATEDONE,
  NRFX_SAADC_EVT_BUF_REQ,
  NRFX_SAADC_EVT_READY,
  NRFX_SAADC_EVT_FINISHED
}
 SAADC driver event types. More...
 

Functions

nrfx_err_t nrfx_saadc_init (uint8_t interrupt_priority)
 Function for initializing the SAADC driver. More...
 
void nrfx_saadc_uninit (void)
 Function for uninitializing the SAADC driver. More...
 
nrfx_err_t nrfx_saadc_channels_config (nrfx_saadc_channel_t const *p_channels, uint32_t channel_count)
 Function for configuring multiple SAADC channels. More...
 
nrfx_err_t nrfx_saadc_channel_config (nrfx_saadc_channel_t const *p_channel)
 Function for configuring single SAADC channel. More...
 
nrfx_err_t nrfx_saadc_channels_deconfig (uint32_t channel_mask)
 Function for deconfiguring the specified SAADC channels. More...
 
nrfx_err_t nrfx_saadc_simple_mode_set (uint32_t channel_mask, nrf_saadc_resolution_t resolution, nrf_saadc_oversample_t oversampling, nrfx_saadc_event_handler_t event_handler)
 Function for setting the SAADC driver in the simple mode. More...
 
nrfx_err_t nrfx_saadc_advanced_mode_set (uint32_t channel_mask, nrf_saadc_resolution_t resolution, nrfx_saadc_adv_config_t const *p_config, nrfx_saadc_event_handler_t event_handler)
 Function for setting the SAADC driver in the advanced mode. More...
 
nrfx_err_t nrfx_saadc_buffer_set (nrf_saadc_value_t *p_buffer, uint16_t size)
 Function for supplying the buffer to be used in the next part of the conversion. More...
 
nrfx_err_t nrfx_saadc_mode_trigger (void)
 Function for triggering the conversion in the configured mode. More...
 
void nrfx_saadc_abort (void)
 Function for aborting the ongoing and buffered conversions. More...
 
nrfx_err_t nrfx_saadc_limits_set (uint8_t channel, int16_t limit_low, int16_t limit_high)
 Function for setting the SAADC channel limits. More...
 
nrfx_err_t nrfx_saadc_offset_calibrate (nrfx_saadc_event_handler_t event_handler)
 Function for starting the SAADC offset calibration. More...
 

Detailed Description

Successive Approximation Analog-to-Digital Converter (SAADC) peripheral driver.

Macro Definition Documentation

◆ NRFX_SAADC_DEFAULT_ADV_CONFIG

#define NRFX_SAADC_DEFAULT_ADV_CONFIG
Value:
{ \
.oversampling = NRF_SAADC_OVERSAMPLE_DISABLED, \
.internal_timer_cc = 0, \
.start_on_end = false, \
}
No oversampling.
Definition: nrf_saadc.h:49
Burst mode is disabled (normal operation).
Definition: nrf_saadc.h:110

SAADC driver advanced mode default configuration.

This configuration sets up advanced mode of the SAADC driver with the following options:

  • oversampling disabled
  • burst disabled
  • internal sampling timer disabled
  • triggering of the START task on the END event disabled
Parameters
[in]_pin_pPositive input analog pin.
[in]_pin_nNegative input analog pin.
[in]_indexChannel index.
See also
nrfx_saadc_adv_config_t

◆ NRFX_SAADC_DEFAULT_CHANNEL_DIFFERENTIAL

#define NRFX_SAADC_DEFAULT_CHANNEL_DIFFERENTIAL (   _pin_p,
  _pin_n,
  _index 
)
Value:
{ \
.channel_config = \
{ \
.resistor_p = NRF_SAADC_RESISTOR_DISABLED, \
.resistor_n = NRF_SAADC_RESISTOR_DISABLED, \
.gain = NRF_SAADC_GAIN1_6, \
.acq_time = NRF_SAADC_ACQTIME_10US, \
}, \
.pin_p = (nrf_saadc_input_t)_pin_p, \
.pin_n = (nrf_saadc_input_t)_pin_n, \
.channel_index = _index, \
}
Internal reference (0.6 V).
Definition: nrf_saadc.h:85
nrf_saadc_input_t
Input selection for the analog-to-digital converter.
Definition: nrf_saadc.h:29
Gain factor 1/6.
Definition: nrf_saadc.h:72
Bypass resistor ladder.
Definition: nrf_saadc.h:63
Differential mode.
Definition: nrf_saadc.h:104
10 us.
Definition: nrf_saadc.h:94
Burst mode is disabled (normal operation).
Definition: nrf_saadc.h:110

SAADC channel default configuration for the differential mode.

This configuration sets up differential SAADC channel with the following options:

  • resistor ladder disabled
  • gain: 1/6
  • reference voltage: internal 0.6 V
  • sample acquisition time: 10 us
  • burst disabled
Parameters
[in]_pin_pPositive input analog pin.
[in]_pin_nNegative input analog pin.
[in]_indexChannel index.
See also
nrfx_saadc_channel_t

◆ NRFX_SAADC_DEFAULT_CHANNEL_SE

#define NRFX_SAADC_DEFAULT_CHANNEL_SE (   _pin_p,
  _index 
)
Value:
{ \
.channel_config = \
{ \
.resistor_p = NRF_SAADC_RESISTOR_DISABLED, \
.resistor_n = NRF_SAADC_RESISTOR_DISABLED, \
.gain = NRF_SAADC_GAIN1_6, \
.acq_time = NRF_SAADC_ACQTIME_10US, \
}, \
.pin_p = (nrf_saadc_input_t)_pin_p, \
.channel_index = _index, \
}
Internal reference (0.6 V).
Definition: nrf_saadc.h:85
nrf_saadc_input_t
Input selection for the analog-to-digital converter.
Definition: nrf_saadc.h:29
Not connected.
Definition: nrf_saadc.h:31
Single-ended mode. PSELN will be ignored, negative input to ADC shorted to GND.
Definition: nrf_saadc.h:103
Gain factor 1/6.
Definition: nrf_saadc.h:72
Bypass resistor ladder.
Definition: nrf_saadc.h:63
10 us.
Definition: nrf_saadc.h:94
Burst mode is disabled (normal operation).
Definition: nrf_saadc.h:110

SAADC channel default configuration for the single-ended mode.

This configuration sets up single-ended SAADC channel with the following options:

  • resistor ladder disabled
  • gain: 1/6
  • reference voltage: internal 0.6 V
  • sample acquisition time: 10 us
  • burst disabled
Parameters
[in]_pin_pPositive input analog pin.
[in]_indexChannel index.
See also
nrfx_saadc_channel_t

Typedef Documentation

◆ nrfx_saadc_event_handler_t

typedef void(* nrfx_saadc_event_handler_t) (nrfx_saadc_evt_t const *p_event)

SAADC driver event handler.

When operating in the advanced mode:

Parameters
[in]p_eventPointer to an SAADC driver event. The event structure is allocated on the stack, so it is valid only within the context of the event handler.

Enumeration Type Documentation

◆ nrfx_saadc_evt_type_t

SAADC driver event types.

Enumerator
NRFX_SAADC_EVT_DONE 

Event generated when the buffer is filled with samples.

NRFX_SAADC_EVT_LIMIT 

Event generated when one of the limits is reached.

NRFX_SAADC_EVT_CALIBRATEDONE 

Event generated when the calibration is complete.

NRFX_SAADC_EVT_BUF_REQ 

Event generated when the next buffer for continuous conversion is requested.

NRFX_SAADC_EVT_READY 

Event generated when the first buffer is acquired by the peripheral and sampling can be started.

NRFX_SAADC_EVT_FINISHED 

Event generated when all supplied buffers are filled with results.

Function Documentation

◆ nrfx_saadc_abort()

void nrfx_saadc_abort ( void  )

Function for aborting the ongoing and buffered conversions.

Note
NRFX_SAADC_EVT_DONE event will be generated if there is a conversion in progress. Event will contain number of words in the sample buffer.

◆ nrfx_saadc_advanced_mode_set()

nrfx_err_t nrfx_saadc_advanced_mode_set ( uint32_t  channel_mask,
nrf_saadc_resolution_t  resolution,
nrfx_saadc_adv_config_t const *  p_config,
nrfx_saadc_event_handler_t  event_handler 
)

Function for setting the SAADC driver in the advanced mode.

The advanced mode allows performing double-buffered conversions of arbitrary length. The conversions can be done in a blocking or non-blocking manner. When performing conversions in the non-blocking manner and nrfx_saadc_adv_config_t::internal_timer_cc is set to 0, sampling needs to be done by triggering NRF_SAADC_TASK_SAMPLE externally (for example by using the TIMER and/or the PPI/DPPI). When performing conversions in the non-blocking manner and nrfx_saadc_adv_config_t::start_on_end is false, the NRF_SAADC_TASK_START needs to be triggered on NRF_SAADC_EVENT_END externally (for example by using the PPI/DPPI). Sampling is initiated by calling nrfx_saadc_mode_trigger(). In case of performing conversions in the blocking manner, nrfx_saadc_mode_trigger() may need to be called several times as each call sample each requested channel once.

Note
The internal timer can only be used when a single input channel is enabled.
The internal timer can only be used in the non-blocking mode.
Parameters
[in]channel_maskBitmask of channels to be used in the advanced mode.
[in]resolutionResolution configuration.
[in]p_configPointer to the structure with the advanced mode configuration.
[in]event_handlerEvent handler provided by the user. In case of providing NULL, the conversion will be performed in the blocking manner.
Return values
NRFX_SUCCESSInitialization was successful.
NRFX_ERROR_BUSYThere is a conversion or calibration ongoing.
NRFX_ERROR_INVALID_PARAMAttempt to activate channel that is not configured.
NRFX_ERROR_NOT_SUPPORTEDAttempt to activate internal timer or oversampling without burst with multiple channels enabled.

◆ nrfx_saadc_buffer_set()

nrfx_err_t nrfx_saadc_buffer_set ( nrf_saadc_value_t p_buffer,
uint16_t  size 
)

Function for supplying the buffer to be used in the next part of the conversion.

Parameters
[in]p_bufferPointer to the buffer to be filled with conversion results.
[in]sizeNumber of nrf_saadc_value_t samples in buffer.
Return values
NRFX_SUCCESSBuffer was supplied successfully.
NRFX_ERROR_INVALID_ADDRThe provided buffer is not in the Data RAM region.
NRFX_ERROR_INVALID_LENGTHThe provided buffer is not aligned to the number of activated channels or is too long for the EasyDMA to handle.
NRFX_ERROR_INVALID_STATEThe driver is in the idle mode.
NRFX_ERROR_ALREADY_INITIALIZEDBoth buffers for double-buffered conversions are already set.

◆ nrfx_saadc_channel_config()

nrfx_err_t nrfx_saadc_channel_config ( nrfx_saadc_channel_t const *  p_channel)

Function for configuring single SAADC channel.

Note
The values of the nrf_saadc_channel_config_t::burst fields in channel configurations are ignored. They will be overridden with the value suitable for the selected driver operation mode.
Warning
This function overrides previous configuration done on specified channel by nrfx_saadc_channels_config or nrfx_saadc_channel_config.
Parameters
[in]p_channelPointer to the channel configuration structure.
Return values
NRFX_SUCCESSConfiguration was successful.
NRFX_ERROR_BUSYThere is a conversion or calibration ongoing.

◆ nrfx_saadc_channels_config()

nrfx_err_t nrfx_saadc_channels_config ( nrfx_saadc_channel_t const *  p_channels,
uint32_t  channel_count 
)

Function for configuring multiple SAADC channels.

Note
The values of the nrf_saadc_channel_config_t::burst fields in channel configurations are ignored. They will be overridden with the value suitable for the selected driver operation mode.
The desired mode (simple or advanced) must be set after the channels are configured.
Warning
This function overrides previous configuration done on any channel by nrfx_saadc_channels_config or nrfx_saadc_channel_config.
Parameters
[in]p_channelsPointer to the array of channel configuration structures.
[in]channel_countNumber of channels to be configured.
Return values
NRFX_SUCCESSConfiguration was successful.
NRFX_ERROR_BUSYThere is a conversion or calibration ongoing.
NRFX_ERROR_INVALID_PARAMAttempt to configure the same channel more than once.

◆ nrfx_saadc_channels_deconfig()

nrfx_err_t nrfx_saadc_channels_deconfig ( uint32_t  channel_mask)

Function for deconfiguring the specified SAADC channels.

Parameters
[in]channel_maskBitmask of channels to be deconfigured.
Return values
NRFX_SUCCESSDeconfiguration was successful.
NRFX_ERROR_BUSYThere is a conversion or calibration ongoing.

◆ nrfx_saadc_init()

nrfx_err_t nrfx_saadc_init ( uint8_t  interrupt_priority)

Function for initializing the SAADC driver.

Parameters
[in]interrupt_priorityInterrupt priority.
Return values
NRFX_SUCCESSInitialization was successful.
NRFX_ERROR_INVALID_STATEThe driver is already initialized.

◆ nrfx_saadc_limits_set()

nrfx_err_t nrfx_saadc_limits_set ( uint8_t  channel,
int16_t  limit_low,
int16_t  limit_high 
)

Function for setting the SAADC channel limits.

When limits are enabled and the conversion result exceeds the defined bounds, the handler function is called with the corresponding event as parameter.

Note
Before the limits are set, the driver operation mode (simple or advanced) has to be configured. Only non-blocking conversions can be monitored.
Changing of the driver operation mode disables all configured limits.
Parameters
[in]channelChannel index.
[in]limit_lowLimit low value to generate interrupt. Use INT16_MIN to disable interrupt generation.
[in]limit_highLimit high value to generate interrupt. Use INT16_MAX to disable interrupt generation.
Return values
NRFX_SUCCESSRequested channel limits were set.
NRFX_ERROR_INVALID_PARAMAttempt to activate the limits on disabled channel.
NRFX_ERROR_FORBIDDENAttempt to activate the limits for blocking conversions.
NRFX_ERROR_INVALID_STATEAttempt to activate the limits without configured mode.

◆ nrfx_saadc_mode_trigger()

nrfx_err_t nrfx_saadc_mode_trigger ( void  )

Function for triggering the conversion in the configured mode.

Return values
NRFX_SUCCESSOperation finished successfully in the blocking manner or started successfully in the non-blocking manner.
NRFX_ERROR_BUSYThe driver is performing the conversion in the advanced blocking mode. Call the function again to continue the conversion.
NRFX_ERROR_NO_MEMThere is no buffer provided. Supply the buffer using nrfx_saadc_buffer_set() and try again.
NRFX_ERROR_INVALID_STATEThere is an ongoing conversion being performed in the non-blocking manner or the driver is in the idle mode.

◆ nrfx_saadc_offset_calibrate()

nrfx_err_t nrfx_saadc_offset_calibrate ( nrfx_saadc_event_handler_t  event_handler)

Function for starting the SAADC offset calibration.

Note
This function cancels the currently selected driver operation mode, if any. The desired mode (simple or advanced) must be set after the calibration process completes.
Parameters
[in]event_handlerEvent handler provided by the user. In case of providing NULL, the calibration will be performed in the blocking manner.
Return values
NRFX_SUCCESSCalibration finished successfully in the blocking manner or started successfully in the non-blocking manner.
NRFX_ERROR_BUSYThere is a conversion or calibration ongoing.

◆ nrfx_saadc_simple_mode_set()

nrfx_err_t nrfx_saadc_simple_mode_set ( uint32_t  channel_mask,
nrf_saadc_resolution_t  resolution,
nrf_saadc_oversample_t  oversampling,
nrfx_saadc_event_handler_t  event_handler 
)

Function for setting the SAADC driver in the simple mode.

The simple mode allows obtaining a single sample from each requested channel. The conversion can be done in a blocking or non-blocking manner. Sampling is initiated by calling nrfx_saadc_mode_trigger() once.

Parameters
[in]channel_maskBitmask of channels to be used in the simple mode.
[in]resolutionResolution configuration.
[in]oversamplingOversampling configuration.
[in]event_handlerEvent handler provided by the user. In case of providing NULL, the conversion will be performed in the blocking manner.
Return values
NRFX_SUCCESSInitialization was successful.
NRFX_ERROR_BUSYThere is a conversion or calibration ongoing.
NRFX_ERROR_INVALID_PARAMAttempt to activate channel that is not configured.

◆ nrfx_saadc_uninit()

void nrfx_saadc_uninit ( void  )

Function for uninitializing the SAADC driver.

This function stops all ongoing conversions and disables all channels.


Documentation feedback | Developer Zone | Subscribe | Updated