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

Use of Timer shortcuts without Interrupt

Hi,

(SDK v14.2, nRF52832)

I'm developing a Timeout Timer functionality, and was wandering if the following scenario is a good practice:

I don't want to have a interrupt at all, but I want my timer to stop automatically if it has been timeout. So, is using Timer Shortcut with Compare Event  (while interrupts are disabled) reasonable?

(for some reason, i feel like something wrong here)

Timer Init:

void TIMEOUT_T1_Init(void)
{
  NRF_TIMER1->TASKS_STOP  = 1;
  NRF_TIMER1->TASKS_CLEAR = 1;

  NRF_TIMER1->MODE      = 0;  /* 'Timer' mode           */
  NRF_TIMER1->BITMODE   = 3;  /* 32 bit timer bith width*/
  NRF_TIMER1->PRESCALER = 4;  /* 1us timer --> f(timer) = 16Mhz / (2^PRESCALER)*/
  
  NRF_TIMER1->INTENCLR = (0x3F << 16U);  /* disabling all interupts for Timer 1*/
  
}

Timer Timeout Start:

/*
 * TIMEOUT_T1_Start
 *
 * MCU HARDWARE:
 *     NRF52 Timer 1.
 * 
 * PARAMETERS:
 *      timeout_us(uint32_t): timeout in microsecond.
 */
void TIMEOUT_T1_Start(uint32_t timeout_us)
{
  NRF_TIMER1->TASKS_STOP  = 1;
  NRF_TIMER1->TASKS_CLEAR = 1;
  
  NRF_TIMER1->EVENTS_COMPARE[TIMER_SHORTS_COMPARE1] = 0;
  
  NRF_TIMER1->CC[TIMER_SHORTS_COMPARE1] = timeout_us;
  
  NRF_TIMER1->SHORTS = TIMER_SHORTS_COMPARE1_STOP_Msk;  /* shortcut between COMPARE[Channel 1] and STOP task*/
  
  NRF_TIMER1->TASKS_START = 1;
}

Thanks.

Parents Reply Children
Related