This post is older than 2 years and might not be relevant anymore
More Info: Consider searching for newer posts

SAADC on SDK12.3

I've recently migrated from SDK11 to SDK12.3 to take advantage of the low power option. However I still am having weird issues with power consumption. I have a feature which enabled ADC measurement. When this feature gets turned off I unint the SAADC module, but power consumption seems to remain quite high (~3-4mA). I've traced this consumption to the moment SAADC is enabled.

Here's a quick snapshot of my saadc init code:

nrf_drv_saadc_config_t saadc_config;
nrf_saadc_channel_config_t channel_config =  
NRF_DRV_SAADC_DEFAULT_CHANNEL_CONFIG_SE(input_adc_pin);
channel_config.acq_time = NRF_SAADC_ACQTIME_5US; 

//Configure SAADC
saadc_config.low_power_mode	= true;
saadc_config.resolution = NRF_SAADC_RESOLUTION_14BIT; 
saadc_config.oversample = NRF_SAADC_OVERSAMPLE_DISABLED; 
saadc_config.interrupt_priority = APP_IRQ_PRIORITY_LOW;     

if( my_saad_config.saadc_initialized ) return;

err_code = nrf_drv_saadc_init(&saadc_config, my_saadc_callback);
my_adc_error_check(err_code,11);

err_code = nrf_drv_saadc_channel_init( 0, &channel_config );
my_adc_error_check(err_code,12);


nrf_saadc_channel_config_t channel_config_1 =  NRF_DRV_SAADC_DEFAULT_CHANNEL_CONFIG_SE(NRF_SAADC_INPUT_AIN3);
channel_config_1.acq_time = NRF_SAADC_ACQTIME_5US; 

err_code = nrf_drv_saadc_channel_init( 1, &channel_config_1 );
my_adc_error_check(err_code,21);

my_saad_config.saadc_initialized = true;

For Uninitializing I used the follow:

nrf_drv_saadc_uninit();
NRF_SAADC->INTENCLR = (SAADC_INTENCLR_END_Clear << SAADC_INTENCLR_END_Pos);
NVIC_ClearPendingIRQ(SAADC_IRQn);
my_saad_config.saadc_initialized = false;

Also at times when I tries and Stop/Start the module, the nrf_drv_saadc_sample() always returns a NRF_ERROR_INVALID_STATE error? I am using the Softdevice s132 V3.

Related