Skip to content

Crash on ISR #52

@d00616

Description

@d00616

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

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions