Beware that this post is related to an SDK in maintenance mode
More Info: Consider nRF Connect SDK for new designs
This post is older than 2 years and might not be relevant anymore
More Info: Consider searching for newer posts

Can't stop SAADC

Hi,

When I try to stop ADC sampling, the adc driver keeps on busy. The function nrf_drv_saadc_is_busy() keeps returning true.

I looked in other posts (like this one) and found that this is the way to start and stop ADC:

void start_adc()
{
    saadc_sampling_event_init();
    saadc_init();
    saadc_sampling_event_enable();
}

void stop_adc()
{
	nrf_drv_timer_disable(&m_timer);
	nrf_drv_ppi_channel_disable(m_ppi_channel);
	while(nrf_drv_saadc_is_busy()); //--> always true
	nrf_drv_saadc_uninit();
}

But this is not working because while(nrf_drv_saadc_is_busy()); keeps returning true.

I'm using SDK 14 with double buffer and ble communication.

I read also this post and understood that it might be because of the double buffer. So I tried disabling it by:

1. Changing static nrf_saadc_value_t m_buffer_pool[2][SAADC_SAMPLES_IN_BUFFER] to static nrf_saadc_value_t m_buffer_pool[1][SAADC_SAMPLES_IN_BUFFER]

2. Deleting the following from saadc_init():

err_code = nrf_drv_saadc_buffer_convert(m_buffer_pool[1],SAADC_SAMPLES_IN_BUFFER);
APP_ERROR_CHECK(err_code);

and left only with:

    err_code = nrf_drv_saadc_buffer_convert(m_buffer_pool[0],SAADC_SAMPLES_IN_BUFFER);
    APP_ERROR_CHECK(err_code);

Am I doing this correctly?

Thanks!

Parents Reply Children
Related