Interrumpir las rutinas del servicio y I2c juntos

1

Me gustaría hacer una pregunta que ha estado en mi cabeza por un tiempo

He realizado la codificación de ISR pequeños para los controladores de imagen y AVR y los he probado con éxito a bordo. Y hace unos días, acabo de enterarme de que es necesario mantener el ISR corto.

  

Tengo este ISR que se ejecuta cada 2 ms desde el temporizador.

Bueno, la duda que tengo es si tengo una comunicación I2c en paralelo y luego ocurre la interrupción, ¿Qué pasará con la comunicación I2C?

¿Se dañará la transmisión de datos?

Si el ISR tarda 2 ms en ejecutarse, lo que sucederá con la comunicación I2C mientras tanto.

¿Puede hacer frente a tales retrasos? ¿O es mi falta de comprensión?

    
pregunta Rookie91

1 respuesta

5

El procesador no ejecutará ningún código de primer plano durante la interrupción. Si el IIC se maneja estrictamente en hardware, entonces eso no importará. Si este procesador es el maestro IIC, entonces tampoco tendrá importancia ya que es el dueño del reloj y puede ir tan lento como desee (la mayoría de los esclavos lo permiten).

Sin embargo, una rutina de interrupción que toma 2 ms con otras cosas, como la comunicación IIC, al mismo tiempo suena como una arquitectura general errónea. La respuesta correcta es dar un paso atrás y comprender lo que todo el procesador debe lograr, qué conjunto limitado de cosas es realmente una latencia baja a la que debe reaccionar y volver a diseñar el firmware desde allí. La propagación de un mal diseño al trabajar alrededor de errores anteriores solo empeora las cosas.

    
respondido por el Olin Lathrop

Lea otras preguntas en las etiquetas