This post is older than 2 years and might not be relevant anymore
More Info: Consider searching for newer posts

RTC interrupt handler not working.

static void RTC1_IRQHandler(void){
  
  NRF_RTC1->TASKS_CLEAR = 1;
  SEGGER_RTT_printf(0,"INTERRUPT TRIGGERED.\n");
  if(NRF_RTC1->EVENTS_COMPARE[0]){
    NRF_RTC1->EVENTS_COMPARE[0] = 0;
    }
}

static void RTC1_INIT(uint32_t time_ticks){

  NRF_RTC1->PRESCALER = 4095;      //prescaler = 4096
  NRF_RTC1->EVTEN = (1<<16);
  NRF_RTC1->EVTENSET = (1 << 16);   //enable event routing for COMPARE[0] event
  NRF_RTC1->INTENSET = (1 << 16);   //enable interrupt for compare[0] event
  NRF_RTC1->CC[0] = time_ticks;

  NVIC_SetPriority(RTC1_IRQn, 7);
  NVIC_EnableIRQ(RTC1_IRQn);

  NRF_RTC1->TASKS_START = 1;
  SEGGER_RTT_printf(0,"RTC STARTED.\n");
}

I am trying to initialize the RTC and trigger an interrupt every 10 seconds, and I am unsure of why the code above is not working. I followed a similar method to initialize Timer1 along with an interrupt function, and that works fine. As an additional question, is the difference in power savings between RTC and TIMER (using PCLK1M) significant?

Thanks for the help.

Parents
  • Hi,

    you should declare RTC1_IRQHandler as non-static function - in this case linker will replace weak implementation from startup.s with your handler.

    As an additional question, is the difference in power savings between RTC and TIMER (using PCLK1M) significant?

    Yes, for example nRF52810 spec says that LFXO+RTC will draw about 1.1 uA, one timer running @1MHz from HFINT consumes 432 uA.

Reply
  • Hi,

    you should declare RTC1_IRQHandler as non-static function - in this case linker will replace weak implementation from startup.s with your handler.

    As an additional question, is the difference in power savings between RTC and TIMER (using PCLK1M) significant?

    Yes, for example nRF52810 spec says that LFXO+RTC will draw about 1.1 uA, one timer running @1MHz from HFINT consumes 432 uA.

Children
Related