STM8S - ¿Por qué no funciona la interrupción por desbordamiento de Timer4?

0

Este es mi inicio del temporizador 4:

void initTimer(){
  CLK_PCKENR1 |= (1<<4); //Enable Clock for Timer 4
  TIM4_EGR |= 1;
  TIM4_PSCR = (0x03);    //Prescaler, Divide Clock by 7
  TIM4_IER = 1;          //Enable Update Interrupt
  TIM4_CR1 |= 1;         //Enable Timer
}

Esta es mi rutina de servicio:

#pragma vector = TIM4_OVR_UIF_vector
__interrupt void TIM4_OVF(void){
  if(!didInit){
    initMAX7219();
    didInit = true;
  }
  applyBuffer();
  shuffleRight();
  TIM4_SR &=~(1<<0);    //Clear Update interrupt flag
}

Pero nada funciona, el registro del contador del temporizador se incrementa correctamente pero la función de interrupción nunca se alcanza, ¿por qué?

¡Feliz año nuevo!

    
pregunta binaryBigInt

1 respuesta

0

código de trabajo:

void TIM4_init(void){

TIM4_PSCR = 7;
TIM4_ARR = 250;
TIM4_IER |= TIM4_IER_UIE;
TIM4_CR1 |= TIM4_CR1_CEN;
}
void  TIM4_overflow_interupt()  __interrupt (TIM4_UPD_OVF){
static unsigned nu = 0;
static unsigned pi = 0;
if (nu >= 100){
    nu = 0;
    if (pi){
        pi = 0;
        IND_LED_ON();
    }
    else{
        pi = 1;
        IND_LED_OFF();
    }
}

nu++;
TIM4_SR1 &= ~TIM4_SR1_UIF;
//TIM4_IER |= TIM4_IER_UIE;
}
    
respondido por el name

Lea otras preguntas en las etiquetas