¿Es realmente necesario borrar manualmente el indicador de interrupción de desbordamiento del temporizador XMEGA?

7

Como algunos de ustedes saben, Atmel proporciona un marco de software (principalmente como parte de Atmel Studio) que proporciona controladores y ejemplos y se actualiza de forma más o menos regular.

En una actualización reciente, explícitamente señalan que es importante borrar manualmente el indicador de interrupción de desbordamiento en la función de devolución de llamada de interrupción.

 // * \subsection xmega_tc_qs_ovf_setup_code Example code
 // *
 // * Add a callback function that will be executed when the overflow interrupt
 // * trigger.
 // * \code
 static void my_callback(void)
 {
    // User code to execute when the overflow occurs here

    // THIS WAS ADDED IN LAST UPDATE
    // Important to clear Interrupt Flag
    tc_clear_overflow(&TCC0);
    // THIS WAS ADDED IN LAST UPDATE

 }
 //\endcode

Según la hoja de datos de XMEGAA:

  

OVFIF se borra automáticamente cuando se ejecuta el vector de interrupción correspondiente. La bandera también puede ser borrada por   escribiendo un uno en su ubicación de bit.

¿Existe un escenario / motivo por el que se requiera borrar manualmente la bandera?

    
pregunta Rev1.0

2 respuestas

0
  

¿Existe un escenario / motivo por el que se pueda borrar manualmente la bandera?   requerido?

No estoy seguro acerca del ASF, pero hay casos en los que necesita cancelar cualquier interrupción pendiente. Por ejemplo, cuando (re) configure un temporizador, es posible que desee desactivar las interrupciones, modificar el temporizador y cancelar cualquier interrupción del temporizador que pueda haber ocurrido mientras tanto, antes de volver a habilitar las interrupciones.

Si ni siquiera tiene un ISR de desbordamiento, aún puede sondear el OVIF para detectar el desbordamiento y restablecer la bandera para activarlo para el siguiente desbordamiento.

    
respondido por el JimmyB
0

En general, siempre borro las banderas de interrupción justo antes de habilitar una interrupción dada, en caso de que algo establezca la bandera en el pasado. Parece un seguro barato.

No tengo conocimiento de ningún escenario en el que necesite borrar manualmente el indicador a menos que no esté utilizando interrupciones, y está observando el indicador con una rutina que se ejecuta periódicamente para verificar el ajuste del indicador.

    
respondido por el user103218

Lea otras preguntas en las etiquetas