So what I understand from the lesson over here is that we have couple of timers available to us and each timer comprise of multiple compare/capture register which can be used to generate and service an interrupt when the value of CC register is equal to the set value. In the following code I am trying to implement this feature to toggle two different LEDs using two CC register. I have set the value in CC by converting ms to ticks. Essentially telling timer to service interrupts when values in CC register equals x milliseconds hence toggeling LEDs at different time intervals in correspondence to CC registers values . I am not sure what I am doing wrong. Would love to know if there is some concept I need to understand.
#include <stdbool.h> #include <stdint.h> #include "nrf.h" #include "nrf_drv_timer.h" #include "bsp.h" #include "app_error.h" #define LED1 17 #define LED2 18 const nrf_drv_timer_t TIMER_LED = NRF_DRV_TIMER_INSTANCE(0); void timer0_handler(nrf_timer_event_t event_type, void *p_context) { switch(event_type) { case NRF_TIMER_EVENT_COMPARE0: nrf_gpio_pin_toggle(LED1); break; case NRF_TIMER_EVENT_COMPARE1: nrf_gpio_pin_toggle(LED2); break; default: //nothing break; } } void timer_init(void) { uint32_t err_code = NRF_SUCCESS; uint32_t time_ms = 100; uint32_t time_ms2 = 500; uint32_t time_ticks; uint32_t time_ticks2; nrf_drv_timer_config_t timer_cfg = NRF_DRV_TIMER_DEFAULT_CONFIG; // Default timer config err_code = nrf_drv_timer_init(&TIMER_LED, &timer_cfg, timer0_handler); // init the timer with custom timer instance, config and handler for it APP_ERROR_CHECK(err_code); time_ticks = nrf_drv_timer_ms_to_ticks(&TIMER_LED, time_ms); // convert ms to ticks so that timer compare register can generate interprit time_ticks2 = nrf_drv_timer_ms_to_ticks(&TIMER_LED, time_ms2); // convert ms to ticks so that timer compare register can generate interprit nrf_drv_timer_extended_compare(&TIMER_LED, NRF_TIMER_CC_CHANNEL0, time_ticks, NRF_TIMER_SHORT_COMPARE0_CLEAR_MASK, true); nrf_drv_timer_extended_compare(&TIMER_LED, NRF_TIMER_CC_CHANNEL1, time_ticks2, NRF_TIMER_SHORT_COMPARE1_CLEAR_MASK, true); } int main(void) { nrf_gpio_cfg_output(LED1); nrf_gpio_cfg_output(LED2); nrf_gpio_pin_set(LED1); nrf_gpio_pin_set(LED2); timer_init(); nrf_drv_timer_enable(&TIMER_LED); while (1) { __WFI(); } }