Sistemas integrados: interrupciones

Una interrupción es una señal al procesador emitida por hardware o software que indica un evento que necesita atención inmediata. Siempre que ocurre una interrupción, el controlador completa la ejecución de la instrucción actual e inicia la ejecución de unaInterrupt Service Routine (ISR) o Interrupt Handler. ISR le dice al procesador o controlador qué hacer cuando ocurre la interrupción. Las interrupciones pueden ser interrupciones de hardware o interrupciones de software.

Interrupción de hardware

Una interrupción de hardware es una señal de alerta electrónica enviada al procesador desde un dispositivo externo, como un controlador de disco o un periférico externo. Por ejemplo, cuando presionamos una tecla en el teclado o movemos el mouse, activan interrupciones de hardware que hacen que el procesador lea la pulsación de tecla o la posición del mouse.

Interrupción de software

Una interrupción de software es causada por una condición excepcional o una instrucción especial en el conjunto de instrucciones que causa una interrupción cuando es ejecutada por el procesador. Por ejemplo, si la unidad lógica aritmética del procesador ejecuta un comando para dividir un número por cero, para causar una excepción de división por cero, haciendo que la computadora abandone el cálculo o muestre un mensaje de error. Las instrucciones de interrupción del software funcionan de manera similar a las llamadas a subrutinas.

¿Qué es el sondeo?

El estado de monitoreo continuo se conoce como polling. El microcontrolador sigue comprobando el estado de otros dispositivos; y mientras lo hace, no realiza ninguna otra operación y consume todo su tiempo de procesamiento para el monitoreo. Este problema se puede solucionar mediante interrupciones.

En el método de interrupción, el controlador responde solo cuando ocurre una interrupción. Por lo tanto, no se requiere que el controlador monitoree regularmente el estado (banderas, señales, etc.) de los dispositivos integrados e interconectados.

Interrumpe el sondeo v / s

Aquí hay una analogía que diferencia una interrupción de un sondeo:

Interrumpir Votación
Una interrupción es como una shopkeeper. Si uno necesita un servicio o producto, acude a él y le informa de sus necesidades. En caso de interrupciones, cuando se reciben las banderas o señales, notifican al controlador que necesitan servicio. El método de votación es como un salesperson. El vendedor va de puerta en puerta mientras solicita comprar un producto o servicio. De manera similar, el controlador sigue monitoreando las banderas o señales una por una para todos los dispositivos y brinda servicio a cualquier componente que necesite su servicio.

Interrumpir la rutina del servicio

Para cada interrupción, debe haber una rutina de servicio de interrupciones (ISR), o interrupt handler. Cuando ocurre una interrupción, el microcontrolador ejecuta la rutina de servicio de interrupción. Para cada interrupción, hay una ubicación fija en la memoria que contiene la dirección de su rutina de servicio de interrupciones, ISR. La tabla de ubicaciones de memoria reservada para contener las direcciones de los ISR se denomina Tabla de vectores de interrupción.

Tabla de vectores de interrupción

Hay seis interrupciones, incluido RESET en 8051.

Interrupciones Ubicación de ROM (hexadecimal) Alfiler
Interrupciones Ubicación de ROM (HEX)
COM serie (RI y TI) 0023
El temporizador 1 se interrumpe (TF1) 001B
Interrupción de HW externa 1 (INT1) 0013 P3,3 (13)
Interrupción HW externa 0 (INT0) 0003 P3,2 (12)
Temporizador 0 (TF0) 000B
Reiniciar 0000 9
  • Cuando se activa el pin de reinicio, el 8051 salta a la ubicación de la dirección 0000. Este es el reinicio de encendido.

  • Se reservan dos interrupciones para los temporizadores: una para el temporizador 0 y otra para el temporizador 1. Las ubicaciones de memoria son 000BH y 001BH respectivamente en la tabla de vectores de interrupciones.

  • Se reservan dos interrupciones para interrupciones externas de hardware. Pin no. 12 y Pin no. 13 en el puerto 3 son para las interrupciones de hardware externas INT0 e INT1, respectivamente. Las ubicaciones de memoria son 0003H y 0013H respectivamente en la tabla de vectores de interrupción.

  • La comunicación en serie tiene una única interrupción que pertenece tanto a la recepción como a la transmisión. La ubicación de memoria 0023H pertenece a esta interrupción.

Pasos para ejecutar una interrupción

Cuando una interrupción se activa, el microcontrolador sigue los siguientes pasos:

  • El microcontrolador cierra la instrucción que se está ejecutando actualmente y guarda la dirección de la siguiente instrucción (PC) en la pila.

  • También guarda el estado actual de todas las interrupciones internamente (es decir, no en la pila).

  • Salta a la ubicación de memoria de la tabla de vectores de interrupciones que contiene la dirección de la rutina de servicio de interrupciones.

  • El microcontrolador obtiene la dirección del ISR de la tabla de vectores de interrupción y salta a ella. Comienza a ejecutar la subrutina del servicio de interrupción, que es RETI (retorno de la interrupción).

  • Al ejecutar la instrucción RETI, el microcontrolador regresa a la ubicación donde fue interrumpido. Primero, obtiene la dirección del contador de programa (PC) de la pila colocando los bytes superiores de la pila en la PC. Luego, comienza a ejecutarse desde esa dirección.

