# SAADC maxmimum performance example overview {#saadc_maximum_performance}

The sample demonstrates an advanced functionality of the nrfx_saadc driver operating at its peak performance.

## Requirements

The sample supports the following development kits:

| **Board**           | **Support** |
|---------------------|:-----------:|
| nrf52dk_nrf52832    |     Yes     |
| nrf52833dk_nrf52833 |     Yes     |
| nrf52840dk_nrf52840 |     Yes     |
| nrf5340dk_nrf5340   |     Yes     |
| nrf9160dk_nrf9160   |     Yes     |

## Overview

Application initializes the nrfx_saadc driver and starts operating in the non-blocking mode.
Sampling is performed at the highest supported frequency.
In the sample @p m_single_channel is configured, and the SAADC driver is set to the advanced mode.
To achieve the maximum performance, do the following:
- Provide an external timer in order to perform sampling at @p MAX_SAADC_SAMPLE_FREQUENCY.
  You can do this by setting up endpoints of the channel @p m_gppi_channels [ @p gppi_channels_purpose_t::SAADC_SAMPLING ] to trigger the SAADC sample task ( @p nrf_saadc_task_t::NRF_SAADC_TASK_SAMPLE ) on the TIMER COMPARE event.
- Provide hardware start-on-end.
  You can do this by setting up endpoints of the channel @p m_gppi_channels [ @p gppi_channels_purpose_t::SAADC_START_ON_END ] to trigger SAADC task start ( @p nrf_saadc_task_t::NRF_SAADC_TASK_START ) on the SAADC event end ( @p nrf_saadc_event_t::NRF_SAADC_EVENT_END ).

@p nrfx_saadc_offset_calibrate triggers calibration in a non-blocking manner.
Then, sampling is initiated at @p NRFX_SAADC_EVT_CALIBRATEDONE event in @p saadc_handler() by calling @p nrfx_saadc_mode_trigger() function.
Consecutive sample tasks are triggered by the external timer at the sample rate specified in @p SAADC_SAMPLE_FREQUENCY symbol.

In the example there is GPPI channel configured to test the functionality of SAADC.
The endpoints are setup up in a way that connects the @p NRF_SAADC_EVENT_RESULTDONE event with the GPIOTE task toggling the @p OUT_GPIO_PIN pin.

> For more information, see **SAADC driver - nrfx documentation**.

## Wiring

To run the sample correctly, connect pins as follows:
* `LOOPBACK_PIN_1A` with `LOOPBACK_PIN_1B`.

## Building and running

To run this sample, build it for the appropriate board and then flash it as per instructions in [Building and running](@ref building_and_running) section.
## Sample output

You should see the following output:

```
- "Starting nrfx_saadc maximum performance example."
- "SAADC event: CALIBRATEDONE"
- "SAADC event: READY"
- "SAADC event: BUF_REQ"
- "SAADC event: DONE"
- "Sample buffer address == 0x([0-9a-z]{8})"
- ".Sample 0. value == -?[0-9]"
- ".Sample 1. value == ([0-9]{3})"
- "SAADC event: BUF_REQ"
- "SAADC event: DONE"
- "Sample buffer address == 0x([0-9a-z]{8})"
- ".Sample 0. value == -?[0-9]"
- ".Sample 1. value == ([0-9]{3})"
- "SAADC event: BUF_REQ"
- "SAADC event: DONE"
- ".Sample 0. value == -?[0-9]"
- ".Sample 1. value == ([0-9]{3})"
```
