1、中断源
x86系统支持256个中断源,每个中断源使用0~255数字标识,该标识称作中断向量号(即CPU中断源的中断号,要与外部中断的中断号IRQ n相区别),CPU通过获取中断向量号识别中断源。256个中断源可以分为:
其中:
1)内部中断:由CPU内部事件及执行软中断指令产生,由除法中断、溢出中断、单步中断、断点中断、软件中断组成;
2)外部中断:x86 CPU为外部中断只提供了NMI、INTR两个引脚;其中外部不可屏蔽中断如总线错误、电源错误、内存错误等引起的中断,通过NMI引脚提供给CPU;外部可屏蔽中断通过INTR引脚向CPU传递中断。
2、中断控制器
目前常见的中断控制器分为PIC(programable interrupt controller)8259A和APIC(advanced programable interrupt controller);
2.1、8259A PIC
我们都知道计算机可以挂接上许多外部设备,比如键盘、磁盘驱动器、鼠标、声卡……等等一系列设备,而这些设备都可能在同一时刻向CPU发出
中断信号(也就是外部中断),那么CPU到底应当响应哪一个设备的中断信号呢?这都通过另外一个芯片来控制,在IBM PC机中,这个芯片常常被称作
:可编程中断控制器(PIC)8259A,说它可编程,是因为我们可以通过编程来改变它的功能。比如我可以通过编程设定CPU应当优先响应哪一个中断,
屏蔽哪些中断等等一系列事件。
1)引脚功能介绍
- D7~D0:双向、三态数据线,与系统数据总线相连。对i8259A编程时,命令字由此写入,在第二个中断响应总线周期中,中断类型码由此传给CPU。
- RD (上划线):读信号,输入,与系统控制总线IOR(上划线) 相连。RD (上划线)
=0时,CPU对i8259A进行读操作。 - WR(上划线) :写信号,输入,与系统控制总线IOW(上划线) 相连。当WR(上划线)=0时,CPU对i8259A进行写操作。
- A0:片内寄存器寻址信号,输入,用于对片内寄存器端口寻址。每片i8259A有两个寄存器端口,A0=0时,选中偶地址端口,A0=1时,选中奇地址端口。在与8088系统相连时,可将该引脚与地址总线的A0连接;与8086系统连接时,可将该引脚与地址总线的A1连接。
- CS (上划线):片选信号,输入。CS (上划线)
=0时,i8259A被选中。在与8088系统相连时,系统地址信号A15~A1经译码器译码后为i8259A产生片选信号。 - SP/EN(上划线) :双功能双向信号。当8259A工作在缓冲模式时,它作为输出,用于控制缓冲器的传送方向。当数据从CPU送往i8259A时,SP/EN(上划线)
输出为高电平;当数据从i8259A送往CPU时,SP/EN(上划线) 输出为低电平。当8259A工作在非缓冲模式时,它作为输入,用于指定8259A是主片还是从片(级联方式)。SP/EN(上划线) =1的8259A为主片,SP/EN(上划线) =0的8259A为从片。
备注:在Linux中, i8259A均工作在非缓冲模式下。
- INT:中断请求信号,输出,与CPU的中断请求信号线INT相连。在级联方式下,从片的INT与主片的IR7~IR0中的某一根连接在一起。