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.