4 votos

AVR: Indicador de desbordamiento del temporizador en TIFR

Tengo una pequeña pregunta sobre el TOVn situado en el TIFRn registrarse.

La hoja de datos dice, si el TCNTn se desborda, entonces el TOVn situado en el registro TIFRn se establecerá en 1 . (en el mismo ciclo de reloj en que se produjo el desbordamiento).

El código para manejar tal evento es el siguiente:

/* Check if TOV1 flag is set */
if (TIFR1 & _BV(TOV1)) {
    /* Since TOV1 is set, we know we missed an overflow interrupt */

    /* Handle the event... */
    // ... timer_ovf_cnt++;

    /* Prevent ISR to be called, because we already handled the overflow */
    TIFR1 = _BV(TOV1); // .. but TOV1 is already set in TIFR1?
}

Pero lo que me confunde es: ¿por qué debo fijar el TOV1 cuando ya está configurado por hardware? ¿Establecer el bit TOV1 bandera en TIFR1 a 1 por mano del usuario ¿Desactivar la interrupción del temporizador? (¿Incluso si la bandera TOV1 ya está activada por hardware?)

EDITAR : Encontré la respuesta: ¿Borrar bits de bandera escribiendo 1?

6 votos

+1 por marcar tu propia pregunta como duplicada. Eso es lo que yo llamo disciplina. ¡Bien hecho!

2voto

silverbolt Puntos 18

El objetivo de escribir 1 en clear es borrar la bandera atómicamente sin cambiar ninguno de los otros bits. Claro, es posible hacer una lectura-modificación-escritura y borrar un bit de esa manera, pero entonces puedes sobrescribir una bandera que se estableció en el hardware entre la lectura y la escritura. Dado que no hay razón para establecer el bit desde el software, el flip flop está configurado para que el hardware pueda establecer el bit y el software pueda borrarlo escribiendo 1. Esto no es necesario para que el flip flop funcione correctamente. Esto no es necesario para las banderas que se establecen en un manejador de interrupción, ya que puede simplemente desactivar las interrupciones durante la operación de lectura-modificación-escritura.

El otro post no menciona nada sobre la atomicidad, que es el razonamiento en el que se basa este diseño.

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X