CPU的中断向量范围为 0--255 , 其中 0--31 为 cpu 保留使用。中断源可分为外部中断( Extenal Interrupts) 和软中断 (Software-Genrated Interrupts).
CPU处理的各种中断中,对于来自外部的硬件中断由可编程中断控制器 (PIC) 控制, 8259A 就是其中一种。
单个8259A 可连接 8 个中断源,最多可级联 9 个,所以可接受 64 个中断源,在 IBM PC 机上级联了两个 8259A ,可共接收 15 个中断源。
在总线的控制下,8259A可处于编程状态和操作状态,CPU通过使用IN OUT最新片进行编程,芯片包含中断请求寄存器(IRR),中断屏蔽寄存器(IMR),正在服务寄存器(ISR),优先级解析器。
IRR:保存输入的中断请求,寄存器的8位对应IRQ0--IRQ7。
IMR:保存被中断的请求,8位寄存器中哪位为1表示IRQ1--IRQ7中相应中断被屏蔽。
ISR:保存正在服务的中断请求。
优先级解析器:用来选取优先级高的中断先处理。IRQ向量越低优先级越高。
中断处理过程:
1.中断信号到来,IMR根据初始化设置判断该终端是否被屏蔽,如果没有屏蔽,送到IRR
2.优先级解析器取出优先级最高的终端,发送INT信号到CPU,在CPU完成当前指令后会向芯片发送INTA型号,8259A收到信号后把终端放到ISR中,同时复位IRR中相应位,表示中断正在处理
3.CPU先芯片发出第二个INTA,通知8259A发送中断信号,行骗将中断向量发到数据总线供CPU读取
4.CPU处理中断,周期结束。
中断结束方式:
1.AEOI(Automatic End of Interrupt),在第二个INTA结尾处,ISR中当前服务比特位自动复位。
2.非自动,中断服务结束后,服务程序向8259A发送EOI命令,复位ISR中相应比特位。
编程方式:
1. 每个8259A有两个端口用于编程,Master 0x20、0x21, Slave 0xA0、0xA1。
2. 可以通过端口想芯片写入两种命令字,ICWS, OCWS。ICW 用于初始化,OCW用处操作。
I/O端口及所能操作的控制字和寄存器:
1. 0x20, Master ICW1 OCW2 OCW2 IRR ISR
2. 0x21, Master ICW2 ICW3 ICW4 IMR
3. 0xA0, Slave ICW1 OCW2 OCW2 IRR ISR
4. 0xA1, Slave ICW2 ICW3 ICW4 IMR
控制字介绍:
1. ICW1: 用于向8259A发初始化命令,是初始化命令序列的第一条,表示初始化的开始。
位0, 1=need ICW4、0=not need ICW4
位1, 1=single、0=cascaded(级联)
位2,
位3, 1= level triged 、 0=edge triged
位4, 恒为1
位5--8,
未完待续。。。。。