PIC - Hora de ingresar la interrupción

3

Estoy usando el PIC18F2550 y quería saber cuánto tiempo transcurre entre un evento (por ejemplo, ADIF) y la rutina de interrupción comienza. En otras palabras, cuánto tiempo tarda el "sistema de interrupción" en cambiar el estado de la MCU, guardando todos los registros y cambiando el contador del programa.

    
pregunta mFeinstein

3 respuestas

2

Hay dos cosas aquí: el tiempo antes de que comience el ISR y el tiempo que lleva el ISR.

Cuando estás usando C, el tiempo de ejecución de ISR puede aumentar mucho: enlace

Sin embargo, solicitó la hora antes de que comience el ISR, que es un par de ciclos de reloj. Esto se puede leer en la sección 8.3 de enlace :

  

La latencia de interrupción se define como el tiempo desde el evento de interrupción (el bit de indicador de interrupción se establece) hasta el momento en que la instrucción en la dirección 0004h comienza la ejecución (cuando se habilita esa interrupción).      

Para interrupciones síncronas (típicamente internas), la latencia es 3TCY.

     

Para interrupciones asíncronas (típicamente externas), como INT o Interrupción de cambio de puerto RB, la latencia de interrupción será 3 - 3.75TCY (ciclos de instrucción). La latencia exacta depende de cuándo ocurre el evento de interrupción (Figura 8-2) en relación con el ciclo de instrucción.

     

La latencia es la misma para las instrucciones de uno y dos ciclos.

    
respondido por el Keelan
1

Algunas hojas de datos le indican la latencia desde el evento hasta la interrupción explícita de la ejecución, pero esta no parece. Consulte el manual de referencia familiar; podría haber más información allí.

En cualquier caso es bastante rápido. Básicamente, el procesador aprovecha la próxima oportunidad para ejecutar una llamada a la ubicación de la interrupción. Los registros que se guardan se escriben en un hardware especial para ese fin, de modo que se superponen. Básicamente, el procesador tiene que esperar hasta el inicio del próximo ciclo de instrucciones, y probablemente haya uno más para vaciar la tubería, luego la ejecución se reanuda en la dirección de interrupción.

Si uno o dos tiempos de instrucción realmente importan, entonces haga algunas pruebas para ver cuál es realmente la latencia. Recuerde que los eventos como ADIF son sincrónicos, por lo que el jitter debería ser 0. Con los eventos asíncronos externos, necesariamente hay un ciclo de jitter ya que el reloj de instrucciones sigue funcionando.

¿Qué estás haciendo para que una o dos instrucciones de latencia sean importantes?

    
respondido por el Olin Lathrop
0

Una buena manera de responder preguntas como esta es usar el simulador de MPLAB. Si habilita el cronómetro, puede ver exactamente cuántos ciclos de CPU y cuántos microsegundos toma todo:

    
respondido por el Rocketmagnet

Lea otras preguntas en las etiquetas