Los microcontroladores interrumpen lo que está “pendiente”?

0

Acabo de comenzar a aprender los temporizadores con mi placa lpc 1347. Aquí está el código simple de lpcopen

    uint32_t timerFreq;

/* Generic Initialization */
SystemCoreClockUpdate();
Board_Init();

/* Enable timer 1 clock */
Chip_TIMER_Init(LPC_TIMER32_0);

/* Timer rate is system clock rate */
timerFreq = Chip_Clock_GetSystemClockRate();

/* Timer setup for match and interrupt at TICKRATE_HZ */
Chip_TIMER_Reset(LPC_TIMER32_0);
Chip_TIMER_MatchEnableInt(LPC_TIMER32_0, 1);
Chip_TIMER_SetMatch(LPC_TIMER32_0, 1, (timerFreq / TICKRATE_HZ1));
Chip_TIMER_ResetOnMatchEnable(LPC_TIMER32_0, 1);
Chip_TIMER_Enable(LPC_TIMER32_0);

/* Enable timer interrupt */
NVIC_ClearPendingIRQ(TIMER_32_0_IRQn);
NVIC_EnableIRQ(TIMER_32_0_IRQn);

y el controlador de interrupción

void TIMER32_0_IRQHandler(void)
{
  if (Chip_TIMER_MatchPending(LPC_TIMER32_0, 1)) {
    Chip_TIMER_ClearMatch(LPC_TIMER32_0, 1);
    Board_LED_Toggle(0);
  }
}

Mi pregunta es qué está "pendiente" y ¿por qué debo verificarlo en IRQHandler? Gracias!

    
pregunta Mati

1 respuesta

3

La mayoría de los microcontroladores funcionan de la siguiente manera: se establece un indicador (bit) en un registro cuando ocurre un evento en particular en el periférico (por ejemplo, en su caso, se produce una coincidencia del temporizador). Este indicador debe ser borrado por el software de la aplicación cuando hayan manejado el evento. Si el software ha habilitado la interrupción, se llama a la rutina de servicio de interrupción (ISR) tan pronto como sea posible cuando se establece el indicador (generalmente de inmediato, pero tal vez no si se está revisando otra interrupción).

En la mayoría de los casos, no es necesario verificar que el indicador esté establecido en el ISR, ya que el hecho de que el ISR se esté ejecutando significa que el indicador debe se ha establecido. Sin embargo, en algunos casos, un ISR puede asociarse con múltiples indicadores, y por lo tanto es necesario probar cada uno de los indicadores para determinar qué eventos realmente han ocurrido. Debido a esto, a menudo se considera la mejor práctica probar siempre la bandera dentro del ISR, incluso cuando no es estrictamente necesario. Esto es lo que hace la llamada "pendiente": verificar si el indicador está establecido. La siguiente línea "clara" luego borra la bandera si se estableció.

    
respondido por el Carl

Lea otras preguntas en las etiquetas