Preguntas sobre el principio del microordenador, ¿cuáles son las funciones y métodos de trabajo del controlador de interrupción programable 8259A?
8259A es un chip especialmente diseñado para el control de interrupciones de 8085A y 8086/8088. Es un controlador de interrupciones que puede ser controlado por un programa. Un solo 8259A puede gestionar ocho niveles de interrupciones de prioridad vectorial. Sin agregar otros circuitos, se puede conectar en cascada a un sistema de interrupción de prioridad vectorial de hasta 64 niveles. 8259A tiene múltiples modos de trabajo y se puede utilizar en varios sistemas. La configuración de varios modos de trabajo se realiza a través del software durante la inicialización. Bajo el control del controlador de bus, el chip 8259A puede estar en el estado de programación y el estado operativo. El estado de programación es el estado en el que la CPU utiliza las instrucciones IN o OUT para inicializar el chip 8259A.
Función: cuando hay múltiples interrupciones en el sistema fuente, acepta solicitudes de interrupción externas, realiza juicios, selecciona la solicitud de interrupción con la prioridad actual más alta y luego envía esta solicitud al terminal INTR de la CPU cuando la CPU; responde a la interrupción e ingresa al proceso de procesamiento de la subrutina de interrupción, la interrupción El controlador sigue siendo responsable de la gestión de las solicitudes de interrupción externas.
Principio de funcionamiento: primero, se transmite una señal de solicitud de interrupción externa al IMR (registro de máscara de interrupción) a través de la línea de solicitud de interrupción IRQ. El IMR decide si descartarla en función de la palabra de máscara de interrupción establecida (OCW1). ). Aún así acéptalo. Si es aceptable, el 8259A establece el bit que representa esta IRQ en el IRR (registro temporal de solicitud de interrupción) para indicar que esta IRQ tiene una señal de solicitud de interrupción y al mismo tiempo envía una señal al pin INTR (solicitud de interrupción) de la CPU, pero la CPU puede estar ejecutando una instrucción en este momento, por lo que la CPU no responderá inmediatamente. Cuando la CPU está ocupada ejecutando una instrucción, es posible que se envíen solicitudes de interrupción desde otras líneas IRQ. Estas solicitudes serán seleccionadas por. la IMR si no está bloqueada, estas solicitudes también se colocarán en la TIR, es decir, los bits correspondientes que representan sus IRQ en la TIR se establecerán en 1. Cuando la CPU termina de ejecutar una instrucción, verificará si hay una señal en el pin INTR. Si hay una señal, irá al servicio de interrupción. En este momento, la CPU enviará inmediatamente una interrupción al INTA (. reconocimiento de interrupción) pin del chip 8259A. Cuando el chip recibe esta señal, el componente de arbitraje comienza a funcionar. Selecciona la interrupción con mayor prioridad en el IRR, envía la solicitud de interrupción al ISR (registro de servicio de interrupción), es decir, establece el bit que representa el IRQ en el. ISR y establecer el bit correspondiente en IRR en cero indica que la CPU está procesando esta interrupción. Al mismo tiempo, escriba su número en los tres bits inferiores del registro del vector de interrupción IVR (IVR está especificado por ICW2. Me pregunto si todavía recuerda que los tres bits inferiores de ICW2 son todos 0 cuando se especifican, y aquí están usado (!) En este momento, la CPU también enviará una segunda señal INTA. Después de recibir esta señal, el chip enviará el contenido en el IVR, que es el número de interrupción de la interrupción, a la línea de datos que conduce a la CPU. . Este contenido parece muy complicado, pero es fácil de entender si utilizamos una metáfora muy sencilla para explicarlo. La CPU equivale al director ejecutivo de una empresa y el chip 8259A equivale a la secretaria del director ejecutivo. Ahora mucha gente quiere ver al jefe, pero el jefe está hablando por teléfono, por lo que la secretaria los recibe primero. Todo el que quiera ver al jefe debe entregar su tarjeta de presentación a la secretaria. La secretaria primero mira la tarjeta de presentación para ver si hay alguien a quien el jefe dice explícitamente que no quiere ver. en una caja. En este momento, aún no he terminado de escribir el número de teléfono del jefe, pero la gente sigue entregando tarjetas de presentación pidiendo ver al jefe, y la secretaria pone todas las tarjetas de presentación que cumplen con los requisitos en la caja. En ese momento, el jefe terminó la llamada telefónica, asomó la cabeza y le preguntó a la secretaria: ¿Alguien quiere verme? En ese momento, la secretaria eligió al de mayor rango de la caja y le entregó su tarjeta de presentación al jefe. Lo que debe entenderse aquí es que el enmascaramiento de interrupciones y la determinación de prioridad no son lo mismo. Si está enmascarado, la oportunidad de participar en la determinación desaparece. De forma predeterminada, IRQ0 tiene la prioridad más alta y IRQ7 tiene la prioridad más baja. Por supuesto, podemos cambiar esta configuración, como se describe en detalle a continuación. Más cerca de casa, cuando el chip envía la señal de interrupción a la línea de datos que conduce a la CPU, detectará si el EOI en ICW4 está configurado. Si EOI está configurado para indicar que la señal de solicitud de interrupción debe borrarse automáticamente, el chip borrará automáticamente el bit correspondiente en el ISR.
Si no se establece EOI, el controlador de interrupciones debe enviar un mensaje EOI al chip. El chip borrará el bit correspondiente en el ISR después de recibir el mensaje EOI. La agencia aquí existe en ese lugar. La determinación de prioridad existe en el chip 8259A. Si la CPU está procesando una interrupción de la línea IRQ1, el bit correspondiente a IRQ1 en el ISR se establece en 1. En este momento, llega una solicitud de interrupción para IRQ2. La comparará con los bits en el ISR y encontrará que el bit correspondiente al IRQ1 superior está configurado, por lo que 8259A lamentablemente le dirá a IRQ2: espere primero en el IRR. Y si llega IRQ0 en este momento, el chip le permitirá ingresar inmediatamente al ISR, es decir, establecerá el bit correspondiente a IRQ0 en el ISR y enviará una solicitud de interrupción a la CPU. En este momento, debido a que la CPU todavía está procesando IRQ1, el bit IRQ1 en el ISR aún está establecido, pero debido a que IRQ0 tiene una prioridad alta, el bit IRQ0 también se establecerá y se enviará una nueva solicitud de interrupción a la CPU. En este momento, los bits IRQ0 e IRQ1 en el ISR están configurados. Esta situación ocurre a menudo cuando hay múltiples interrupciones y es muy normal. Si EOI está configurado en automático, entonces los bits en el ISR siempre se borran (cuando EOI está configurado, el 8259A borrará los bits correspondientes en el ISR siempre que envíe un número de interrupción a la CPU), y es decir, si hay una interrupción, el chip enviará inmediatamente una solicitud de interrupción a la CPU. Incluso si la CPU está procesando la interrupción IRQ0, la CPU no sabe cuál es la prioridad más alta. Por lo tanto, En este caso, una interrupción de baja prioridad puede interrumpir una rutina de servicio de interrupción de alta prioridad. Entonces, en PC, siempre borramos el bit EOI y enviamos el mensaje EOI cuando finaliza la rutina del servicio de interrupción.