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

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 temporizador ISR. ¿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 veo en la generación de pulsos a través de pines de coincidencia es que los uC generalmente tienen solo unos pocos pines de coincidencia y, por lo tanto, solo se pueden generar unos pocos pulsos a través de una coincidencia de temporizador, mientras que es posible generar pulsos en cualquier GPIO desde un temporizador ISR.

Respuestas (2)

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

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

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

Dado que los pulsos de coincidencia son una unidad completamente independiente, cualquier falla en el código hará que el pulso se genere con precisión. Estoy usando pulsos, generados por la uC, que deben ser validados por un supervisor. El comportamiento extraño de los pulsos indicará al supervisor que algo anda mal. El cambio de comportamiento se puede detectar fácilmente cuando se genera desde un ISR. ISR permite que su programa tome el control total de cada aspecto de su código.

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

El uso del temporizador incorporado compara las funciones 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 usa un ISR para alternar un pin, tiene más flexibilidad (puede hacer más que simplemente alternar un pin, y puede alternar el pin que desee), pero ahora tiene muchas interrupciones que interrumpen 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ía usar el programa principal).

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

La función de coincidencia de temporizador probablemente generará una salida más precisa, a menos que tenga mucho cuidado al programar sus interrupciones. De hecho, para obtener PWM/pulsos precisos con ISR, probablemente necesitará escribir sus ISR en ensamblaje para saber cuántos ciclos toman, y luego tener esto en cuenta en su código que establece los tiempos. Básicamente, la sobrecarga de ingresar al ISR afectará las cosas, en cuanto al 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 ha quedado sin pines de temporizador, entonces use un ISR.

Usé Keil uVision para simular un pulso generado por ISR y pude lograr 499,97 Hz de los 500 Hz realmente previstos. Intentaré lo mismo con Match y te dejaré saber cuánto logré. Todo se reduce al último párrafo que dijiste, supongo. totalmente basado en aplicaciones