Red de conocimiento informático - Conocimiento sistemático - Cómo establecer la prioridad de cada interfaz del 8259A en el experimento de ensamblaje

Cómo establecer la prioridad de cada interfaz del 8259A en el experimento de ensamblaje

El modo de trabajo del 8259A

La gestión de interrupciones por parte del 8259A implica muchos aspectos, por lo que tiene múltiples modos de trabajo, como el modo de anidamiento de interrupciones, el modo de gestión de prioridad y el modo de finalización de interrupciones. , interrumpir el método de enmascaramiento, etc. Dado que 8259A es un chip programable, estos modos se pueden configurar mediante métodos de programación y los usuarios pueden elegir el modo de trabajo correspondiente según sus propias necesidades.

1. 8259A desde una perspectiva de programación

Cuando los usuarios (programadores) usan una interfaz programable o un chip de control, generalmente lo miran desde una perspectiva de programación. Lo mismo ocurre con 8259A. Tiene 10 registros programables, que pueden. dividirse en dos grupos. Un grupo se muestra claramente en el diagrama de bloques de la estructura interna (Figura 5.8). Son el registro de solicitud de interrupción IRR, el registro de máscara de interrupción IMR y el registro de servicio ISR. Las funciones de estos tres registros se han introducido anteriormente. El otro grupo no está representado en el diagrama de bloques de la estructura interna y pertenece a los registros internos. Son 4 registros de comando de inicialización y 3 registros de comando de operación. El registro de comando de inicialización se utiliza para almacenar la palabra de comando de inicialización. Las cuatro palabras de comando de inicialización son Icwl ~ ICW4 (palabra de comando inicial). Al inicializar el 8259A, escriba las palabras de comando de inicialización correspondientes según sea necesario. Una vez completada la inicialización, el 8259A gestiona las interrupciones externas de nivel 8 de acuerdo con estas palabras de comando de inicialización. Durante el funcionamiento del 8259A, puede realizar las intervenciones necesarias en él operando palabras de comando para cambiar la forma en que funciona en ciertos aspectos. Hay tres tipos de palabras de comando de operación: OCWl ~ OCW3 (palabra de comando de operación

), que se almacenan en el registro de comando de operación.

2. Modo de anidamiento de interrupción

Hay dos modos de anidamiento del 8259A: modo de anidamiento completo general y modo de anidamiento completo especial.

1) Método de anidamiento completo general

El método de anidamiento completo general es el método de anidamiento más utilizado y básico del 8259A. Si no hay una palabra de comando de operación después de inicializar el 8259A, si se establece en. En otros modos de anidamiento, el 8259A funcionará automáticamente en el modo de anidamiento completo normal. De esta manera, las solicitudes de interrupción en el mismo nivel y en niveles inferiores están prohibidas durante el servicio de una interrupción, pero aún se pueden realizar solicitudes de interrupción de nivel superior a la CPU a través del puerto INT.

2) Modo de anidamiento completo especial

La diferencia entre el modo de anidamiento completo especial y el modo de anidamiento completo general es que las solicitudes de interrupción en el mismo nivel no están prohibidas durante el servicio de una interrupción. Es decir, se permite la entrada de interrupciones del mismo nivel y de nivel superior. El problema que debe resolverse con este método es: en el caso de una cascada de múltiples chips, cuando se responde a la interrupción de un chip esclavo y entra en el período de servicio de interrupción, aún se puede reconocer la solicitud de interrupción de nivel superior del chip esclavo. por el maestro 8259A (para el maestro 8259A, las 8 interrupciones del mismo esclavo 8259A son todas del mismo nivel) y realiza una solicitud a la CPU. Por lo tanto, en el caso de la conexión en cascada, el segmento maestro debe configurarse en el modo de anidamiento completo especial y el segmento esclavo generalmente debe configurarse en el modo de anidamiento completo general.

3. Método de prioridad

1) Prioridad fija

Este es el método de prioridad utilizado en la mayoría de las aplicaciones. En este modo, la prioridad de cada fuente de interrupción es fija: IR0 es la más alta, IRl es la segunda y luego los niveles se reducen en secuencia.

2) Modo de ciclo automático de prioridad

En este modo, después de que se responde a una solicitud de una fuente de interrupción, su prioridad se reduce automáticamente a la más baja y las prioridades de otra interrupción Las fuentes también cambiaron. Por ejemplo, después de que IR4 realiza una solicitud y obtiene una respuesta, se reduce automáticamente a la prioridad más baja y IR5 se convierte en la prioridad más alta. Las prioridades de mayor a menor son: IR5, IR6, IR7, IR0, IRl, IR2, IR3. , 1R14.

Después de configurar el 8259A en el modo de ciclo automático de prioridad, la prioridad inicial es: IR0 es la más alta, IR7 es la más baja, y así sucesivamente.

Este método es adecuado para situaciones en las que múltiples fuentes de interrupción en el sistema tienen las mismas prioridades (es difícil distinguir sus niveles), de modo que las solicitudes de cada fuente de interrupción tengan las mismas posibilidades de ser respondidas.

3) Modo de ciclo especial de prioridad

Este método consiste en especificar manualmente la prioridad de una fuente de interrupción al más bajo a través de la programación (OCW2), y los niveles de otras fuentes de interrupción también seguir.

4. Modo de finalización de interrupción

