[nRF52833] TIMER3 does not enter IRQ and keeps going

Hello,

I am trying to use TIMER3 where it should count 1ms ticks for 15 seconds and then stop.

Tried the below code. However it never enters ISR. 

Please let me know if I am configuring it incorrectly or something else.

As Channel 0 is being used by Timer 2 already, I have chosen channel 3.

Also tried setting priority to 3.

// Timer tick duration (1 ms = 16000 ticks at 16 MHz)
#define TIMER_TICK_1MS   16000

// Total duration (15 seconds = 15000 ms)
#define TIMER_DURATION_15S   (15000 * TIMER_TICK_1MS)


void hw_timer3_init(uint32_t tick_count) 
{

    // Stop Timer 3 before configuring
    nrf_timer_task_trigger(NRF_TIMER3, NRF_TIMER_TASK_STOP);
    // Configure TIMER3 in Timer mode
    nrf_timer_mode_set(NRF_TIMER3, NRF_TIMER_MODE_TIMER);
    // Set frequency to 16 MHz
    nrf_timer_frequency_set(NRF_TIMER3, NRF_TIMER_FREQ_16MHz);
    // Set the timer to 32-bit mode
    nrf_timer_bit_width_set(NRF_TIMER3, NRF_TIMER_BIT_WIDTH_32);
    // Set the compare value (tick_count)
    nrf_timer_cc_write(NRF_TIMER3, NRF_TIMER_CC_CHANNEL3, tick_count);
    // Enable interrupt for compare event on channel 3
    nrf_timer_int_enable(NRF_TIMER3, NRF_TIMER_INT_COMPARE3_MASK);
    // Enable TIMER3 interrupt in NVIC
    NVIC_EnableIRQ(TIMER3_IRQn);
    // Configure the timer to auto-clear on compare match
    nrf_timer_shorts_enable(NRF_TIMER3, NRF_TIMER_SHORT_COMPARE3_CLEAR_MASK);
}

void TIMER3_IRQHandler(void) 
{
    // Check for COMPARE3 event
    if (nrf_timer_event_check(NRF_TIMER3, NRF_TIMER_EVENT_COMPARE3)) 
    {
        nrf_timer_event_clear(NRF_TIMER3, NRF_TIMER_EVENT_COMPARE3);  // Clear the event

        // Stop the timer
        nrf_timer_task_trigger(NRF_TIMER3, NRF_TIMER_TASK_STOP);

        // Set GPIO P1.03 high to indicate timer expiration
        nrf_gpio_pin_toggle(NRF_GPIO_PIN_MAP(1, PIN_P1_03));
    }
}


Starting Timer 3 in main ()

    nrf_timer_task_trigger(NRF_TIMER3, NRF_TIMER_TASK_CLEAR);
    nrf_timer_task_trigger(NRF_TIMER3, NRF_TIMER_TASK_START);

Related