8259A
中断控制器芯片
8259A是专门为了对8085A和8086/8088进行中断控制而设计的芯片,它是可以用程序控制的中断控制器。单个的8259A能管理8级向量优先级中断。在不增加其他电路的情况下,最多可以级联成64级的向量优级中断系统。8259A有多种工作方式,能用于各种系统。各种工作方式的设定是在初始化时通过软件进行的。 在总线控制器的控制下,8259A芯片可以处于编程状态和操作状态,编程状态是CPU使用IN或OUT指令对8259A芯片进行初始化编程的状态。
工作原理
一个外部中断请求信号通过中断请求线IRQ,传输到IMR(中断屏蔽寄存器),IMR根据所设定的中断屏蔽字(OCW1),决定是将其丢弃还是接受。如果可以接受,则8259A将IRR(中断请求暂存寄存器)中代表此IRQ的位置置1,以表示此IRQ有中断请求信号,并同时向CPU的INTR(中断请求)管脚发送一个信号。但CPU这时可能正在执行一条指令,因此CPU不会立即响应。而当这CPU正忙着执行某条指令时,还有可能有其余的IRQ线送来中断请求,这些请求都会接受IMR的挑选。如果没有被屏蔽,那么这些请求也会被放到IRR中,也即IRR中代表它们的IRQ的相应位会被置1。
当CPU执行完一条指令时后,会检查一下INTR管脚是否有信号。如果发现有信号,就会转到中断服务,此时,CPU会立即向8259A芯片的INTA(中断应答)管脚发送一个信号。当芯片收到此信号后,判优部件开始工作,它在IRR中,挑选优先级最高的中断,将中断请求送到ISR(中断服务寄存器),也即将ISR中代表此IRQ的位置一,并将IRR中相应位置零,表明此中断正在接受CPU的处理。同时,将它的编号写入中断向量寄存器IVR的低三位(IVR正是由ICW2所指定的,不知你是否还记得ICW2的最低三位在指定时都是0,而在这里,它们被利用了!)这时,CPU还会送来第二个INTA信号,当收到此信号后,芯片将IVR中的内容,也就是此中断的中断号送上通向CPU的数据线。
这个内容看起来仿佛十分复杂,但如果我们用一个很简单的比喻来解释就好理解了。CPU就相当于一个公司的老总,而8259A芯片就相当于这个老总的秘书。比如有很多人想见老总,但老总正在打电话,于是交由秘书先行接待。每个想见老总的人都需要把自己的名片交给秘书,秘书首先看看名片,有没有老总明确表示不愿见到的人,如果没有就把它放到一个盒子里面。这时老总的电话还没打完,但不停的有人递上名片求见老总,秘书就把符合要求的名片全放在盒子里了。老总打完电话了,探出头来问秘书:有人想见我吗?这时,秘书就从盒子里挑选一个级别最高的,并把他的名片交给老总。
这里需要理解的是中断屏蔽与优先级判定并不是一回事,如果被屏蔽了,那么参加判定的机会也都没了。在默认情况下,IRQ0的优先级最高,IRQ7最低。当然我们可以更改这个设定,这样在下面有详细描述。
当芯片把中断号送上通往CPU的数据线后,就会检测ICW4中的EOI是否被置位。如果EOI被置位表示需要自动清除中断请求信号,则芯片会自动将ISR中的相应位清零。如果EOI没有被置位,则需要中断处理程序向芯片发送EOI消息,芯片收到EOI消息后才会将ISR中的相应位清零。
这里的机关存在于这样一个地方。优先权判定是存在于8259A芯片中的,假如CPU正在处理IRQ1线来的中断,这时ISR中IRQ1所对应的位是置1的。这时来了一个IRQ2的中断请求,8259A会将其同ISR中的位进行比较,发现比它高的IRQ1所对应的位被置位,于是8259A会很遗憾的告诉IRQ2:你先在IRR中等等。而如果这时来的是IRQ0,芯片会马上让其进入ISR,即将ISR中的IRQ0所对应的位置位,并向CPU发送中断请求。这时由于IRQ1还在被CPU处理,所以ISR中IRQ1的位也还是被置位的,但由于IRQ0的优先级高,所以IRQ0的位也会被置位,并向CPU发送新的中断请求。此时ISR中IRQ0与IRQ1的位都是被置位的,这种情况在多重中断时常常发生,非常正常。
如果EOI被设为自动的,那么ISR中的位总是被清零的(在EOI被置位的情况下,8259A只要向CPU发送了中断号就会将ISR中的相应位清零),也就是如果有中断来,芯片就会马上再向CPU发出中断请求,即使CPU正在处理IRQ0的中断,CPU并不知道谁的优先级高,它只会简单的响应8259A送来的中断,因此,这种情况下低优先级的中断就可能会中断高优先级中断服务程序。所以在PC中,我们总是将EOI位清零,而在中断服务程序结束的时候才发送EOI消息。
内部结构
(1)中断请求寄存器(IRR)
中断请求寄存器(IRR)为8位,接受来自IR0~IR7的中断请求信号,当IR0~IR7上出现某一中断请求信号时,IRR对应位被置1;
(2)中断屏蔽寄存器IMR
中断屏蔽寄存器IMR 为8位(8个中断输入),若IRR(中断请求寄存器)中记录的8个中断请求中有任何一个需要屏蔽,只要将IMR的相应位置1即可,未被屏蔽的中断请求可以进入优先权判别器;它的内容由CPU通过对8259初始化时设置设定。
(3)中断服务寄存器ISR
8位,保存当前正在处理的中断请求,例如,如果ISR的D2=1,表示CPU正在为来自IR2的中断请求服务。
(4)优先权判别器PR
若某中断请求正在被处理,8259A外部又有新的中断请求,则由优先权判别器将新进入的中断请求和当前正在处理的中断进行比较,以决定哪一个优先级更高。若新的中断请求比正在处理的中断级别高,由PR通过控制逻辑向CPU发出中断申请INT,正在处理的中断自动被禁止,先处理级别高的中断。
(5)数据总线缓冲器
用于8259A与数据总线的接口,传输命令控制字、状态字和中断类型码
(6)读/写控制逻辑
确定数据总线缓冲器中数据的传输方向,选择内部的各命令字寄存器。当CPU发读信号时将8259A的状态信息放到数据总线上;当CPU发写信号时,将CPU发来的命令字信息送入指定的命令字寄存器中。
(7)级联缓冲/比较器
用来存放和比较在系统中用到的所有8259A的级联地址。主控8259A通过CAS0、CAS1和CAS2发送级联地址,选中从控8259A。
主要功能
功能:就是在有多个中断源的系统中,接受外部的中断请求,并进行判断,选中当前优先级最高的中断请求,再将此请求送到cpu的INTR端;当cpu响应中断并进入中断子程序的处理过程后,中断控制器仍负责对外部中断请求的管理。
8259A的主要功能如下:
①一片8259A可以接受并管理8级可屏蔽中断请求,通过8片8259A级联可扩展至63级可屏蔽中断优先控制。
②对每一级中断都可以通过程序来屏蔽或允许。
③在中断响应周期,8259A可为CPU提供相应的中断类型码
④具有多种工作方式,并可通过编程来加以选择。
初始化命令字
8259A有4个初始化命令字ICW1~ICW4, 它们按照一定的顺序送入,用于设置8259A的初始状态。无论何时,当微处理器向8259A发送一条A0=0和D4=1的命令时,这条命令就译码为ICW1。 A0=0和D4=1是ICW1的标识位! 利用A0=0,D4=1对ICW1寻址。
(1)ICW1:规定8259的连接方式(单片或级联)与中断源请求信号的有效形式(边沿或电平触发)。命令字格式如图《ICW1》所示,利用A0=0,D4=1寻址。
注意:D7、D6、D5、 D2在8086/8088系统中不用,可为1,也可为0。它们在8080/8085系统中使用。
(2) ICW2(中断类型码字)
ICW2是设置中断类型码的初始化命令字。
编程时用ICW2设置中断类型码高5位T7~T3,低3位自动插入IR的编码。
例如:写入ICW2的内容为40H,则IR0~IR7对应的8个中断类型号依此为:40H、41H、….47H,8个中断类型号一定是连号!
ICW2决定了某位中断请求输入线所对应的向量类型码,可以使CPU自动得到相应的中断请求的中断类型号。
(3) ICW3(级连控制字)ICW3是标志主片/从片的初始化命令字。只有在一个系统中包含多片8259A时,ICW3才有意义!!!!
主8259A的ICW3命令字
(4) ICW4(中断结束方式字)
ICW4为方式控制初始化命令字,ICW4的格式如下:
操作命令字
在对8259A用初始化命令字进行初始化后,就进入工作状态,准备好接收IR输入的中断请求信号。在8259A工作期间, 可通过操作命令字来使它按不同的方式进行操作。操作命令字是在应用程序内部设置的。操作命令字共有三个,可以独立使用。
1)OCW1(屏蔽控制字)
OCW1称为中断屏蔽操作命令字,其格式如右
2) OCW2(中断结束和优先权循环控制字)
OCW2用来设置优先级循环方式和中断结束方式
3) OCW3(设置屏蔽方式和读状态控制字)
OCW3的功能有三个方面:一是设置和撤消特殊屏蔽方式; 二是设置中断查询方式;三是用来设置对8259A内部寄存器的读出命令。其格式如右:
中断嵌套
(1)(普通)一般完全嵌套方式:是8259A最常用的工作方式,该方式下中断优先权是固定的,即IR0优先权最高,IR7优先权最低。
在此中断源中断服务程序完成之前,与它同级(多片时会有同级)或优先权更低的中断源的申请就被屏蔽,只有优先权比它高的中断源的请求被允许的,对同级或低级的中断请求禁止响应。
(2) 特殊完全嵌套方式
特殊完全嵌套方式用于多片级联优先权管理。 在特殊完全嵌套方式下,中断优先权也是固定的,即IR0优先权最高,IR7优先权最低。当处理某一级中断时,如果有同级(多片时发生)的中断请求,那么也会给予响应,从而实现一种对同级中断请求的特殊嵌套。即多片时,后到的同级别中断的级别高!!!
注意:特殊全嵌套方式用在8259A级连系统中。
主片8259A编程为特殊全嵌套方式,当来自某一从片的中断请求正在处理时,对来自优先级较高的主片其他引脚上的中断请求进行开放;另一方面,对来自同一从片的较高优先级请求也会开放。
初始化编程
对8259的初始化一定要按规定的顺序进行,假定8259占用的I/O地址为FF00和FF02H(奇地址):
MOV DX,0FF00H ;8259的地址A0=0
MOV AL,13H ;写ICW1,边沿触发,单片,
OUT DX,AL
MOV DX,0FF02H ;8259地址A0=1
MOV AL,48H ;写ICW2,设置中断类型码
OUT DX,AL ;中断向量为48H-4FH(IR0-IR7)单片8259,不对ICW3设置
MOV AL,03H ;写ICW4,8086/88模式,自动中;断结束 (EOI),非缓冲,一般嵌套
OUT DX,AL
MOV AL,0E0H ;写OCW1,屏蔽IR5、IR6、 IR7中断源
OUT DX,AL ;(假定这3个中断输入未用),其它开中断
参考资料
最新修订时间:2024-12-25 22:04
目录
概述
工作原理
参考资料