¿Cuál es la diferencia entre Interrupt on Change e External Interrupt en PICs?

11

¿Cuál es la diferencia en la función entre IOC y EXT Interrupt en un PIC? Actualmente estoy usando un PIC12F1822, y aparte de la capa adicional de verificación que tiene que ver con IOC (es decir, qué pin causó la interrupción) los dos son idénticos.

¿Cuál es la diferencia práctica si la hay? ¿Cuándo utilizarías uno u otro?

    
pregunta tsiflana

5 respuestas

8

Mire esto documento que declara: -

  

Interrupción en el cambio
Esta función es similar a la función interrupción externa , excepto que un cambio de puerto   la interrupción se activará por cualquier cambio (no solo un tipo de   transición) en cualquiera de los pines para los que está habilitado. Esto lo hace   Más flexible (está disponible en más pines), pero también más difícil.   Tratar correctamente.

    
respondido por el perilbrain
5

Es probable que esto se haga para simplificar la arquitectura de interrupción del chip al tener menos entradas en la tabla de vectores de interrupción. La interrupción en el cambio se puede configurar para que se active cuando cambie el registro de un puerto y puede ser útil para algo como una matriz de teclado en la que no desea escribir una Rutina de servicio de interrupción (ISR) para cada pin individual. Puede escribir solo uno que pueda verificar el valor de todo el puerto, que podría ser lo que realmente le interesa según la aplicación.

    
respondido por el Jon L
5

Las tres mayores diferencias entre el cambio de interrupción y los pines de interrupción externos:

  1. Los pines de interrupción externos permiten que el software especifique si la interrupción debe ser activada por un flanco ascendente o por un flanco descendente; si por ejemplo un pin es bajo y uno está interesado solo en los bordes descendentes, una interrupción no se activará hasta que el pin se levante y caiga en consecuencia. Usando la interrupción en el cambio, uno tendría que despertar en ambos eventos.
  2. Los pines de interrupción externos tienen bits de estado de enclavamiento individuales. Incluso si un pulso de entrada aparece y desaparece antes de que el software tenga la oportunidad de responder, el software aún puede descubrir que ocurrió y reaccionar adecuadamente.
  3. La lectura de un puerto de E / S que tiene una interrupción de cambio de pin habilitada en el momento exacto en que los cambios de entrada pueden ocasionar que la interrupción de cambio de pin no se dispare. Por el contrario, la lectura del puerto de E / S conectado a un pin de interrupción externo no tiene efecto en la interrupción.

Las interrupciones externas del PIC son más versátiles y confiables que las interrupciones de cambio de pin de uso general. Sugeriría usar el primero cuando sea práctico.

    
respondido por el supercat
3

Básicamente, la interrupción externa se activará en un borde específico (ascendente o descendente, definido por el usuario), mientras que la interrupción en cambio se activará en cualquier borde (tanto ascendente como descendente).

    
respondido por el Bruno Ferreira
2

La interrupción en el cambio es generalmente de medio byte de E / S, donde las interrupciones externas son generalmente para bits individuales. Como ya ha dicho, una cosa que debe hacer en el ISR de IOC es averiguar qué bit (o bits) ha cambiado.

El IOC también es un poco más difícil de usar, incluso más allá de eso. Es imperativo leer el puerto pronto antes de habilitar la interrupción, ¡y aún más importante LEER EL PUERTO dentro de la ISR! Si tiene una señal de cambio lento, y cree que puede establecer una bandera dentro del ISR y hacer su lectura más tarde, fuera del ISR, ¡piénselo nuevamente! La lectura del puerto (o cualquier bit en el puerto, si recuerdo correctamente), restablece el pestillo en el comparador que activa la interrupción. Si no lo borra dentro del ISR, se volverá a activar inmediatamente cuando salga del ISR. Si recuerdas hacer esto, todo está bien, pero si te olvidas y crees que puedes leer el puerto cuando llegues a él, te sentirás un poco frustrado hasta que recuerdes hacer la lectura en el ISR.

    
respondido por el Scott Seidman

Lea otras preguntas en las etiquetas