Intel 8259

El Intel 8259 es un controlador de interrupción programable (PIC) diseñado para los microprocesadores Intel 8085 e Intel 8086. La parte inicial era 8259, una versión posterior con el sufijo A era compatible con versiones posteriores y se podía utilizar con el procesador 8086 u 8088. El 8259 combina múltiples fuentes de entrada de interrupción en una única salida de interrupción al microprocesador host, extendiendo los niveles de interrupción disponibles en un sistema más allá de uno o dos niveles que se encuentran en el chip del procesador. El 8259A era el controlador de interrupciones para el bus ISA en la IBM PC original y en la IBM PC AT.
El 8259 se introdujo como parte de la familia MCS 85 de Intel en 1976. El 8259A se incluyó en la PC original introducida en 1981 y fue mantenido por PC/XT cuando se introdujo en 1983. Se agregó un segundo 8259A con la introducción del PC/AT. El 8259 ha coexistido con la arquitectura Intel APIC desde su introducción en las PC multiprocesador simétricas. Las PC modernas han comenzado a eliminar gradualmente el 8259A en favor de la arquitectura Intel APIC. Sin embargo, aunque ya no es un chip separado, la interfaz 8259A todavía la proporciona el Platform Controller Hub o el puente sur en las placas base x86 modernas.
Descripción funcional
Los pines de señal principales en un 8259 son los siguientes: ocho líneas de entrada de solicitud de interrupción denominadas IRQ0 a IRQ7, una línea de salida de solicitud de interrupción denominada INTR, una línea de reconocimiento de interrupción denominada INTA, D0 a D7 para comunicar el nivel de interrupción o el desplazamiento del vector. Otras conexiones incluyen CAS0 a CAS2 para conexión en cascada entre 8259.
Se pueden conectar en cascada hasta ocho 8259 esclavos a un maestro 8259 para proporcionar hasta 64 IRQ. Los 8259 se conectan en cascada conectando la línea INT de un esclavo 8259 a la línea IRQ de un maestro 8259.
Las operaciones de fin de interrupción (EOI) admiten EOI específico, EOI no específico y EOI automático. Una EOI específica especifica el nivel de IRQ que reconoce en el ISR. Una EOI no específica restablece el nivel de IRQ en el ISR. Auto-EOI restablece el nivel de IRQ en el ISR inmediatamente después de que se reconoce la interrupción.
El 8259A admite los modos de disparo de interrupción de flanco y de nivel. Se admiten los modos de prioridad fija y prioridad rotativa.
El 8259 se puede configurar para funcionar 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 produzca una interrupción. El ciclo de interrupción del 8080/8085 emitirá tres bytes en el bus de datos (correspondiente a una instrucción CALL en el conjunto de instrucciones del 8080/8085).
El 8259A proporciona funcionalidad adicional en comparación con el 8259 (en particular, modo almacenado en búfer y modo activado por nivel) y es compatible con él.
Consideraciones de programación
DOS y Windows

