IBM BDM-610000049 Switch User Manual


 
BDM-610000049 Rev G Chapter 4: Using the cpuModule 83
Basic Interrupt Information for Programmers
An interrupt is a subroutine called asynchronously by external hardware (usually an I/O device) during the
execution of another application. The CPU halts execution of its current process by saving the system state and
next instruction, and then jumps to the interrupt service routine, executes it, loads the saved system state and
saved next instruction, and continues execution. Interrupts are good for handling infrequent events such as
keyboard activity. Interrupts on this cpuModule are controlled by two Intel 8259-equivalent interrupt
controllers containing 13 available interrupt request lines.
What happens when an interrupt occurs?
An IRQx pin on the PC/104 bus makes a low to high transition while the corresponding interrupt mask bit is
unmasked and the PIC determines that the IRQ has priority, that is, the PIC interrupts the processor. The current
code segment (CS), instruction pointer (IP), and flags are pushed onto the stack. The CPU then reads the 8-bit
vector number from the PIC, and a new CS and IP are loaded from a vector—indicated by the vector number—
from the interrupt vector table that exists in the lowest 1024 bytes of memory. The processor then begins
executing instructions located at CS:IP. When the interrupt service routine is completed the CS, IP, and flags that
were pushed onto the stack are popped from the stack into their appropriate registers and execution resumes
from the point where it was interrupted.
How long does it take to respond to an interrupt?
A DOS system can respond to an interrupt between 6 and 15 μs. A Windows system can take a much longer time
when a service routine has been installed by a device driver implemented as a DLL—from 250 to 1500 μs or
longer. The time the CPU spends in the interrupt depends on the efficiency of the code in the ISR. These
numbers are general guidelines and will fluctuate depending on operating system and version. Minimum time
between two IRQ requests is 125 ns per ISA specification.
Interrupt Request Lines
To allow different peripheral devices to generate interrupts on the same computer, the ISA bus has eight different
interrupt request (IRQ) lines. On the ISA bus, a transition from low to high on one of these lines generates an
interrupt request, which is handled by the PC’s interrupt controller. On the PCI bus, an interrupt request is
level-triggered.
The interrupt controller checks to see if interrupts are to be acknowledged from that IRQ and, if another
interrupt is already in progress, it decides if the new request should supersede the one in progress or if it has to
wait until the one in progress is done. This prioritizing allows an interrupt to be interrupted if the second request
has a higher priority. The priority level is based on the number of the IRQ; IRQ0 has the highest priority, IRQ1 is
second-highest, and so on through IRQ7, which has the lowest. Many of the IRQs are used by the standard system
resources. IRQ0 is used by the system timer, IRQ1 is used by the keyboard, IRQ3 by COM2, IRQ4 by COM1, and
IRQ6 by the disk drives. Therefore, it is important to know which IRQ lines are available in your system for use by
the cpuModule.