1. APP_timer:
static void BLE_ctrl(void* p_context){adc_action=true;}
APP_ERROR_CHECK(app_timer_create(&ADC_timer, APP_TIMER_MODE_REPEATED, ADC_ctrl));
APP_ERROR_CHECK(app_timer_start(ADC_timer, APP_TIMER_TICKS(detect_duration), NULL));
while(1){
do
{
idle_state_handle();
} while (!adc_action);
for(int i=0;i<SAMPLES_IN_BUFFER;i++){
APP_ERROR_CHECK(nrf_drv_saadc_sample());
}
}
2. ppi with nrf_drv_timer:
static void timer_handler(nrf_timer_event_t event_type, void* p_context)
{}
static void saadc_sampling_event_init(uint16_t time)
{
ret_code_t err_code;
// err_code = nrf_drv_ppi_init();
// APP_ERROR_CHECK(err_code);
nrf_drv_timer_config_t timer_cfg = NRF_DRV_TIMER_DEFAULT_CONFIG;
timer_cfg.bit_width = NRF_TIMER_BIT_WIDTH_32;
err_code = nrf_drv_timer_init(&m_timer, &timer_cfg, timer_handler);
APP_ERROR_CHECK(err_code);
/* setup m_timer for compare event every 400ms */
uint32_t ticks = nrf_drv_timer_ms_to_ticks(&m_timer, detect_duration);
nrf_drv_timer_extended_compare(&m_timer, NRF_TIMER_CC_CHANNEL3, ticks,
NRF_TIMER_SHORT_COMPARE3_CLEAR_MASK, true);
nrf_drv_timer_enable(&m_timer);
uint32_t timer_compare_event_addr =
nrf_drv_timer_compare_event_address_get(&m_timer, NRF_TIMER_CC_CHANNEL3);
uint32_t saadc_sample_task_addr = nrf_drv_saadc_sample_task_get();
/* setup ppi channel so that timer compare event is triggering sample task in SAADC */
err_code = nrf_drv_ppi_channel_alloc(&m_ppi_channel);
APP_ERROR_CHECK(err_code);
err_code =
nrf_drv_ppi_channel_assign(m_ppi_channel, timer_compare_event_addr, saadc_sample_task_addr);
APP_ERROR_CHECK(err_code);
}
// main loop
while(1){
idle_state_handle();
}

