Hi
I am using TIMER3 and TIMER4 for generating PWM signals using PPI and synchronizing ADC sampling, respectively. I posted the preliminary project in here. After taking the ADC samples the device has to go to sleep mode to save power. I just notice that, after disabling(uninit) the PPI, TIMER and ADC, the device draws 600uA which is a way too much than expected. When I debug, it seems the TIMER is the one that is drawing too much current. The functions I use to uninitialize the TIMERs, PPI and ADC are the following. Did I do something wrong in my code?
// unit PPI void pwm_ppi_unint(void) { NRF_PPI->CHENCLR = (1 << PWM0_PPI_CH_LOW) | (1 << PWM0_PPI_CH_HIGH) | (1 << PWM1_PPI_CH_LOW) | (1 << PWM1_PPI_CH_HIGH) | ( 1 << TIMER4_PPI_CH_A) | ( 1 << TIMER4_PPI_CH_B); NRF_GPIOTE->CONFIG[PWM0_GPIOTE_CH] = NRF_GPIOTE->TASKS_CLR[PWM0_GPIOTE_CH]; NRF_GPIOTE->CONFIG[PWM1_GPIOTE_CH] = NRF_GPIOTE->TASKS_CLR[PWM1_GPIOTE_CH]; } // Stop and clear timer void uninit_timers(void) { NRF_TIMER3->TASKS_STOP; NRF_TIMER3->TASKS_CLEAR; NRF_TIMER3->TASKS_SHUTDOWN; // This is important!!! NRF_TIMER4->TASKS_STOP; NRF_TIMER4->TASKS_CLEAR; NRF_TIMER4->TASKS_SHUTDOWN; } //uninit adc void adc_uninit(void) { nrf_saadc_int_disable(NRF_SAADC_INT_ALL); nrf_drv_common_irq_disable(SAADC_IRQn); nrf_saadc_task_trigger(NRF_SAADC_TASK_STOP); uint32_t timeout = 3; while (nrf_saadc_event_check(NRF_SAADC_EVENT_STOPPED) == 0 && timeout > 0) { --timeout; } nrf_saadc_disable(); }