82371AB (PIIX4)
E
172
4/9/97 2:23 PM PIIX4aDS
INTEL CONFIDENTIAL
(until publication date)
PRELIMINARY
IRQ8#
IRQ9
IRQ10
IRQ11
IRQ12/Mouse
FERR#
IRQ14
IRQ15
82C59
Core
Controller 2
(Slave)
Timer 1 Counter
IRQ1
IRQ3
IRQ4
IRQ5
IRQ6
IRQ7
82C59
Core
Controller 1
(Master)
INTR
INTR
(To CPU)
intr_blk
Figure 5. Interrupt Controller Block Diagram
8.6.1.
PROGRAMMING THE INTERRUPT CONTROLLER
The Interrupt Controller accepts two types of command words generated by the CPU or bus master:
Initialization Command Words (ICWs)
Before normal operation can begin, each Interrupt Controller in the system must be initialized. In the 82C59, this
is a 2- to 4-byte sequence. However, for PIIX4, each controller must be initialized with a 4-byte sequence. This
4-byte sequence is required to configure the interrupt controller correctly for PIIX4 implementation. This
implementation is ISA-Compatible.
The four initialization command words are referred to by their acronyms: ICW1, ICW2, ICW3, and ICW4. The
base address for each interrupt controller is a fixed location in the I/O memory space, at 0020h for CNTRL-1 and
at 00A0h for CNTRL-2. An I/O write to the CNTRL-1 or CNTRL-2 base address with data bit 4 equal to 1 is
interpreted as ICW1. For PIIX4-based ISA systems, three I/O writes to “base address + 1” (021h for CNTRL-1
and 0A1h for CNTRL-2) must follow the ICW1. The first write to “base address + 1” (021h/0A1h) performs ICW2,
the second write performs ICW3, and the third write performs ICW4.
ICW1 starts the initialization sequence. ICW2 is programmed to provide bits [7:3] of the interrupt vector that will
be released onto the data bus by the interrupt controller during an interrupt acknowledge. A different base [7:3] is
selected for each interrupt controller. ICW3 is programmed differently for CNTRL-1 and CNTRL-2, and has a
different meaning for each controller.
For CNTRL-1, the master controller, ICW3 is used to indicate which IRQx input line is used to cascade CNTRL-
2, the slave controller. Within the PIIX4 interrupt unit, IRQ2 on CNTRL-1 is used to cascade the INTR output of
CNTRL-2. Consequently, bit 2 of ICW3 on CNTRL-1 is set to a 1, and the other bits are set to 0’s.
For CNTRL-2, ICW3 is the slave identification code used during an interrupt acknowledge cycle. CNTRL-1
broadcasts a code to CNTRL-2 over three internal cascade lines if an IRQ[x] line from CNTRL-2 won the priority
arbitration on the master controller and was granted an interrupt acknowledge by the CPU. CNTRL-2 compares
this identification code to the value stored in ICW3, and if the code is equal to bits [2:0] of ICW3, CNTRL-2
assumes responsibility for broadcasting the interrupt vector during the second interrupt acknowledge cycle
pulse.
ICW4 must be programmed on both controllers. At the very least, bit 0 must be set to a 1 to indicate that the
controllers are operating in an Intel Architecture-based system.
Operation Command Words (OCWs)