Programando un 8259 en conjunto con DOS y Microsoft Windows ha introducido una serie de problemas confusos en aras de la compatibilidad atrasada, que se extiende tan lejos como el PC original introducido en 1981.
El primer problema es más o menos la raíz del segundo. Se espera que los controladores de dispositivos DOS envíen un EOI no específico a los 8259 cuando terminen de reparar su dispositivo. Esto evita el uso de cualquiera de los otros modos EOI del 8259 en DOS y excluye la diferenciación entre interrupciones de dispositivo redirigidas desde el 8259 maestro al 8259 esclavo.
El segundo tema trata sobre el uso de IRQ2 e IRQ9 a partir de la introducción de un esclavo 8259 en el PC/AT. La salida INT del esclavo 8259 está conectada al IR2 del maestro. La línea IRQ2 del bus ISA, originalmente conectada a este IR2, fue redirigida al IR1 del esclavo. Así, la antigua línea IRQ2 ahora genera IRQ9 en la CPU. Para permitir la compatibilidad con versiones anteriores de los controladores de dispositivos DOS que aún están configurados para IRQ2, el BIOS instala un controlador para IRQ9 que redirige las interrupciones al controlador IRQ2 original.
En la PC, el BIOS (y por lo tanto también el DOS) tradicionalmente asigna las solicitudes de interrupción del maestro 8259 (IRQ0-IRQ7) al desplazamiento del vector de interrupción 8 (INT08-INT0F) y la interrupción del esclavo 8259 (en PC/AT y posteriores). solicita (IRQ8-IRQ15) interrumpir el desplazamiento del vector 112 (INT70-INT77). Esto se hizo a pesar de que el procesador reservó los primeros 32 vectores de interrupción (INT00-INT1F) para excepciones internas (esto se ignoró en el diseño de la PC por alguna razón). Debido a los vectores reservados para excepciones, la mayoría de los demás sistemas operativos asignan (al menos el maestro) 8259 IRQ (si se usan en una plataforma) a otro desplazamiento base de vector de interrupción.
Otros sistemas operativos
Dado que la mayoría de los demás sistemas operativos permiten cambios en las expectativas del controlador del dispositivo, se pueden utilizar otros modos de funcionamiento del 8259, como Auto-EOI. Esto es especialmente importante para el hardware x86 moderno en el que se puede dedicar una cantidad significativa de tiempo al retraso del espacio de direcciones de E/S cuando se comunica con los 8259. Esto también permite una serie de otras optimizaciones en la sincronización, como secciones críticas, en un sistema multiprocesador x86 con 8259.
Modos activados por borde y nivel
Dado que el bus ISA no admite interrupciones activadas por nivel, el modo activado por nivel no se puede utilizar para interrupciones conectadas a dispositivos ISA. Esto significa que en PC/XT, PC/AT y sistemas compatibles, el 8259 debe programarse para el modo activado por flanco. En los sistemas MCA, los dispositivos utilizan interrupciones activadas por nivel y el controlador de interrupciones está cableado para funcionar siempre en modo activado por nivel. En los sistemas EISA, PCI y posteriores más nuevos, los registros de control de nivel/borde (ELCR) controlan el modo por línea IRQ, lo que efectivamente hace que el modo del 8259 sea irrelevante para dichos sistemas con buses ISA. El BIOS programa el ELCR al iniciar el sistema para que funcione correctamente.
Los ELCR están ubicados en 0x4d0 y 0x4d1 en el espacio de direcciones de E/S x86. Tienen 8 bits de ancho y cada bit corresponde a una IRQ de los 8259. Cuando se establece un bit, la IRQ está en modo activado por nivel; de lo contrario, la IRQ está en modo activado por flanco.
Interrupciones espurias
El 8259 genera interrupciones espurias en respuesta a una serie de condiciones.
La primera es una línea IRQ que se cancela antes de ser reconocida. Esto puede ocurrir debido al ruido en las líneas IRQ. En el modo activado por flanco, el ruido debe mantener la línea en estado bajo durante 100 ns. Cuando el ruido disminuye, una resistencia pull-up devuelve la línea IRQ a alto, generando así una interrupción falsa. En el modo activado por nivel, el ruido puede causar un nivel de señal alto en la línea INTR del sistema. 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 generará IRQ7 espurias.
Puede ocurrir un caso similar cuando el desenmascaramiento del 8259 y la desactivación de la entrada IRQ no están sincronizados correctamente. En muchos sistemas, la entrada IRQ se desactiva mediante una escritura de E/S y el procesador no espera hasta que la escritura llegue al dispositivo de E/S. Si el procesador continúa y desenmascara la IRQ del 8259 antes de que se desactive la entrada IRQ, el 8259 afirmará INTR nuevamente. En el momento en que el procesador reconoce este INTR y emite un reconocimiento para leer la IRQ del 8259, la entrada IRQ puede ser desactivada y el 8259 devuelve una IRQ7 falsa.
El segundo es que el IRQ2 del maestro 8259 está activo en nivel alto cuando las líneas IRQ del esclavo 8259 están inactivas en el flanco descendente de un reconocimiento de interrupción. Este segundo caso generará IRQ15 espurias, pero es poco común.
PC/XT y PC/AT
El sistema PC/XT ISA tenía un controlador 8259, mientras que PC/AT y los sistemas posteriores tenían dos controladores 8259, maestro y esclavo. IRQ0 a IRQ7 son las líneas de interrupción del maestro 8259, mientras que IRQ8 a IRQ15 son las líneas de interrupción del esclavo 8259. Las etiquetas de los pines de un 8259 son IR0 a IR7. IRQ0 a IRQ15 son los nombres de las líneas del bus ISA a las que están conectados los 8259.
Variantes
Número de modelo | Tecnología | Rango de temperatura | Paquete | Fecha de lanzamiento | Precio (USD) |
---|---|---|---|---|---|
ID8259 | -40 °C a +85 °C | Marzo/abril de 1979 | 23,15 dólares | ||
M8259 | Militar | Marzo/abril de 1979 | $95.00 | ||
82C59A | CMOS | Julio/agosto de 1984 | |||
8259 | 28 Pin PLCC |
- ^ En cantidades de 100 y hasta
- ^ Sampling Q1 1986
Contenido relacionado
Tarjeta perforada
CPython
Arquitectura Harvard