Cuando la CPU responde a una solicitud de interrupción, se establece el bit correspondiente de la interrupción en el ISR, lo que indica que la CPU está atendiendo la interrupción. El bit ISR debe restablecerse en el momento apropiado antes de que finalice el servicio de interrupción y la interrupción regrese; de ​​lo contrario, el 8259A no podrá responder a nuevas solicitudes de la fuente de interrupción. Este trabajo se llama procesamiento final de interrupción. Hay dos formas de finalizar la interrupción: finalización automática y finalización no automática. El modo de finalización no automática se puede dividir en finalización de interrupción general y finalización de interrupción especial.

1) Método de finalización de interrupción automática

Este método debe configurarse a través de ICW4. Después de configurar este modo, para cada interrupción, cuando se responde a la interrupción (para 8086/8088, en el borde posterior de INTA en el segundo ciclo de respuesta de interrupción), el 8259A borra automáticamente el bit ISR correspondiente. Por supuesto, el servicio por esta interrupción no se ve afectado por esto. Este método está diseñado para programadores sin experiencia que olvidan dar el comando de fin de interrupción en la rutina del servicio de interrupción.

2) Método general de finalización de interrupción

Este método se utiliza junto con el método general de anidamiento completo. Este método se refleja en el programa enviando un comando de fin de interrupción general al 8259A antes de regresar después de que se completa el servicio de interrupción específico, y el 8259A restablecerá el bit más alto que actualmente está configurado en l en el ISR. Porque en el modo general completamente anidado, el bit de nivel más alto actualmente establecido en 1 en el ISR corresponde a la última interrupción a la que se respondió y procesó, es decir, la interrupción que se está procesando actualmente, por lo que restablecer este bit es equivalente al final. interrupción que se está procesando actualmente.

3) Modo de finalización de interrupción especial

En el modo especial completamente anidado, es imposible determinar qué bit en el ISR se establece en último lugar, es decir, qué solicitud de interrupción es la última para ser respondido, entonces se debe utilizar un método especial de finalización de interrupción. Este método se refleja en el programa enviando un comando especial de finalización de interrupción. Este comando indica qué bit ISR debe borrarse. El método especial de finalización de interrupción puede entenderse como restablecer artificialmente un determinado bit en el ISR. El 8259A encuentra automáticamente el bit ISR que se restablecerá en el modo de finalización de interrupción general.

Aquí se dan algunas explicaciones sobre el procesamiento final de interrupción de los segmentos esclavos en el sistema en cascada. Cuando el segmento maestro está configurado en un modo especial completamente anidado, puede ocurrir anidamiento de interrupciones en el segmento esclavo. Cuando finaliza un servicio de interrupción del segmento esclavo, se debe usar software para verificar si la interrupción atendida es la única interrupción del segmento esclavo. . Para este fin, primero envíe un comando de fin de interrupción general al esclavo 8259A, borre el bit de mayor prioridad en el ISR que ha completado el servicio y luego lea el contenido del ISR para verificar si es 0. Si es 0, envíelo al maestro 8259A. Envíe un comando de finalización de interrupción para borrar el bit correspondiente al chip esclavo en el ISR (maestro 8259A) (este paso no se puede olvidar si el contenido del ISR del esclavo 8259A no es 0); el comando de fin de interrupción no se enviará al maestro 8259A. Después de que regresa la interrupción, la CPU continúa atendiendo la interrupción que fue interrumpida por el esclavo.

5. Formas de proteger las fuentes de interrupción

8259A tiene dos formas de proteger las fuentes de interrupción: modo de blindaje ordinario y modo de blindaje especial. El primero se utiliza con más frecuencia, mientras que el segundo sólo se utiliza en algunas aplicaciones especiales.

1) Modo de enmascaramiento ordinario

En el modo de enmascaramiento ordinario, si un determinado bit del registro de máscara de interrupción IMR se establece en 1, la interrupción correspondiente se enmascarará, haciendo así que solicitud de interrupción No se puede enviar a la CPU mediante 8259A. Si un determinado bit de IMR es 0, se permite que la interrupción surta efecto.

2) Método de protección especial

En algunas aplicaciones, se espera que una rutina de servicio de interrupción pueda cambiar dinámicamente la estructura de prioridades del sistema. Por ejemplo, al ejecutar una determinada parte de la rutina del servicio de interrupción, desea deshabilitar las solicitudes de interrupción de nivel inferior, y al ejecutar otra parte de la rutina del servicio de interrupción, puede habilitar interrupciones de un nivel inferior al suyo.

Para lograr este objetivo, es natural pensar en realizar la posición l correspondiente en el IMR de manera que la interrupción de este nivel quede blindada, brindando así la posibilidad de abrir interrupciones inferiores. Sin embargo, hay un problema con esto: cada vez que se responde a una solicitud de interrupción, el bit ISR correspondiente se establecerá en 1. Mientras no se emita el comando de fin de interrupción, el 8259A deshabilitará todas las interrupciones inferiores a él. Por lo tanto, aunque la interrupción de nivel superior que se está procesando actualmente está enmascarada, debido a que el bit ISR no se restablece, la solicitud de interrupción de nivel inferior aún no será respondida hasta que se emita el comando de fin de interrupción.

Se han introducido métodos de bloqueo especiales. Después de configurar este método, configurar un cierto bit de IMR restablecerá el bit correspondiente de ISR al mismo tiempo. De esta manera, las interrupciones de nivel inferior pueden abrirse verdaderamente. Por supuesto, también se puede responder a interrupciones de nivel superior que no estén enmascaradas.