¿Generando pulsos a través de la salida de coincidencia del temporizador o ISR del temporizador?

1

Estoy usando LPC1778 uC para un proyecto y quiero saber cuál es la diferencia entre generar pulsos a través de la salida de coincidencia del temporizador y alternar un pin en un ISR de temporizador. ¿Cuáles son los pros y los contras de ambos enfoques? ¿Cuál generaría pulsos más precisos? ¿O no hay diferencia entre ellos?

El único inconveniente que puedo ver al generar pulsos a través de los pines de coincidencia es que los uC generalmente tienen solo unos pines de coincidencia y, por lo tanto, solo unos pocos pulsos se pueden generar a través de un temporizador, mientras que es posible generar pulsos en cualquier GPIO desde un temporizador ISR.

    

2 respuestas

1

La coincidencia del temporizador es mucho más precisa y es la mejor solución si necesita alta precisión y el comportamiento más determinista.

La coincidencia del temporizador tiene una precisión de la frecuencia del bus de la CPU (a 60 MHz en esa parte). Las interrupciones tienen una incertidumbre de unos pocos relojes (por ejemplo, si la CPU está en medio de una larga instrucción cuando ocurre la interrupción). Además, algunas CPU tienen cachés pequeños y el tiempo de recuperación afecta la latencia de la interrupción.

Las interrupciones pueden ser más flexibles si necesita una toma de decisiones adicional sobre la acción del pin: alternar o no, realizar cálculos, etc.

    
respondido por el jp314
1

El problema con un enfoque basado en ISR es que es una interrupción . Interrumpe las cosas.

El uso del temporizador incorporado compara las características de coincidencia para alternar un pin de coincidencia se realiza completamente en hardware. Puede tener código ejecutándose en el procesador y no tiene idea de que el temporizador está alternando el pin.

Cuando usas un ISR para alternar un pin, tienes más flexibilidad (puedes hacer más que solo cambiar un pin, y puedes cambiar el pin que quieras), pero ahora tienes muchas interrupciones, interrumpiendo tu código . Esto puede alterar las rutinas específicas del tiempo o, a altas frecuencias, incurrir en gastos innecesarios (su interrupción puede convertirse en una gran parte del recuento general de instrucciones, reduciendo los ciclos que podrían ser utilizados por el programa principal).

  

¿Cuál generaría pulsos más precisos?

Es probable que la función de coincidencia del temporizador genere resultados más precisos, a menos que sea muy cuidadoso al programar sus interrupciones. De hecho, para obtener PWM / pulsos precisos con ISR, es probable que deba escribir sus ISR en conjunto para que sepa cuántos ciclos toman, y luego contabilice esto en su código que establece los tiempos. Básicamente, la sobrecarga de ingresar al ISR afectará las cosas, en el tiempo.

En general, si es posible hacer lo que quiere hacer con los pines de coincidencia del temporizador, hágalo de esa manera para que no tenga la sobrecarga de interrupción adicional. Si no es posible lograr lo que necesita solo con los temporizadores o se le han agotado los pines del temporizador, utilice un ISR.

    
respondido por el uint128_t

Lea otras preguntas en las etiquetas