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.