480 likes | 663 Views
第一节 8086/8088 中断系统. 重点: 8086/8088 中断系统,中断控制器 Intel8259A 的性能概述,内、外部结构,工作过程,工作方式等。 一、中断分类及中断类型码 中断源 :引起中断的原因或发出中断请求的设备称为中断源。 1 、中断的分类 共分为两类:硬件中断和软件中断. ① 硬件中断 :由外部硬件产生的中断,如打印机、键盘等,也称为外部中断。可分为两类:不可屏蔽中断和可屏蔽中断。 不可屏蔽中断:由 NMI 引脚引入,不受中断允许标志的影响,每个系统仅允许有一个,用来处理紧急情况,如掉电处理。这种中断一旦发生,系统会立即响应。
E N D
第一节 8086/8088中断系统 • 重点:8086/8088中断系统,中断控制器Intel8259A的性能概述,内、外部结构,工作过程,工作方式等。 • 一、中断分类及中断类型码 • 中断源:引起中断的原因或发出中断请求的设备称为中断源。 • 1、中断的分类 • 共分为两类:硬件中断和软件中断
①硬件中断:由外部硬件产生的中断,如打印机、键盘等,也称为外部中断。可分为两类:不可屏蔽中断和可屏蔽中断。①硬件中断:由外部硬件产生的中断,如打印机、键盘等,也称为外部中断。可分为两类:不可屏蔽中断和可屏蔽中断。 • 不可屏蔽中断:由NMI引脚引入,不受中断允许标志的影响,每个系统仅允许有一个,用来处理紧急情况,如掉电处理。这种中断一旦发生,系统会立即响应。 • 可屏蔽中断:由INTR引脚引入,受中断允许标志的影响,当IF=1时,可屏蔽中断才能进入CPU,可屏蔽中断可有多个,一般通过优先级排队,从多个中断源中选出一个进行处理。
②软件中断(内部中断):根据某条指令或对标志寄存器中某个标志的设置产生,与硬件电路无关,如除数为0,或用INT n指令产生。 • 溢出中断由INTO指令引起 • 断点中断由INT3指令引起 • 单步由标志TF引起 ,不对应指令 • 除0中断由计算结果引起,不对应指令
2、中断类型码: • 8086/8088为每个中断源分配了一个中断类型码,其取值范围为0~255,可处理256种中断。其中包括软件中断、系统占用的中断和预留给用户使用的中断。
二、中断向量和中断向量表 • 中断向量:中断服务子程序的入口地址。 • 中断向量表:将中断向量按一定规律排列成的表 。
三、中断响应过程与时序 • 1、硬件中断的响应过程 • 硬件中断指的是从NMI进入的非屏蔽中断或从INTR进入的可屏蔽中断。对可屏蔽中断,响应过程为: • CPU在INTR上接到一个中断请求信号,如果IF=1,CPU在当前指令执行完以后开始响应中断请求,在INTA*连续发两个负脉冲,外设在第二个负脉冲到来后,向数据线上送出中断类型码, CPU接到中断类型码后,动作如下:
①将中断类型码存入暂存器; • ②将FLAG内容压入堆栈; • ③将IF清0,防止中断响应过程被中断,将TF清0,防止以单步方式执行中断处理子程序。注意:CPU在中断响应时自动清除IF标志,如允许中断嵌套,必须在中断处理子程序中用指令置位IF; • ④保护断点,将IP和CS的内容入栈; • ⑤根据中断类型码,在中断向量表中找到相应的中断向量,装入IP和CS,转向中断服务子程序。
2、硬件中断的时序 ①指令最后一个T采样INTR,进入中断响应后,在第一个总线周期的T1仍采样INTR。 ②最小模式时,从INTA*发中断响应信号,最大模式,通过S2、S1、S0的组合完成。 ③第一个总线周期用来通知外设,准备响应中断,第二个总线周期,接收外设发来的中断类型码。 ④在中断响应总线周期,M/IO*为低,数据/地址线浮空,BHE*和S7地址/状态线均浮空。
3、软件中断 • 通过中断指令使CPU执行中断处理子程序的方法,特点如下: • ①中断类型码由指令提供,不需执行中断响应总线周期,也不受IF标志的影响。 • ②正在执行软件中断时,若来NMI,立即响应,若来可屏蔽中断,只要条件允许(如IF=1,当前指令执行完)也可响应。 • ③中断处理程序是定位装配的(中断向量表),可用INT n指令调用,在使用中和一般的子程序调用相同,原则上0~255种类型均可使用,程序设计中使用方便。
习题与思考: • 1、在中断响应总线周期中,第一个脉冲向外部电路说明什么?第二个脉冲呢? • 2、中断向量表的功能是什么?已知中断类型码分别是84H和0FAH,它们的中断向量应放在中断向量表的什么位置?
第二节 中断控制器Intel8259A • 重点:8259A的编程、8259A的级联、8259A的应用举例 • Intel 8259A可编程中断控制器件,具有对中断源进行管理、向CPU请求中断的能力。 • 一、 8259A的性能概述 • 1、具有8级中断优先级控制,通过级连可以扩展至64级优先权控制 • 2、每一级中断都可以通过初始化设置为允许或屏蔽状态 • 3、8259A的工作方式,可通过编程设置 • 4、8259A采用NMOS制造工艺,单一+5V电源
INTA 控制逻辑 INT D7~D0 数据 总线 缓冲器 RD 中断服务寄存器 优先权判别电路 中断请求寄存器 IR0 WR 读/写 控制 逻辑 A0 CS IR7 CAS0 级联 缓冲器 比较器 CSA1 CAS2 中断屏蔽寄存器 SP/EN 二、 8259A的内部结构和工作原理
8259A内部结构主要组成部分: • 1、数据总线缓冲器:8位双向三态。传送CPU与8259A之间的控制命令、状态信息及中断类型信息。 • 2、读/写控制逻辑:控制对8259A读/写。 • 3、级连缓冲器:实现8259A芯片间的级连。 • 4、控制逻辑电路:协调和控制芯片内部各部件的工作。 • 5、中断请求寄存器IRR:8位,保存8个中断请求信号,输入引脚有中断请求时,相应位置1。
6、中断屏蔽寄存器IMR:8位,某位置”1”时,相应的中断请求被屏蔽,其内容为操作命令字OCW1,由程序设置或改变。6、中断屏蔽寄存器IMR:8位,某位置”1”时,相应的中断请求被屏蔽,其内容为操作命令字OCW1,由程序设置或改变。 • 7、中断服务寄存器ISR:8位,当CPU正在处理某个中断请求时,ISR寄存器中的相应位置1。 • 8、优先级比较器:比较正在处理的中断和刚进入的中断请求之间的优先级,决定是否产中断嵌套。
三、 8259A的外部引脚 • 1、D7-D0:双向,数据输入/输出。 • 2、IR7-IR0:中断请求信号输入,默认优先级为IR0>IR1>…>IR7,有多片8259A形成级连时,从片的INT接主片的IRi。 • 3、INT:中断请求信号输出,高电平有效,向CPU发中断请求,接CPU的INTR。 • 4、INTA*:中断响应信号输入,低电平有效,CPU发出第二个INTA*时,8259A将中断类型码送出。
5、RD*:读控制信号输入,低电平有效,实现对8259A内部寄存器内容的读操作。5、RD*:读控制信号输入,低电平有效,实现对8259A内部寄存器内容的读操作。 • 6、WR* :写控制信号输入,低电平有效,实现对8259A内部寄存器的写操作。 • 7、CS* :片选信号输入,低电平有效,由系统地址总线译码后形成,决定8259A的端口地址。
8、 A0:8259A内部寄存器的端口地址选择信号输入。 • A0=0ICW1、OCW2、OCW3 • A0=1ICW2~ICW4、OCW1 • 9、 CAS2-CAS0:级连信号,主片为输出;从片为输入,与SP*/EN*信号配合,实现芯片的级连。 • 10、 SP*/EN*:级连管理信号输入,非缓冲方式,主片SP*=1 ,从片SP*=0;缓冲方式用作8259外部数据总线缓冲器的启动信号。 • 11、 +5V、GND:电源和接地引脚
四、 8259A的工作过程 • 1、中断请求输入(IR7-IR0),使中断请求寄存器的IRR的相应位置位。 • 2、若CPU允许中断,当前指令执行完后,响应中断,发应答信号INTA*。 • 3、第一个INTA*使IRR的锁存功能失效,不锁存IR7-IR0上的中断请求。 • 4、使在服务寄存器ISR的相应位置1,为中断优先级比较器的工作做准备。
5、使中断请求寄存器的相应位复位,清除中断请求。5、使中断请求寄存器的相应位复位,清除中断请求。 • 6、第二个INTA*到达时,将中断类型寄存器ICW2中的内容送数据总线。 • 7、若ICW4中的中断自动结束位为1,第二个INTA*结束时,将ISR寄存器的相应位清零。否则,执行完中断服务程序,通过输出操作命令EOI,使该位复位。
五、 8259A的工作方式 • 1、优先权的管理方式 • (1)、全嵌套方式 • 8级中断优先权固定不变,IR0的中断优先级最高,IR7的中断优先级最低。 • CPU响应中断后,使中断服务寄存器ISR相应位置1,能屏蔽同级或低级的中断请求,可为高级中断源服务,实现中断嵌套。
(2)、特殊全嵌套方式 • 可响应同级中断,形成对同级中断的嵌套。 • 用在级连系统中,编程时,使主片工作在特殊全嵌套方式下。同一从片的8个优先级不同的中断源对主片来说级别相同。这时主片能响应本片高级中断,也能响应与正在处理的中断源处于同一从片的高级中断。对主片来讲能响应同级中断。
(3)、优先级自动循环方式 • 多个中断源优先级相同时,设置OCW2为循环优先级方式。默认IR0—IR7。一个中断请求被响应后,其优先级自动降为最低。设IR4请求中断,CPU响应后,优先级顺序自动变为IR5、IR6、IR7、IR0、IR1、IR2、IR3、IR4。 • (4)、优先级特殊循环方式 • 用OCW2设置最低优先级中断源,如设R4最低,则优先级顺序为IR5、IR6、IR7、IR0、IR1、IR2、IR3、IR4。
2、中断源的屏蔽方式 • (1)、普通屏蔽方式: • 中断请求输入受屏蔽寄存器的控制,相应位置“1”,屏蔽该级中断请求。通过设置IMR(操作命令字OCW1)屏蔽或开放中断。 • (2)、特殊屏蔽方式: • 设置OCW1使屏蔽寄存器中的某一位置1,屏蔽本级中断,同时使中断服务寄存器ISR中的相应位复位,屏蔽本级中断,开放低级中断。
3、结束中断处理的方式 • (1)、中断自动结束方式 • 用于单片8259A场合。这种方式下,系统响应中断,CPU发第二个INTA*脉冲时,清除中断服务寄存器ISR中相应位。虽然系统正在进行中断处理,但对8259A来讲就象中断处理已经结束。这样,可响应任何级别的中断请求。
(2)、一般的中断结束方式(EOI) • 用于全嵌套情况下,在程序中向8259A偶端口地址输出一个操作命令,使OCW2 中的R,SL,EOI=0,0,1;ISR中优先级最高的位复位,接束中断。 • (3)、特殊的中断结束方式 • 特殊全嵌套模式下,在程序中向8259A偶端口地址输出一个操作命令,使OCW2 中的R,SL,EOI=0,1,1,用L3L2L1指出ISR中要复位的位;ISRL3L2L1复位,接束当前中断。
4、系统总线的连接方式 • (1)、缓冲方式 • 多片8259A级连系统中,8259A通过总线驱动器接系统数据总线,SP*/EN*端接总线驱动器允许端。输出状态字或中断类型码的同时使SP*/EN*=0实现对总线的驱动。 • (2)、非缓冲方式 • 单片或多片8259A级联时,D7-D0直接接系统数据总线。这时SP*/EN*为输入,单片时, SP*/EN*=1;多片时,主片SP*/EN*=1 ,从片SP*/EN*=0
5、引入中断请求的方式 • (1)、边沿触发方式 • 通过初始化命令字ICW1设置,在输入端出现的上升沿作为中断请求信号。 • (2)、电平触发方式 • 通过初始化命令字ICW1设置, 中断请求输入端出现的高电平作为中断请求信号,这种方式下,中断响应后必须马上撤除,以免引起第二次中断。
(3)、中断查询方式 • (a)查询工作过程 • 系统先关中断,用OUT指令将操作命令字OCW3中的P位置1,发送到8259A的偶地址端口,如果有中断请求,ISRi=1。接着用IN指令从偶地址端口读取8259A的查询字。CPU从ISR中读取优先级,判断执行哪个服务程序。 • (b)查询字格式 • D7 。 。 。 D3 D2 D1 D0 • I X X X X W2 W1 W0 • 注:I=1有中断请求;W2W1W0为最高优先级中断号。
(c)读8259A的状态 • 当OCW3中P=0时,通过RR、RIS的状态构成对IRR、ISR的读出命令。 RR、RIS=10时,读IRR的状态。 RR、RIS=11时,读ISR的状态。 • IMR的状态可用IN指令从奇地址读取。
七、 8259A的编程 • 1、8259A的端口地址 • 由8259A的结构可知:寻址8259A内部寄存器组的信号包括:CS*、A0、RD*、WR*;CS*是片选信号,低电平时,芯片工作。 • A0:寻址8259A芯片中不同的寄存器组,8259A芯片占用系统的两个端口地址,偶地址和奇地址,规定偶地址小于奇地址。 • 8259A内部寄存器的区别,采用特征位和操作顺序方法。
2、8259A的初始化编程 • 初始化编程 8259A开始工作前,必须写入初始化命令字ICW • 操作命令字 工作期间要改变8259A的中断控制方式,可写入操作命令字OCW
1、初始化命令字ICW • 初始化命令字ICW,有4个 • 在8259A开始工作前写入 • 必须按照ICW1~ICW4顺序写入 • ICW1和ICW2必须写 • ICW3和ICW4由工作方式决定
ICW1:写入偶地址端口 • D0(IC4): D0=1设置ICW4,D0=0不设置ICW4 。 • D1(SNGL): =1单片; =0多片级连。 • D2(ADI):8088/8086系统不用。 • D3(LTIM):=1电平触发;=0上升沿触发。 • D4=1是ICW1的特征位。 • D5-D7:8088/8086系统不用。
ICW2:写入奇地址端口D7—D3:中断类型码的高5位,D2—D0由IRi决定(000—IR0 - - -111—IR7) 。 例:若ICW2=45H,则8级中断源的中断类型码:IR0为40H,…,IR7为47H
ICW3:级连命令字 • 主8259A:Si=1对应IRi接有从片 • 从8259A:ID2~ID0为该片的识别码例:主ICW3=11100010,说明IR7、IR6、IR5、IR1上接有从片;若从片的INT接在主片的IR1引脚上,其ICW3=00000001
ICW4:D7~D5=000是ICW4的特征 • SFNM——嵌套方式: (=1)特殊全嵌套方式, (=0)全嵌套方式 • BUF——数据线的连接方式:缓冲方式(=1);非缓冲方式(=0) • M/S——主片/从片选择:主片(M/S=1);从片(M/S=0) • AEOI—中断结束方式:自动中断结束(=1);非自动中断结束(=0) • μPM —16位8086(PM=1) D7 D6 D5 D4 D3 D2 D1 D0 0 0 0 SFNM BUF M/S AEOI μPM
例:单片8259A,8088模式,采用缓冲方式连接,优先级设置为全嵌套中断方式,端口地址为20H,21H。中断类型码:08H例:单片8259A,8088模式,采用缓冲方式连接,优先级设置为全嵌套中断方式,端口地址为20H,21H。中断类型码:08H • MOV AL,13H ;边沿触发,单片,需ICW4 • OUT 20H ,AL • MOV AL,08H;中断向量为00001*** • OUT 21H,AL • MOV AL,09H;8088模式,缓冲,全嵌套 • OUT 21H,AL
2、 操作命令字OCW • 8259A工作期间,可随时接受操作命令字OCW:OCW1~OCW3 • OCW1:写入奇地址端口,是中断屏蔽命令字,通过编程对中断源进行屏蔽或开放 • Di=1禁止IRi中断;0允许IRi中断。 • D7 D6 D5 D4 D3 D2 D1 D0 • M7 M6 M5 M4 M3 M2 M1 M0
OCW2:写入偶地址端口,D4D3=00是特征位,用于设置中断优先级循环方式和中断结束方式。OCW2:写入偶地址端口,D4D3=00是特征位,用于设置中断优先级循环方式和中断结束方式。 • R(=1)优先级采用循环方式;(=0)为非循环方式 • SL(=1)用L2、L1、L0指明中断源; • EOI指示OCW2是否作为中断结束命令。
R、SL、EOI • 0、0、0:清除自动EOI循环优先级命令; • 1、0、0:设置自动EOI循环命令; • 0、0、1:普通的EOI命令。完全嵌套方式下,中断服务程序结束时,用命令设置EOI=1结束中断程序返回断点; • 0、1、1:特殊EOI,非完全嵌套方式下,用L2、L1、L0指出ISR寄存器中需要被清除的位; • 1、0、1:自动循环的EOI,使当前中断处理程序的ISR清零,优先级次序左移一位; • 1、1、1:设置特殊循环方式,清除当前中断的对应位ISR;用L2、L1、L0指出哪一个中断源的中断优先级降为最低; • 1、1、0:设置优先级,用L2、L1、L0指出中断优先级最低的中断源。
(3)、OCW3:写入偶地址端口 • D4D3=01是特征位 D7 D6 D5 D4 D3 D2 D1 D0 0 ESMM SMM 0 1 P RR RIS • D6D5=(11)置特殊屏蔽模式;(=01)撤消特殊屏蔽模式;D6=0,D5无意义。 • D2:查询方式位(P),=1,设置为查询方式。 • P=0与D1(RR)、D0(RIS)组合构成对内部寄存器的读出命令 • D2D1D0=010,读中断请求寄存器(IRR)。 • D2D1D0=011,读取中断服务寄存器(ISR)。
主片的3条级联线与各从片的同名级联线引脚对接,主片为输出,从片为输入。主片向从片发优先级别最高的中断请求的从片代码,从片用该代码与本片的代码进行比较,符合则将本片ICW2中设定中断类型码,送数据总线。主片的3条级联线与各从片的同名级联线引脚对接,主片为输出,从片为输入。主片向从片发优先级别最高的中断请求的从片代码,从片用该代码与本片的代码进行比较,符合则将本片ICW2中设定中断类型码,送数据总线。 • sp*/en*主片的接+5v,从片的接地。 • 级连系统中的所有8259A都必须进行各自独立的编程,作为主片的8259A必须设置为特殊的全嵌套方式,以避免同一从片中,优先级较高的中断请求被屏蔽。
九、 8259A的应用举例 • 例1、IBMPC机中,单片8259A。在I/O地址中,分配给8259A的端口地址为20H和21H,要求初始化为:边沿触发、缓冲连接、中断结束采用EOI命令、中断优先级采用完全嵌套方式,8级中断源的中断类型分别为08H—0FH
初始化程序为: • MOV DX,20H • MOV AL,00010011B • OUT DX,AL ;写入ICW1 • MOV DX,21H • MOV AL,08H • OUT DX,AL ;写入ICW2 • MOV AL,00001101B • OUT DX,AL ;写入ICW4 • XOR AL,AL • OUT DX,AL ;写入OCW1 • 。。。。。。 • STI • 。。。。。。
例3、读8259A相关寄存器的内容。 • 设8259A的端口地址为20H、21H,读IRR、ISR、IMR寄存器的内容,并相继保存在数据段2000H开始的内存单元中;若该8259A为主片,请用查询方式,查询哪个从片有中断请求。 • 解:MOV AL,xxx01010B ;设置OCW3,读取IRR的内容 • OUT 20H,AL • IN AL,20H ;读入并保存IRR的内容 • MOV (2000H),AL
MOV AL,xxx01011B ;置OCW3读取ISR的内容 • OUT 20H,AL • IN AL,20H ;读入并保存ISR的内容 • MOV (2001H),AL • IN AL,21H 读入并保存IMR的内容 • MOV (2002H),AL • MOV AL,xxx0110xB ;置OCW3,查询是否有中断请求 • OUT 20H,AL • IN AL,20H 读相应状态,判断最高位是否为1 • TEST AL,80H • JZ DONE • AND AL,07H 判断中断源的编码 • ………… • DONE:HLT
习题: • 1、8259A芯片是如何实现对8级中断进行管理的?又是如何级联实现对64级中断管理的? • 2、不需要ICW4,单片以及边缘触发, 8259AICW1的值为多少? 要求产生的中断类型码在70H~77H之间,ICW2的值是多少? • 3、某系统有五个中断源,分别从8259A的IR0~IR4以边沿触发方式引入,中断类型码分别为48H~4CH,允许以全嵌套方式工作,编写相应的初始化程序。