-
-
Notifications
You must be signed in to change notification settings - Fork 284
Closed
Description
This code is hanging after first timer/rtc event on NRF51 and NRF52. I think this code is correct.
//#define TIMER
#define RTC
#include "nrf.h"
uint16_t counter = 0;
void setup() {
Serial.begin(38400);
NRF_CLOCK->EVENTS_HFCLKSTARTED = 0;
NRF_CLOCK->TASKS_HFCLKSTART = 1;
while (NRF_CLOCK->EVENTS_HFCLKSTARTED == 0) {}
NRF_TIMER2->MODE = TIMER_MODE_MODE_Timer;
NRF_TIMER2->PRESCALER = 2;
#ifdef TIMER
NVIC_SetPriority(TIMER2_IRQn, 15);
NVIC_ClearPendingIRQ(TIMER2_IRQn);
NVIC_EnableIRQ(TIMER2_IRQn);
#endif
NRF_TIMER2->BITMODE = TIMER_BITMODE_BITMODE_16Bit;
NRF_TIMER2->CC[0] = 4000;
NRF_TIMER2->INTENSET = TIMER_INTENSET_COMPARE0_Enabled << TIMER_INTENSET_COMPARE0_Pos;
NRF_TIMER2->TASKS_START = 1;
#ifdef RTC
NVIC_SetPriority(RTC0_IRQn, 15);
NVIC_ClearPendingIRQ(RTC0_IRQn);
NVIC_EnableIRQ(RTC0_IRQn);
#endif
NRF_RTC0->PRESCALER = 32;
NRF_RTC0->EVTENSET = RTC_EVTENSET_COMPARE0_Msk;
NRF_RTC0->INTENSET = RTC_INTENSET_COMPARE0_Msk;
NRF_RTC0->CC[0] = 2000;
NRF_RTC0->TASKS_START = 1;
}
void loop() {
Serial.print("Counter: ");
Serial.println(counter);
delay(300);
}
void TIMER_2_ISR(void)
{
counter++;
NRF_TIMER2->EVENTS_COMPARE[0] = 0;
#if __CORTEX_M == 0x04
volatile uint32_t dummy = NRF_TIMER2->EVENTS_COMPARE[0];
(void)dummy;
#endif
}
void RTC0_IRQHandler(void)
{
counter++;
NRF_RTC0->EVENTS_COMPARE[0] = 0;
#if __CORTEX_M == 0x04
volatile uint32_t dummy = NRF_RTC0->EVENTS_COMPARE[0];
(void)dummy;
#endif
}
Metadata
Metadata
Assignees
Labels
No labels