Disparo por flanco frente a disparo por nivel

Los módulos de interrupción son de dos tipos: activados por nivel o activados por flanco.

Nivel activado Disparo por borde
Un módulo de interrupción activado por nivel siempre genera una interrupción siempre que se afirma el nivel de la fuente de interrupción. Un módulo de interrupción activado por flanco genera una interrupción solo cuando detecta un flanco de afirmación de la fuente de interrupción. El borde se detecta cuando el nivel de la fuente de interrupción cambia realmente. También se puede detectar mediante un muestreo periódico y la detección de un nivel declarado cuando la muestra anterior se eliminó.
Si la fuente de interrupción aún se afirma cuando el controlador de interrupciones del firmware maneja la interrupción, el módulo de interrupción regenerará la interrupción, lo que provocará que el controlador de interrupciones se invoque nuevamente. Los módulos de interrupción activados por flanco se pueden actuar inmediatamente, sin importar cómo se comporte la fuente de interrupción.
Las interrupciones activadas por nivel son engorrosas para el firmware. Las interrupciones activadas por el borde mantienen baja la complejidad del código del firmware, reducen la cantidad de condiciones para el firmware y brindan más flexibilidad cuando se manejan las interrupciones.

Habilitar y deshabilitar una interrupción

Al reiniciar, todas las interrupciones se desactivan incluso si están activadas. Las interrupciones deben habilitarse mediante software para que el microcontrolador responda a esas interrupciones.

El registro IE (habilitación de interrupciones) es responsable de habilitar y deshabilitar la interrupción. IE es un registro bitaddressable.

Interrupción Habilitar registro

EA - ET2 ES ET1 EX1 ET0 EX0
  • EA - Activación / desactivación global.

  • - - Indefinido.

  • ET2 - Habilita la interrupción del temporizador 2.

  • ES - Habilita la interrupción del puerto serie.

  • ET1 - Habilita la interrupción del temporizador 1.

  • EX1 - Habilitar interrupción externa 1.

  • ET0 - Habilita la interrupción del temporizador 0.

  • EX0 - Habilitar interrupción externa 0.

Para habilitar una interrupción, realizamos los siguientes pasos:

  • El bit D7 del registro IE (EA) debe ser alto para permitir que el resto del registro surta efecto.

  • Si EA = 1, las interrupciones se habilitarán y serán respondidas, si sus bits correspondientes en IE son altos. Si EA = 0, ninguna interrupción responderá, incluso si sus pines asociados en el registro IE son altos.

Prioridad de interrupción en 8051

Podemos alterar la prioridad de las interrupciones asignando la prioridad más alta a cualquiera de las interrupciones. Esto se logra programando un registro llamadoIP (prioridad de interrupción).

La siguiente figura muestra los bits del registro IP. Al reiniciar, el registro de IP contiene todos los ceros. Para dar una mayor prioridad a cualquiera de las interrupciones, hacemos que el bit correspondiente en el registro de IP sea alto.

- - - - PT1 PX1 PT0 PX0

- IP.7 No se ha implementado.
- IP.6 No se ha implementado.
- IP.5 No se ha implementado.
- IP.4 No se ha implementado.
PT1 IP.3 Define el nivel de prioridad de interrupción del temporizador 1.
PX1 IP.2 Define el nivel de prioridad de Interrupción externa 1.
PT0 IP.1 Define el nivel de prioridad de interrupción del temporizador 0.
PX0 IP.0 Define el nivel de prioridad de Interrupción externa 0.

Interrumpir dentro de Interrumpir

¿Qué sucede si el 8051 está ejecutando un ISR que pertenece a una interrupción y se activa otra? En tales casos, una interrupción de alta prioridad puede interrumpir una interrupción de baja prioridad. Esto se conoce comointerrupt inside interrupt. En 8051, una interrupción de baja prioridad puede ser interrumpida por una interrupción de alta prioridad, pero no por ninguna otra interrupción de baja prioridad.

Activación de una interrupción por software

Hay ocasiones en las que necesitamos probar un ISR mediante simulación. Esto se puede hacer con las instrucciones simples para establecer la interrupción alta y, por lo tanto, hacer que el 8051 salte a la tabla de vectores de interrupción. Por ejemplo, establezca el bit IE como 1 para el temporizador 1. Una instrucciónSETB TF1 interrumpirá el 8051 en cualquier cosa que esté haciendo y lo forzará a saltar a la tabla de vectores de interrupción.