El Intel 8259 o PIC 8259 es un controlador programable de interrupciones (PIC), diseñado para ser usado en un sistema que incorpore un microprocesador 8085 u 8086.[1] Un posterior sufijo "A" fue compatible con los procesadores Intel 8086 y 8088. El 8259 combina múltiples entradas de interrupción en una simple salida de interrupción hacia el microprocesador, extendiendo los niveles de interrupción disponibles en un sistema más allá de los uno o dos niveles encontrados en el chip del procesador. El 8259A fue el controlador de interrupciones para el bus ISA en el IBM PC original y el IBM AT.[2]
El 8259 fue introducido como parte de la familia Intel MCS 85 en 1976. El 8259A fue incluido en el PC original en 1981 y mantenido por el IBM XT cuando se introdujo en 1983. Un segundo 8259A fue añadido con la introducción del IBM AT. El 8259A ha coexistido con la arquitectura APIC de Intel, desde su introducción en los PC de multiprocesador simétrico. Los PC modernos ya han comenzado a eliminar por completo el uso del 8259A en favor del uso exclusivo de la arquitectura APIC de Intel. Sin embargo, aunque ya no es un chip separado, la interface del 8259A todavía es proporcionada por el chipset Southbridge en las modernas tarjetas x86.
Los conectores principales en un 8259 son los siguientes:
Hasta ocho 8259 esclavos pueden ser conectados en cascada a un 8259 maestro para proporcionar un máximo de 64 IRQ. Los 8259 son conectados en cascada conectando la línea de INT de un 8259 esclavo a una línea de IRQ de un 8259 maestro.
Hay tres registros internos en el 8259:
El 8259 soporta los modos de prioridad fijos y rotatorios.
La operaciones de Fin de interrupción (EOI) soportan EOI específico, EOI no específico, y auto-EOI. Un EOI específico indica el nivel de IRQ que está reconociendo en el ISR. Un EOI no específico resetea el nivel de IRQ en el ISR. El auto-EOI resetea el nievl de IRQ en el ISR inmediatamente después de que la interrupción es reconocida.
Los modos de disparo de interrupción por flanco y nivel son soportados por el 8259A. Los modos de prioridad fija y prioridad rotativa son soportados.
El 8259 puede ser configurado para trabajar con un 8080/8085 o un 8086/8088. En el 8086/8088, el controlador de interrupciones proporcionará un número de interrupción en el bus de datos cuando se produce una interrupción. El ciclo de interrupción en el 8080/8085 emitirá tres bytes en el bus de datos (que corresponde a una instrucción CALL en el conjunto de instrucciones del 8085).
La estructura del controlador está formada por un conjunto de registros internos que analizaremos a continuación.
La programación de un 8259 en relación con el DOS y Microsoft Windows ha introducido una serie de cuestiones confusas en aras de la compatibilidad hacia atrás, que se extiende tan lejos como el PC original introducido en 1981.
La primera cuestión es más o menos la raíz de la segunda cuestión. Los controladores de dispositivos de DOS que espera para enviar un EOI no específico para el 8259s cuando terminan el servicio de su dispositivo. Esto evita el uso de cualquiera de los otros modos de EOI 8259 en DOS, y excluye la diferenciación entre el dispositivo que interrumpe en el cambio de itinerario del 8259 maestro al 8259 esclavo.
La segunda cuestión se refiere a la utilización de IRQ2 y IRQ9 de la introducción de un esclavo en 8259 el PC / AT. La línea INT del 8259 esclavo está conectado a IR2 del maestro. La línea de IRQ 2 del bus ISA, originalmente conectado a este IR2, fue desviado al IR1 del esclavo. Así, la línea IRQ2 viejo genera IRQ9 en la CPU. Para permitir la compatibilidad con controladores de dispositivos de DOS que aún puede configurar para IRQ2, un controlador es instalado por la BIOS para IRQ9, que redirige al controlador de interrupciones IRQ2 original.
Dado que la mayoría de otros sistemas operativos permiten cambios en las expectativas de controlador de dispositivo, otros modos de operación del 8259 , tales como Auto-EOI, se pueden utilizar. Esto es especialmente importante para hardware moderno x86 en la que una cantidad significativa de tiempo se puede gastardireccionando I / O en la comunicación con los 8259s. Esto también permite otras optimizaciones en la sincronización, tales como las secciones críticas, en un sistema con varios procesadores x86 con 8259s.
Dado que el bus ISA no es compatible con las interrupciones disparadas por nivel, este modo no se puede utilizar para las interrupciones conectados a los dispositivos ISA. En los sistemas MCA, los dispositivos usan interrupciones disparadas por nivel y el controlador de interrupciones es cableado para trabajar siempre en este modo. Los nuevos sistemas de EISA, PCI, y más tarde Edge/Level Control Registers (ELCRs) controlan el modo por la línea IRQ, haciendo el modo del irrelevante 8259 para sistemas con buses ISA. El ELCR es programado por la BIOS en el arranque del sistema para su correcto funcionamiento.
Los sistemas ELCR están ubicados en las posiciones 0x4d0 and 0x4d1 del espacio de direcciones de E/S del 8086. Hay 8-bits de ancho. Cada bit corresponde a una línea IRQ de los 8259s. Cuando un bit es establecido, la IRQ está en el modo disparado por nivel, de lo contrario, la IRQ está en modo disparado por flanco.
El 8259 genera interrupciones falsas en respuesta a una serie de condiciones.
La primera es una línea de IRQ se resetea antes de que sea reconocido.[cita requerida] Esto puede ocurrir debido al ruido en la línea de IRQ. En el modo accionado por flanco, el ruido debe mantener la línea en el estado bajo de 100 ns. Cuando el ruido disminuye, devuelve una resistencia pull-up de la línea de IRQ a alta, generando así una falsa interrupción. En el nivel disparado modo, el ruido puede causar un nivel de señal de alta en los sistemas de INTR línea. Si el sistema envía una solicitud de reconocimiento, el 8259 no tiene nada que resolver y por lo tanto envía un IRQ7 en respuesta. Este primer caso se generan falsas de IRQ7.
Un caso similar puede ocurrir cuando el 8259 desenmascarar y la deassertion entrada de IRQ no se sincronizan correctamente. En muchos sistemas, la entrada de IRQ se deasserted por una E / S de escritura, y el procesador no esperar hasta que la escritura llega a la I / O. Si el procesador continúa y desenmascara la IRQ 8259 antes de la entrada de IRQ se deasserted, el 8259 va a valer más INTR. Por el tiempo que el procesador reconoce este INTR y un acuse de recibo para leer la IRQ del 8259, la entrada de IRQ puede ser deasserted, y el 8259 devuelve una falsa IRQ7.
El segundo es el maestro de 8259 IRQ2 es de alta actividad, cuando el esclavo 8.259 líneas de IRQ están inactivos en el flanco de bajada de un reconocimiento de la interrupción. Este segundo caso se generan falsas IRQ15, pero es muy raro.
El 8259 acepta dos tipos de comandos generados por la CPU: los ICW (Inicialization Command Word) que inicializan el 8259, y los OCW (Operation Command Word) que permiten programar la modalidad de funcionamiento. Antes de que los 8259 de un sistema comiencen a trabajar deben recibir una secuencia de ICW que los inicialice. Los ICW y OCW constan de secuencias de 2 a 4 comandos consecutivos que el 8259 espera recibir secuencialmente, unos tras otros, a través del bus de datos, según sea necesario (el propio 8259 se encarga de contarlos midiendo los pulsos de la línea -WR). Los OCW pueden ser enviados en cualquier momento, una vez realizada la inicialización.
La comunicación con el 8259 emplea las líneas -WR y -RW, así como A0. El hecho de que exista una sola línea de direcciones implica que el 8259 sólo ocupa dos direcciones de puerto de E/S en el espacio de entrada y salida del ordenador.
En este apartado analizamos las diferentes secuencias de inicialización que podemos introducir al 8259 para su posterior funcionamiento.
Se le especifican al 8259 para configurar algunos aspectos tras la inicialización del mismo, entre estos podemos destacar:
A continuación comenzaremos a detallar las distintas OCWS que podemos especificar al 8259 para terminar de configurar su modo de funcionamiento:
El sistema PC/XT tiene un controlador 8259, mientras PC/AT y sistemas posteriores disponen de dos controladores 8259 maestro-esclavo. Desde IRQ0 hasta IRQ7 son las líneas de interrupción maestro del 8259, y desde la IRQ8 hasta IRQ15 las líneas de interrupción esclavo. Los nombres reales de las patillas del 8259 son desde la IR0 hasta la IR7. IRQ0 hasta IRQ15 se añadieron posteriormente, siendo los nombres de las líneas del bus ISA
Inicialmente IRQ7 fue una opción común para el uso de una tarjeta de sonido, pero más tarde IRQ5 se utilizó cuando se constató que IRQ7 podría interferir con el puerto de impresora (LPT1). Los puertos serie son con frecuencia con discapacidad a una línea de IRQ libre para otro dispositivo.
IRQ2 / 9 es la línea tradicional de interrupción para un puerto MPU-401 MIDI, pero esto entra en conflicto con el control del sistema ACPI de interrupción (SCI se cablea directamente al IRQ9 en los chipsets Intel), lo que significa ISA MPU-401 tarjetas con un cableado IRQ 2 / 9 , y los conductores MPU-401 con un dispositivo codificado IRQ 2 / 9, no se puede utilizar en el modo controlado por interrupciones en un sistema con ACPI habilitado.