1 votos

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

Estoy usando el LPC1778 uC para un proyecto y quiero saber cuál es la diferencia entre generar pulsos a través de la salida del timer match y a través de toggling de un pin en un ISR del timer. ¿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?

La única desventaja que puedo ver en la generación de pulsos a través de los pines de coincidencia es que los uCs generalmente tienen sólo unos pocos pines de coincidencia y por lo tanto sólo unos pocos pulsos se pueden generar a través de una coincidencia del temporizador, mientras que es posible generar pulsos en cualquier GPIO desde un ISR del temporizador.

1voto

Tachyons Puntos 10001

El problema con un enfoque basado en ISR es que es un interrumpir . Interrumpe las cosas.

El uso de las funciones de comparación de temporizadores incorporadas para alternar un pin de coincidencia se realiza completamente en hardware. Puedes tener código ejecutándose en el procesador y no tiene ni idea de que el temporizador está conmutando el pin.

Cuando usas un ISR para alternar un pin, tienes más flexibilidad (puedes hacer algo más que alternar un pin, y puedes alternar cualquier pin que quieras), pero ahora tienes muchas interrupciones, interrumpiendo su código . Esto puede alterar las rutinas específicas de temporización o, a altas frecuencias, incurrir en una sobrecarga innecesaria (su interrupción puede convertirse en una gran parte del recuento total de instrucciones, consumiendo ciclos que podrían ser utilizados por el programa principal).

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

La función de coincidencia del temporizador probablemente generará un resultado más preciso, a menos que muy cuidado al programar sus interrupciones. De hecho, para conseguir un PWM/pulsos precisos con ISRs, probablemente necesitarás escribir tus ISRs en ensamblador para saber cuántos ciclos tardan, y luego tener en cuenta esto en tu código que establece los tiempos. Básicamente, la sobrecarga de entrar en el ISR va a afectar a las cosas, en cuanto a los tiempos.

En general, si es posible hacer lo que quieres hacer con los pines de coincidencia del temporizador, hazlo así para no tener la sobrecarga de la interrupción extra. Si no es posible lograr lo que necesitas sólo con los temporizadores o te has quedado sin pines de temporizador, entonces usa un ISR.

1voto

jp314 Puntos 1721

La coincidencia del temporizador es, con mucho, más precisa y es la mejor solución si se necesita una 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 algunos relojes (por ejemplo, si la CPU está en medio de una instrucción larga cuando se produce la interrupción). Además, algunas CPUs tienen cachés pequeñas y el tiempo de búsqueda afecta a la latencia de la interrupción.

Las interrupciones pueden ser más flexibles si necesitas alguna decisión adicional en la acción de la clavija - alternar o no, realizar cálculos, etc.

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