залипает RTT внутри обработчика прерывания, плата ARDUINO DUE

wildwhiteash
Offline
Зарегистрирован: 29.06.2015
void setup() {
  int prescaler = 0x8000; //предделитель на 32768 (один тик в секунду)  
  RTT->RTT_MR = (prescaler | RTT_MR_RTTRST | RTT_MR_ALMIEN); 

  RTT->RTT_AR = 0x2; // alarm на третьей секунде
  //  NVIC_DisableIRQ(RTT_IRQn);
  //  NVIC_ClearPendingIRQ(RTT_IRQn);
  //  NVIC_SetPriority(RTT_IRQn, 0);
  NVIC_EnableIRQ(RTT_IRQn); // разрешить прерывания от RTT
  Serial.begin(115200);
}

void RTT_Handler() {
  //тут будет обработчик если этот сраный таймер заработает
}

void loop() {
  int a = RTT->RTT_VR;
  Serial.println(a);
  delay(100);
}

Вижу что таймер тикает, входит в прерывание на третьей секунде и висит.

У сообщества есть идеи почему висит?

maksim
Offline
Зарегистрирован: 12.02.2012

wildwhiteash пишет:

Вижу что таймер тикает, входит в прерывание на третьей секунде и висит.

Как вы это видите?

wildwhiteash
Offline
Зарегистрирован: 29.06.2015

в обработчике пишем 

Serial.println ("somesing");

и в терминале видим ровно первую половинку от этого слова

maksim
Offline
Зарегистрирован: 12.02.2012

Вот от того и ваша проблема ,что неправильно смотрите.

volatile bool s = 0;

void RTT_Handler() {
  s = 1;
}

void loop() {
  if(s) 
  {
    Serial.println("somesing");
    s = 0;
  }
}

 

wildwhiteash
Offline
Зарегистрирован: 29.06.2015

сам подведу итог

заработало вот так

int vvv = RTT->RTT_SR;

добавить в loop() и RTT_Handler()

на 240 странице сказано 

If the counter value matches the alarm, the bit ALMS in RTT_SR is set.

Reading the RTT_SR status register resets the RTTINC and ALMS fields.

не знаю как связано чтение регистра состояния таймера с залипоном, но факт работоспособности "налице"(с) 

будем считать тему закрытой