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

Timer In S120 mode not giving exact tick delay

Hi I am working on NRF51822. I am using S120 ble_app_multilink_central example. I am trying to create a Timer1 interrupt of 1ms interval. My interrupt is working but interval is not 1ms.It is much bigger than 1mS.

My Timer code is as below-

void start_timer(void)
{	    
	NRF_TIMER1->MODE = TIMER_MODE_MODE_Timer;  // Set the timer in Counter Mode
	NRF_TIMER1->PRESCALER = 6;                             //Set prescaler. Higher number gives slower timer. Prescaler = 0 gives 16MHz timer
	NRF_TIMER1->BITMODE = TIMER_BITMODE_BITMODE_16Bit;		 //Set counter to 16 bit resolution
	NRF_TIMER1->CC[0] =250;                             //Set value for TIMER2 compare register 0
	NRF_TIMER1->TASKS_CLEAR = 1;               // clear the task first to be usable for later
	NRF_TIMER1->INTENSET = (TIMER_INTENSET_COMPARE0_Enabled << TIMER_INTENSET_COMPARE0_Pos) ;
	NVIC_EnableIRQ(TIMER1_IRQn);
	NRF_TIMER1->TASKS_START = 1;               // Start TIMER1
}
    		

void TIMER1_IRQHandler(void)
{
	if ((NRF_TIMER1->EVENTS_COMPARE[0] != 0))
	{
		NRF_TIMER1->EVENTS_COMPARE[0] = 0;           //Clear compare register 0 event	
			//toggle some gpio here
		
	}    	
}
int main(void){
	app_trace_init();
    NRF_CLOCK->EVENTS_HFCLKSTARTED  = 0;
    NRF_CLOCK->TASKS_HFCLKSTART     = 1;
    while (NRF_CLOCK->EVENTS_HFCLKSTARTED == 0) 
    {
        // Do nothing.
    }	
    
	NRF_UART0->INTENSET = UART_INTENSET_RXDRDY_Enabled << UART_INTENSET_RXDRDY_Pos;
    NVIC_SetPriority(UART0_IRQn, 3);//APP_IRQ_PRIORITY_LOW==3
    NVIC_EnableIRQ(UART0_IRQn);

    ble_stack_init();	
    client_handling_init();
    device_manager_init();
    scan_start();
	start_timer();

    for (;;)
	{
    }
}

Please have a look and help me.

Related