§5.3 8259A可编程中断控制器
中断控制器是专门用来处理中断的控制芯片。它的功能是在有多个中断源的系统中,协助CPU实现对外部中断请求的管理,对它们进行优先权排队后选中当前优先权最高的中断请求向CPU发出中断请求信号;并且,当CPU响应中断请求进入中断服务子程序之后,如果有某个新的外部中断请求的优先权高于当前正在处理的最低优先权时,中断控制器还能让此中断通过而到达CPU的可屏蔽中断请求信号INTR端,从而实现中断嵌套。8259A可编程中断控制器用来管理输入到CPU的中断请求,实现优先权判决、提供中断向量、屏蔽中断输入等功能,它能直接管理8级中断。如果采用级联方式,则不用附加外部电路,就能管理64级中断输入。
§5.3.1 可编程中断控制器 8259A
PIC- Priority Interrupt Controller
用于管理和控制80x86的外部中断请求,可对8个中断源实现优先级控制,提供中断类型码,并根据需要对中断源进行中断屏蔽。使用单片8259A可以管理8级中断,采用级联方式,可扩充到64级(用9片8259A)
图5.7 8259级联
一、 内部结构
1. 中断请求寄存器(interrupt request register,IRR),
它保存从IR0~IR7来的中断请求信号。某一位为1表示相应引脚上有中断请求信号。该中断请求信号至少应保持到该请求被响应为止。中断响应后,该IR输入线上的请求信号应撤销。否则,在中断处理完结后,该IR线上的高电平可能会引起又一次中断服务。
2. 中断服务寄存器(interrupt service register,ISR):
用于保存所有正在服务的中断源。它是8位的寄存器(IS0~IS7分别对应IR0~IR7)。在中断响应时,判优电路把发出中断请求的中断源中优先级最高的中断源所对应的位设置为1,以表示该中断请求正在处理中。
ISR的某一位ISi置1可阻止与它同级,或更低优先级的请求被响应,但不阻止比它优先级高的中断请求被响应,即允许中断嵌套。所以,ISR中可能有不止一位被置1。
当8259A收到“中断结束(end of Interrupt,E0I)”命令时,ISR相应位会被清除。对自动EOI操作(automatic EOI,AE0I),ISR寄存器中刚被置1的位在中断响应结束时自动复位。
3. 中断屏蔽寄存器(Interrupt mask register,IMR):
用于存放中断屏蔽字,它的每一位分别与IR7~IR0,相对应。其中为1的位所对应的中断请求输入将被屏蔽,为0的位所对应的中断请求输入被允许。
4. 中断判优电路:
中断判优电路监测从IRR、ISR和IMR来的输入,并确定是否应向CPU发出中断请求。在中断响应时,它要确定ISR寄存器哪一位应置1,并将相应的中断类型码送给CPU。在EOI命令时,它要决定ISR寄存器哪一位应复位。
5. 7个CPU可访问的寄存器:分两组
▲ 初始化命令字ICW1 ICW2 ICW3 ICW4四个寄存器,系统初启时设定。
▲ 操作命令字对应存储在OCW1 OCW2 OCW3三个寄存器,系统运行时,由应用程序设定(实现对中断处理的动态管理和控制)。7个寄存器的寻址在8259A编程中介绍。
二、 引脚
在级联缓冲方式下, 控制缓冲器中数据的传送方向。 =0,数据传向CPU, =1,反之。图示 接高,使初始化期间CPU发送的命令字进入8259A。
<上一页 下一页>
|
三、 中断响应过程
<上一页 下一页> |
四、 工作方式 <上一页 下一页> |
五、 初始化命令字和操作命令字 <上一页 下一页>
|
§5.3.2 8259A的编程 8259A工作之前必须用写入控制命令的方法,设定其工作在我们所需要的状态。对应8259A的初始化命令字和操作命令字,其编程可分为初始化编程和操作方式编程两个方面。 <上一页 下一页> |
一、 内部寄存器的寻址方法 8259A的工作特点:内部寄存器多,而寻址只有一根地址线A0。因此存在控制字寄存器的寻址问题。8259A的内部7个控制字寄存器寻址方法: 对于IRR、ISR、IMR值的读出有类似规定,并由操作控制字OCW3相配合(参见OCW3)。列于表5.2。 <上一页 下一页>
|
三、8259A的初始化编程 这里以IBM PC/AT(80286)微机中的8259A为例说明其初始化编程方法。 在286以上的PC机中,使用了两片8259A级联,共可管理15级中断。各级中断的用途列于表5.3。 主片8259A的IRQ2(即IR2)中断请求端用于级联从片8259A,所以相当于主片的IRQ2又扩展了8个中断请求端IRQ8~IRQ15。 主片8259A的端口地址为20H、21H,中断类型码为08H~0FH,从片8259A的端口地址为A0H、A1H,中断类型码为70H~77H。主片的8级中断已全被系统使用(其中IRQ2被从片占用),从片尚保留4级未用。其中IRQ0用于日历时钟中断(08H),IRQ1用于键盘中断(09H)。扩展的IRQ8用于实时时钟中断,IRQ13来自协处理器80287。除上述中断请求信号外,所有其他的中断请求信号都来自I/O通道的扩展板。 1.8259A初始化编程 程序段如下: 主片8259A的初始化 MOV AL,llH ;写入ICWl,设定边沿触发,级联方式 OUT 20H,AL MP INTR1 ;延时,等待8259A操作结束,下同 MOV AL,08H ;写入ICW2,设定IRQ0的中断类型码为08H OUT 21H,AL MP INTR2 MOV AL,04H ;写入ICW3,设定主片IRQ2级联从片 OUT 21H,Al MP INTR3 MOV AL,11H ;写入1CW4,设定特殊全嵌套方式,一般EOI方式 OUT 2lH,AL;从片8259A的初始化 MOV AL,11H ;写入ICWl,设定边沿触发,级联方式 OUT 0A0H,AL MP INTR5 MOV AL,70H ;写入ICW2,设定从片IR。,即IRQx的中断类型码为70H OUT 0A1H,AL MP INTR6 MOV AL,02H ;写入ICW3,设定从片级联到主片的IRQ: OUT 0A1H,AL MP INTR7 MOV AL,0lH ;写入ICW4,设定普通全嵌套方式,一般EOI方式 OUT 0A1H,AL 2. 级联工作编程 当来自某个从片的中断请求进入服务时,主片的优先权控制逻辑不封锁这个从片,从而使来自从片的更高优先级的中断请求能被主片所识别,并向CPU发出中断请求信号。 因此,中断服务程序结束时必须用软件来检查被服务的中断是否是该从片中惟一的中断请求。先向从片发出一个EOI命令,清除已完成服务的ISR位。然后再读出ISR的内容,检查它是否为0。如果ISR的内容为0,则向主片发一个EOI命令,清除与从片相对应的ISR位;否则,就不向主片发EOI命令,继续进行从片的中断处理,直到ISR的内容为0,再向主片发出EOI命令。 程序段如下: 读ISR的内容 MOV AL,0BH ;写入OCW3,读ISR命令 OUT 0A0H,AL NOP ;延时,等待8259A操作结束 IN AL,0A0H ;读出ISR 向从片发EOI命令 MOV AL,20H OUT 0A0H,AL ;写从片EOI命令 向主片发EOI命令 MOV AL,20H OUT 20H,AL ;写主片EOI命令 <上一页 下一页> |