可编程中断控制器 8259A
第七章中断系统是冯诺,依曼结构计算机的一项重要技术,
尤其为解决当前高速运算 CPU与低速外部设备信息交换之间的矛盾。
8086系列有功能很强的中断系统,它可通过 8259A
可编程中断控制器来实现。
中断控制器的功能是在有多个中断源系统中,协助
CPU实现对外部中断的管理,对它们进行优先级排队后向 CPU发出中断请求信号。 8259A是可编程的 8输入端中断控制器,其功能很强,也很灵活,但使用时比较复杂。
概 述
Intel8259A芯片有以下特点:
①单片 8259A能管理 8级中断。若采用级联工作方式,
可以用 9片 8259A构成 64级主从式中断系统。
② 具有中断判优逻辑功能,且对每一级中断都可以屏蔽或允许。
③ 中断响应后,能将预置的中断类型码自动提供给
CPU。
④ 8259A可以通过编程工作在多种不同的方式,从而能方便的满足多种类型微机中断系统的需要。
1.8259A的内部结构和引脚功能
①数据总线缓冲器:与 DB挂接(低 8位),传送控制字 状态信息,中断向量。因为有缓冲器,可直接挂接在总线上,没有缓冲器的设备,不能直接挂接在总线上。
② 读写控制逻辑:接 CPU 的控制信号。
RD:由 IN指令产生,实现读 8259A(内部寄存器)
WR:由 OUT指令产生,实现写 8259A(命令字)
A0:地址码,选择内部控制寄存器
A0=0:选择内部偶地址
A0=1:选择内部奇地址
CS:片选信号,凡是挂总线上的芯片都需分配一个来自于系统译码电路的选通信号。
③ 级联缓冲器:多 8259A系统,也称缓冲方式。
该缓冲器用来选通某个 8259A与 DB连接。
CAS0~CAS3:级联信号。
主从片并接,主片为输出信息,从片为输入信息。
主片有 8个不同的编码信息,对应 8个从片。在第 一个 INTA时,向所有从发一个编码信息,从片接收到编码信息,与自己的编码进行比较,若相同,表明本从片被选中。在第二个 INTA,把中断向量放上数据总线,传送给 CPU。
SP/EN:双功能信号,用于级联控制。
缓冲方式时,EN=0,表示允许 8259A通过缓冲存储器输出。 EN=1,表示 CPU写 8259A。
非缓冲方式时,SP表示主从关系,SP=1,表示主片,
SP=0表示从片。
④ 控制逻辑:
控制 CPU发送中断请求信号,处理 CPU的中断应答信号 INT直接接到 CPU的中断请求输入端 INTR.
INT:8259A向 CPU发出的中断请求信号,高电平有效。
INTA:CPU响应中断时,约两个总线周期,称为响应周期。
用来对 8259A的中断申请进行响应,在中断响应周期中产生两个 INTA信号,第一个用来使中断请求服务寄存器相应位置 1,第二个 INTA信号,8259A向
CPU提供中断矢量号。
⑤中断请求触发器( IRR)
8位寄存器,接收 8个中断源的中断申请信号,并且保持在这!若该中断源未被屏蔽,则进入排队电路。
⑥中断优先级排队电路 (PR)
逻辑部件根据 IRR中置 1的各位优先级,选中其中优先级最高的位,并在 INTA脉冲送来时,选通送入中断请求服务寄存器的相应位。
⑦ 中断服务寄存器 (ISR)
记录优选后的中断申请标志(正在执行的中断服务程序其 ISR相应位置 1),后来的中断申请在优先排队电路的控制下与当前正在执行的中断过程进行优先级排队,以决定是否实现中断嵌套。
⑧中断屏蔽寄存器 IMR
由 CPU设置,以决定某个中断源是否被屏蔽,当该寄存器中某一位置,1”时,表示禁止该中断请求进入系统。通过 IMR寄存器可实现对各级中断的有选择的屏蔽。
2,8259A的工作原理
8259A接收外部中断,IRR有 8位,对 IR0~IR7,
IRR接收来自某一引脚的中断请求后,对应位置 1,
锁存请求。逻辑电路根据 IMR中的对应位是否屏蔽决定是否让其进入优先级排队电路。
ISR寄存器存放的是当前进行的中断服务的标志,
如果新来的优先级足够高,则 8259A会通过逻辑电路使输出端 INT向 CPU发中断请求。此时若 IF=1,则
CPU在执行完当前指令后,就可以响应中断。
对 8086CPU而言,响应中断申请后,向 8259A回送两个负脉冲 INTA。
第一个 INTA到达时,8259A做 3件事:
① IRR锁存功能失效,不接受任何申请;
② 使 ISR相应位置位,提供判优依据;
③使 IRR清零。
第二个 INTA到达时,8259A做三件事:
①恢复 IRR功能;
② 将中断类型号送上数据总线的 D7~ D0,传给 CPU;
③如果方式控制字( ICW4),自动中断结束位为 1,
那么在第二个脉冲结束时,8259A会将第一个 INTA
脉冲到来时设置的 ISR清 0。
每一个中断源都有一个中断矢量号(设备号)。
8259A中断类型码的确定
D7 D6 D5 D4 D3 × × ×
D2 D1 D0
与用户选择类型码有关,
选择系统没有占用的。
0 0 0 —IR0
0 0 1 —IR1
0 1 0 —IR2
0 1 1 —IR3
1 0 0 —IR4
1 0 1 —IR5
1 1 0 —IR6
1 1 1 —IR7
3.中断矢量号的设置
8259A具有非常灵活的中断管理方式,可满足使用者的不同要求,而中断优先级是中断管理的核心问题。
中断优先级确定后,一般的处理原则:
高级中断打断低级中断而被优先处理,禁止低级打断高级或同级中断相互打断。
中断类型码肯定是连续的,它们在中断类型表中的位置取决于 D7~D3 位的状态。
例,D7~D3=01000 则中断类型码将 40H~47H
该控制字由指令送到 8259A,当 CPU响应中断时,
由第二个 INTA信号将它取走,送给 CPU,取得中断服务程序入口地址。
4,8259A的优先级管理方式完全嵌套方式自动嵌套方式中断屏蔽方式特殊完全嵌套⑴ 完全嵌套方式系统复位后自动进入的一种默认的基本方式,
8259A的 8个中断源在该方式下自动将 IR0设置为最高级,IR7级别最低。要求在中断服务程序结束之前,执行一段程序,将要结束的中断请求的 ISR相应位清,0”,以便响应下一级的中断请求。 CPU响应中断时,要占用两个总线周期
( 2个 INTA信号)并且进行断点( CS,IP,4字节 ) 和现场( FR,2字节以及其它资源)保护,
占用大量的栈空间。
在中断嵌套的过程中,CPU每响应一次中断进入中断服务程序后,执行一条 STI指令,将 IF置,1”,
否则高级中断将无法进入系统。
任何一级中断处理完毕,CPU应向 8259A回送
EOI结束命令,以便 8259A将 ISR寄存器中的相应位清,0”,标志本级中断结束。
普通结束方式特殊结束方式自动结束方式
① 普通结束方式在服务程序结束之前,执行一段中断结束程序,但是要求当前结束的中断服务应是最高级的,并且清
ISR的相应位。如果在中断服务程序中,曾经修改过中断级别,则决不能采用这种方式。
②特殊结束方式与普通方式类似,只是 CPU执行中断结束程序时,同时将该中断的中断优先级回送给 8259A。
③ 自动结束方式( AEOI)
特点,中断服务程序中不用程序结束,只要执行 IRET
指令即可,CPU响应中断时就将对应的 ISR清
“0”。
缺点:任何一级中断在执行中断服务程序期间,在
8259中没有任何标记,如果出现了新的中断不管级别高低,只要 IF=1,就能响应,出现嵌套混乱!
⑵ 自动循环方式在基本方式中,各优先级是固定的,IR0—IR7,
在特殊方式中,可以用指令去改变它们的优先级顺序。
自动循环方式是改变中断请求优先级的别的策略之一。
普通 EOI循环方式自动 EOI循环方式特殊 EOI循环方式基本思想:任何一级中断处理完,它的优先级别就被改变为最低级,而将最高级赋给原来比他们低一级的中断请求。
① 普通 EOI循环方式当任何一级中断被处理完后,CPU给 8259A回送普通 EOI命令,8259A接收到这一命令后,将 ISR寄存器中优先级最高的位清,0”,并赋给它最低优先级,而将最高级赋给它的下一级。
② 自动 EOI循环方式任何一级中断响应后,在中断响应总线周期中,
由第二个中断响应信号 INTA的后沿自动将 ISR寄存器中相应位清,0”,并立即改变各级中断的优先级别。(重复嵌套!)
③ 特殊 EOI循环方式利用置位优先权指令对任何一个中断源( IRi)设置为最低级别,那么 IRi+1应该是最高级别,其它各级按循环方式类推。
使用置位优先权指令后,正在处理的中断不一定在尚未处理完的中断中具有最高优先级,在该方式下只能是特殊 EOI方式。
⑶中断屏蔽方式
CPU可以利用 CLI指令,将 IF清,0”,禁止一切可屏蔽中断。 8259A可以有选择的屏蔽,可以响应任何级别的中断,也可以屏蔽任何级别的中断。
普通屏蔽方式特殊屏蔽方式
①普通屏蔽方式将 IMR中的 1位或某几位置,1”,就可屏蔽中断请求。
② 特殊屏蔽方式当 CPU正在处理某级中断时,要求对本级中断进行屏蔽,而允许优先级比他高或低的中断进入系统
,可利用控制寄存器的 SMM位置位,使 8259A进入这种特殊的屏蔽方式。
CPU执行主程序时,禁止响应某级或某几级,
IMR中相应位置,1”。
CPU在处理某级中断时,禁止高级别的某级或某几级,IMR中相应位置,1”。
⑷ 特殊完全嵌套方式级联方式下有效。
采用特殊全嵌套方式的中断级联系统中,任何一个从 8259A接收到中断请求经判优后,确定为最高优先级,CPU应该响应这一中断请求,从 8259A的
INT向主 8259A相应 IRi提出请求,如果这时主
8259A的 ISR相应位已经为,1”,说明当前在同一个从 8259A中接收到了比原先优先级更高的中断请求。主 8259A允许他进入,只要它是当前主 8259A
中断请求最高位,就应通过主 8259A的 INT向 CPU发请求,CPU将中断原来的程序去执行它,以保证任一从 8259A控制器实现完全嵌套方式正常操作 。
可编程中断控制器 8259A的初始化操作可明确分成两个部分,首先预置命令字 ICWi对 8259A
初始化,然后 8259A将自动进入操作模式,用 82
59A的操作命令字 OCWi来定义 8259A的操作方式,
而且在 8259A的操作过程中,允许重置操作命令字,
以动态的改变 8259A的操作和控制方式。
每片包含两个内部端口地址,一个偶地址端口
(A0=0),一个奇地址端口 (A0=1),其它高位地址码由用户定义,用来做 8259A的片选信号( CS)
5.8259A芯片的控制字及工作方式
ICW1和 ICW2是必需的
ICW3是级联式才需要设置,ICW4是 8086/8
088系统中必需的。
① ICW1
芯片初始化命令字 标记,A0=0,D4=1
② ICW2
设置中断类型码初始化命令字,紧跟在 ICW1之后,
定义中断类型码的高 5位,低 3位由 IRi确定 。
标记,A0=1
③ ICW3
级联方式初始化字,紧跟在 ICW2之后,标记,A0=1
主 8259A( SP=1)
例,ICW3 =F0H
IR7 ~IR4 联接有从 8259,而 IR3 ~IR0不联接从 8259,
可以接外设中断源。
④ ICW4
对于 8086/8088系统是必须设置的预置命令字。
方式控制初始化命令字,写 ICW4的标记为 A0=1。
所谓缓冲方式,是指在多片 8259A级联的大系统中 8259A通过总线驱动器和数据总线相连的一种方式,
在此方式下,将 8259A
的 SP/EN端和总线驱动器的允许端相连,利用从 SP/EN端输出的低电平,可以作为总线驱动器的启动信号。
当 8259A经预置 ICWi后,已进入初始状态,便可接受来自 IRi端的中断请求,然后自动进入操作命令字状态,准备接受由 CPU写入 8259A的操作命令字
OCWi。
8259A有 3个操作命令字,即 OCW1~OCW3,操作命令字是在应用程序中设置的,对 OCWi的操作,次序上没有严格的要求,但是对端口地址有严格的规定即 OCW1必须写入奇地址端口,OCW2和 OCW3必须写入偶地址端口。
① OCW1中断屏蔽操作命令字,标记,A0=1。
② OCW2 设置优先级循环方式和中断结束方式的操作命令字,标记,A0=0,D3=D4=0。
001-普通 EOI方式
011-特殊 EOI方式( L2~0有效,指定结束的是哪一级中断,
并清 ISR)
101-普通 EOI循环方式
111-特殊 EOI循环方式( L2~0有效,清 L2~0指 定级别 ISR,并赋予其最低优先级)
000-自动 EOI方式(复位)
100-自动 EOI方式(置位)乱套!
110-置位优先权命令,向 8259A发置位优先权命令,最低优先级赋予 L2~0指定的 IRi,其它中断源按循环方式分别赋给
③ OCW3
标记,A0=0,D3D4=01。
读 IMR寄存器不需要设置 RR和 RIS
只需将端口设置成奇地址 A0=1。
用 IN指令,IMR→ AL,与 OCW3
无关,可在程序的任何位置安排 IN
指令实现。
P-查询位,查询当前有无中断以及中断工作在哪一级。
OCW3不是必需的,当要读 IRR,ISR或者查询时,定义 OCW3
,用 IN指令读入,读 IMR不必设 OCW3
在中断服务程序中置 OCW3的 P位为 1
IN AL,81H 可得数据采集系统,共有 4个模拟通道,它们转换完毕后的中断请求信号线,分别接到 8259A的 IR0,IR1、
IR2,IR3输入线,并且按照完全嵌套方式获得优先权,IR0中断类型号是 90H。中断请求采用边沿触发,中断结束采用指定 EOI方式。 8259的两个端口地址分别为 0FFDCH和 0FFDEH。