¿Cuál es la diferencia entre interrupción en cambio e interrupción externa en PIC?

11

¿Cuál es la diferencia en la función entre IOC e interrupción EXT 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 hay alguna? ¿Cuándo usarías uno u otro?

tsiflana
fuente

Respuestas:

8

Mire este documento que dice: -

Interrupción al cambiar
Esta función es similar a la función de interrupción externa , excepto que cualquier cambio (no solo un tipo de transición) desencadenará una interrupción de cambio de puerto en cualquiera de los pines para los que está habilitada. Esto lo hace más flexible (está disponible en más pines), pero también es más difícil de manejar correctamente.

perilbrain
fuente
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 un registro de puerto cambia 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. Puede escribir solo uno que pueda verificar el valor de todo el puerto, que podría ser lo que realmente le interesa dependiendo de la aplicación.

Jon L
fuente
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 borde ascendente o un borde descendente; si, por ejemplo, un alfiler está bajo y uno está interesado solo en los bordes que caen, no se activará una interrupción hasta que el alfiler suba y luego caiga. Usando interrupción en el cambio, uno tendría que despertarse en ambos eventos.
  2. Los pines de interrupción externos tienen bits de estado de enclavamiento individuales. Incluso si un impulso de entrada va y viene antes de que el software tenga la oportunidad de responder, el software aún puede descubrir que sucedió y reaccionar adecuadamente.
  3. Leer un puerto de E / S que tiene una interrupción de cambio de pin habilitada precisamente en el momento en que los cambios de entrada pueden provocar que la interrupción de cambio de pin no se active. Por el contrario, leer el puerto de E / S conectado a un pin de interrupción externo no tiene ningún efecto en la interrupción.

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

Super gato
fuente
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 por cambio se activará en cualquier borde (tanto ascendente como descendente).

Bruno Ferreira
fuente
Al menos para el PIC12F1822 el OP mencionado, IOC también se puede configurar (definido por el usuario) para disparar en el borde ascendente, el borde descendente o ambos (sección 13). Entonces, para mí, la única diferencia parece ser, que la interrupción externa solo puede configurarse para activarse en cualquiera de las dos detecciones de borde.
PetPaulsen
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 dijo, una cosa que debe hacer en el IOC ISR es determinar qué bit (o bits) cambió.

El COI también es un poco más difícil de usar, incluso más allá de eso. ¡Es imprescindible leer el puerto poco antes de habilitar la interrupción, y aún más importante LEER EL PUERTO dentro del ISR! Si tiene una señal de cambio lento y cree que puede establecer una bandera dentro del ISR y leer más tarde, fuera del ISR, ¡piense de nuevo! La lectura del puerto (o cualquier bit en el puerto, si recuerdo correctamente), restablece el pestillo en el comparador que desencadena la interrupción. Si no lo borra dentro del ISR, se activará inmediatamente cuando salga del ISR. Si recuerda hacer esto, todo está bien, pero si olvida y cree que puede leer el puerto cuando lo encuentre, se sentirá un poco frustrado hasta que recuerde hacer la lectura en el ISR.

Scott Seidman
fuente