Fubarino (микрочип pic32mx), прерывание второго таймера не срабатывает

volatile uint32_t counter_timer = 0;
void __USER_ISR myISR() {
  counter_timer++;
  clearIntFlag(_TIMER_3_IRQ);
}
 
void __USER_ISR myISR_timer_four() {
  clearIntFlag(_TIMER_4_IRQ);
  TMR4 = 0x16E3600;
  Serial.print("hi\n");
    if(PORTAbits.RA10 != 1){
      LATAbits.LATA10 = 1;
    }
    else{
      LATAbits.LATA10 = 0;
    }
}
 
void setup{
  
  T3CONbits.TCS = 0b0; // Бит выбора источника тактового сигнала таймера
  T3CONbits.TCKPS = 0b000; //0b111; // Биты выбора предварительной шкалы таймера на входе
  T3CONbits.ON = 0b1; //0;//0b1;
  asm("nop \n");

  T4CONbits.TCS = 0b0;
  T4CONbits.TCKPS = 0b000;
  T4CONbits.T32 = 0b1;
  TMR4 = 0x16E3600; // половина от 48 мГц.
  T4CONbits.ON = 0b1;
 
  setIntVector(_TIMER_3_VECTOR, myISR);
  setIntPriority(_TIMER_3_VECTOR, 4, 0);
  clearIntFlag(_TIMER_3_IRQ);
  setIntEnable(_TIMER_3_IRQ);
 
  setIntVector(_TIMER_4_VECTOR, myISR_timer_four);
  setIntPriority(_TIMER_4_VECTOR, 1, 0);
  clearIntFlag(_TIMER_4_IRQ);
  setIntEnable(_TIMER_4_IRQ);
  
 
 TRISAbits.TRISA10 = 0;  // Желтый светодиод Fubarino на борту
}
 
void loop() {
delay(500);
Serial.println(counter_timer);
Serial.println(TMR4, DEC);
}

Привет,

Я хочу использовать несколько прерываний, я получил информацию из документа, который я получил от: Majenko Technologies. прерывание, связанное с Timer3, работает, это был пример кода в pdf. теперь я "собрал" второе прерывание привязано к timer4, копирует, вставляет и адаптирует, но это не работает.

Я могу распечатать "контент" регистра timer4, и он запущен.

Я сделал что-то не так? поисковая система не дала ответа.

, 👍1


1 ответ


0

Проблема заключалась в том, что вам нужно объединить четный и следующий нечетный таймеры (см. техническое описание используемого вами микрочипа), чтобы сформировать 32-битный таймер.

,