1、第 6 章,第6章 中断控制接口,教学重点8086 CPU的中断系统8259A的中断工作过程和工作方式8259A的优先权管理方式中断服务程序的编写,6.2 8086中断系统,8086的中断系统采用向量中断机制 能够处理256个中断 用中断向量号0255区别 可屏蔽中断还需要借助专用中断控制器Intel 8259A实现优先权管理,6.2.1 8086的中断类型,内部中断 除法错中断 指令中断 溢出中断 单步中断 外部中断 非屏蔽中断 可屏蔽中断,1. 内部中断,内部中断是由于8086内部执行程序出现异常引起的程序中断 利用内部中断,微处理器为用户提供了发现、调试并解决程序执行时异常情况的有效途径
2、 例如,ROM-BIOS和DOS系统利用内部中断为程序员提供了各种功能调用,内部中断的中断向量号已定, 除法错中断,在执行除法指令时,若除数为0或商超过了寄存器所能表达的范围,则产生一个向量号为0的内部中断,称为除法错中断 例如:,mov bl,0 idiv bl ;除数BL0,产生除法错中断,mov ax,200h mov bl,1 div bl ;商200H,不能用AL表达;产生除法错中断, 指令中断,在执行中断调用指令INT n时产生的一个向量号为n(0 255)的内部中断,称为指令中断(11001101-n-) 其中向量号为3的指令中断比较特别(生成一个字节的指令代码:11001100
3、),常用于程序调试,被称为断点中断,例如:DEBUG.EXE调试程序的运行命令G设置的断点,就是利用INT 3指令实现的, 溢出中断,在执行溢出中断指令INTO时,若溢出标志OF为1,则产生一个向量号为4的内部中断,被称为溢出中断 例如:,mov ax,2000h add ax, 7000h;2000H7000H9000H,溢出:OF1 into ;因为OF1,所以产生溢出中断,单步中断,若单步中断TF为1,则在每条指令执行结束后产生一个向量号为1的内部中断,称为单步中断,例如:DEBUG.EXE调试程序的单步命令T就利用单步中断实现对程序的单步调试,2. 外部中断,外部中断是由于8086外部
4、提出中断请求引起的程序中断 利用外部中断,微机系统可以实时响应外部设备的数据传送请求,能够及时处理外部意外或紧急事件 外部中断的原因是处理器外部随机产生的,所以是真正的中断(Interrupt) 内部中断的原因是处理器执行程序出现异常,所以经常被称为异常(Exception), 非屏蔽中断,通过非屏蔽中断请求信号向微处理器提出的中断请求,微处理器无法禁止,将在当前指令执行结束予以响应,这个中断被称为非屏蔽中断 8086的非屏蔽中断的向量号为2,非屏蔽中断请求信号为NMI 非屏蔽中断主要用于处理系统的意外或故障。例如: 电源调电前的数据保护 存储器读写错误的处理, 可屏蔽中断,外部通过可屏蔽中断
5、请求信号向微处理器提出的中断,微处理器在允许可屏蔽中断的条件下,在当前指令执行结束予以响应,同时输出可屏蔽中断响应信号,这个中断就是可屏蔽中断 8086的可屏蔽中断请求和响应信号分别是INTR和INTA*;由IF标志控制可屏蔽中断是否允许响应;向量号来自外部中断控制器 8086通常需要配合中断控制器8259A共同处理可屏蔽中断 可屏蔽中断主要用于主机与外设交换数据,IF控制可屏蔽中断的响应,中断标志IF的状态,IF0:可屏蔽中断不会被响应 关中断、禁止中断、中断屏蔽 系统复位,使IF0 任何一个中断被响应,使IF0 执行指令CLI,使IF0 IF1:可屏蔽中断会被响应 开中断、允许中断、中断开
6、放 执行指令STI,使IF1 执行指令IRET恢复原IF状态,明确IF标志的状态是关键,8086的中断响应过程,查询中断的顺序, 决定了各种中断源的优先权 软件中断 除法错中断 指令中断 溢出中断 非屏蔽中断 可屏蔽中断 单步中断,8086的中断响应过程(续),8086各种中断源的优先权, 实际上是指被识别出来的先后 多种中断同时请求时, 最先响应的则可能是 单步中断或NMI中断,6.2.3 8086的中断向量表,中断向量:中断服务程序的入口地址(首地址) 逻辑地址含有段地址CS和偏移地址IP(32位) 每个中断向量的低字是偏移地址、高字是段地址,需占用4个字节 8086微处理器从物理地址00
7、0H开始,依次安排各个中断向量,向量号也从0开始 256个中断占用1KB区域,就形成中断向量表,向量号为N的中断向量的 物理地址N4,中断向量的获取与设置,获取中断向量(DOS功能调用INT 21H) 功能号:AH35H 入口参数:AL中断向量号 出口参数:ES:BX中断向量(段地址:偏移地址),设置中断向量(DOS功能调用INT 21H) 功能号:AH25H 入口参数:AL中断向量号 DS:DX中断向量(段地址:偏移地址),6.3 8259A中断控制器,Intel 8259A是可编程中断控制器PIC 可用于管理Intel 8080/8085、8086/8088、80286/80386的可屏蔽
8、中断 8259A的基本功能 一片8259A可以管理8级中断,可扩展至64级 每一级中断都可单独被屏蔽或允许 在中断响应周期,可提供相应的中断向量号 8259A设计有多种工作方式,可通过编程选择,6.3.1 8259A的内部结构和引脚,1. 中断控制,中断请求寄存器IRR 保存8条外界中断请求信号IR0IR7的请求状态 Di位为1表示IRi引脚有中断请求;为0表示无请求 中断服务寄存器ISR 保存正在被8259A服务着的中断请求(可以多位有效) Di位为1表示IRi中断正在服务中;为0表示没有被服务 中断屏蔽寄存器IMR 保存对中断请求信号IR的屏蔽状态 Di位为1表示IRi中断被屏蔽(禁止);
9、为0表示允许,2. 与处理器接口,3. 中断级连,一个系统中,8259A可以级连,有一个主8259A,若干个(最多8个)从8259A 级连时,主8259A的三条级连线CAS0CAS2作为输出线,连至每个从8259A的CAS0CAS2 每个从8259A的中断请求信号INT,连至主8259A的一个中断请求输入端IR 主8259A的INT线连至CPU的中断请求输入端 SP*/EN*在非缓冲方式下,规定该8259A是主片(SP*1)还是从片(SP*0),动画,示例,6.3.2 8259A的中断过程,动画,6.3.3 8259A的工作方式,1. 设置优先权方式,普通全嵌套方式 8259A的中断优先权顺序
10、固定不变,从高到低依次为IR0、IR1、IR2、IR7 中断请求后,8259A对当前请求中断中优先权最高的中断IRi予以响应,将其向量号送上数据总线,对应ISR的Di位置位,至到中断结束(ISR的Di位复位) 在ISR的Di位置位期间,禁止再发生同级和低级优先权的中断,但允许高级优先权中断的嵌套 特殊全嵌套方式 优先权自动循环方式 优先权特殊循环方式,2. 结束中断处理方式,什么是8259A的中断结束?,8259A利用中断服务寄存器ISR判断: 某位为1,表示正在进行中断服务; 该位为0,就是该中断结束服务。 这里说明如何使ISR某位为0, 不反映CPU的工作状态。,2. 结束中断处理方式,自
11、动中断结束方式 普通中断结束方式 配合全嵌套优先权方式使用 当CPU用输出指令往8259A发出普通中断结束EOI命令时,8259A就会把所有正在服务的中断中优先权最高的ISR位复位 特殊中断结束方式 配合循环优先权方式使用 CPU在程序中向8259A发送一条特殊中断结束命令,这个命令中指出了要清除哪个ISR位,3. 屏蔽中断源方式,普通屏蔽方式 将IMR的Di位置1,则对应的中断IRi被屏蔽,该中断请求不能从8259A送到CPU 如果IMR的Di位置0,则允许IRi中断产生 特殊屏蔽方式 将IMR的Di位置1,对应的中断IRi被屏蔽的同时,使ISR的Di位置0,4. 中断触发方式,边沿触发方式
12、 8259A将中断请求输入端出现的上升沿作为中断请求信号 电平触发方式 中断请求端出现的高电平是有效的中断请求信号,5. 数据线连接方式,缓冲方式 8259A的数据线需加缓冲器予以驱动 8259A把SP*/EN*引脚作为输出端,输出允许信号,用以锁存或开启缓冲器 非缓冲方式 SP*/EN*引脚为输入端 若8259A级连,由其确定是主片或从片,6.3.3 8259A的工作方式,8269A中断优先权管理方式 中断嵌套:普通全嵌套,特殊嵌套 优先权循环:自动循环,特殊循环 中断屏蔽:普通屏蔽,特殊屏蔽,6.3.4 8259A的编程,初始化编程 8259A开始工作前,必须进行初始化编程 给8259A写
13、入初始化命令字ICW 中断操作编程 在8259A工作期间 可以写入操作命令字OCW将选定的操作传送给8259A,使之按新的要求工作 还可以读取8259A的信息,以便了解他的工作状态,1. 初始化命令字ICW,初始化命令字ICW最多有4个 8259A在开始工作前必须写入 必须按照ICW1ICW4顺序写入 ICW1和ICW2是必须送的 ICW3和ICW4由工作方式决定,流程,ICW1,表示可以任意 为1为0都可以(建议为0),1只能为1,作为标志,中断触发方式: LTIM1,电平触发方式 LTIM0,边沿触发方式,规定单片或级连方式: SNGL1,单片方式 SNGL0,级连方式,是否写入ICW4
14、IC41,要写入ICW4 IC40,不写入ICW4,即ICW4规定的位全为0,ICW2,设置中断向量号 T7T3为中断向量号的高5位 低3位由8259A自动确定: IR0为000、IR1为001、IR7为111,ICW3,级连命令字 主片8259A:Si1对应IRi接有从片;否则IRi没有连接从片 从片8259A:ID0ID2编码说明从片INT引脚接到主片哪个IR引脚,ICW4,嵌套方式: 特殊全嵌套方式(SFNM1) 普通全嵌套方式(SFNM0),数据线的缓冲方式: 缓冲方式(BUF1) 非缓冲方式(BUF0),主片/从片选择: 主片(M/S=1) 从片(M/S=0),中断结束方式: 自动中
15、断结束(AEOI1) 非自动中断结束(AEOI0),微处理器类型: 16位80x86(PM1) 8位8080/8085(PM0),2. 操作命令字OCW,8259A工作期间,可以随时接受操作命令字OCW OCW共有3个:OCW1OCW3 写入时没有顺序要求,需要哪个OCW就写入那个OCW,OCW1,屏蔽命令字 内容写入中断屏蔽寄存器IMR DiMi对应IRi,为1禁止IRi中断; 为0允许IRi中断。各位互相独立。,OCW2,R、SL和EOI配合使用 产生中断结束EOI命令和改变优先权顺序,L2L0的3位编码 指定IR引脚,OCW3,ESMM、SMM 设置中断屏蔽方式,P、RR和RIS 规定随
16、后读取的状态字含义,3. 读取状态字,CPU可读出IRR、ISR、IMR和查询字 A0为低,由OCW3中RR和RIS位设定读取IRR或ISR,由OCW3中P位设定读取查询字 而A0引脚为高电平时读取的都是IMR 查询字反映8259A是否有中断请求,查询字,中断位I位为1, 有外设请求中断,W2W0的编码 当前中断请求的最高优先级,4. 命令字和状态字的区别方法, 利用读写信号区别写入的控制寄存器和读出的状态寄存器 利用地址信号区别不同I/O地址的寄存器 由控制字中的标志位说明是哪个寄存器 由芯片内顺序控制逻辑按一定顺序识别不同的寄存器 由前面的控制字决定后续操作的寄存器,接口电路中常用的方法,
17、5. 8259A编程结构,初始化主片8259A,mov al,11h ;写入ICW1,边沿,级联out 20h,al ;对ICW4编程jmp intr1intr1: mov al,08h ;写入ICW2out 21h,al ;中断类型号从08h开始jmp intr2intr2: mov al,04h ;写入ICW3out 21h,al ;IR2上接有从片jmp intr3intr3: mov al,01h ;写入ICW4out 21h,al ;一般嵌套,非缓冲,非自动中断结束方式,中断控制器的初始化程序段,初始化从片8259A,mov al,11h ;写入ICW1,边沿,级联out 0a0h,
18、al ;对ICW4编程jmp intr5 intr5: mov al,70h ;写入ICW2out 0a1h,al ;中断类型号从70h开始jmp intr6 intr6: mov al,02h ;写入ICW3out 0a1h,al ;接主片IR2引脚jmp intr7 intr7: mov al, 01h ;写入ICW4out 0a1h,al ;一般嵌套,非缓冲,非自动中断结束方式,中断控制器的初始化程序段,6.3.5 8259A的应用 (IBMPC/AT),8259A的应用 (IBMPC/AT 续),对比在IBM PC/XT机的应用,应用注意事项,利用上升沿做为中断请求IRQ的有效信号 I
19、RQ0IRQ7的中断向量号依次为08H0FH,IRQ8IRQ15依次为70H77H 采用普通全嵌套优先权方式,中断优先权从高到低顺序为IRQ0IRQ2、IRQ8IRQ15、IRQ3IRQ7,且不能改变 采用普通中断结束EOI方式,需要在中断服务程序最后发送普通EOI命令 一般采用普通屏蔽方式,通过写入IMR允许中断,但注意不要破坏原屏蔽状态,6.3.6 中断服务程序,编写外部可屏蔽中断服务程序,需注意: 发送中断结束命令 一般只能采用存储单元传递参数 不要使用DOS系统功能调用 中断服务程序尽量短小,中断服务程序(续),编写主程序,需注意: 修改中断向量 控制CPU的中断允许标志 设置8259
20、A的中断屏蔽寄存器,例: 可屏蔽中断服务程序,8259A的IRQ0(向量号为08H)中断请求来自定时器8253,每隔55ms产生一次 本程序的08H号中断服务程序,每次中断显示一串信息,显示10次 用内存单元(共享变量)在主程序与外部中断服务程序之间传递参数:中断次数 显示信息也安排在共同的数据段中,依次恢复退出,中断服务程序流程,数据段,intmsg db A 8259A Interrupt !db 0dh,0ah,0 counter db 0 ;次数控制参数,保存中断向量,cli ;关中断mov ax,3508hint 21hpush es ;保存偏移地址push bx ;保存段基地址,设
21、置中断向量,push ds ;保存数据段mov dx,offset new08hmov ax,seg new08hmov ds,axmov ax,2508h ;设置中断int 21h ;向量pop ds,设置中断寄存器,in al,21h ;读屏蔽寄存器 push axand al,0feh ;允许IRQ0out 21h,almov counter,0 ;设置中断次数初值sti ;开中断,循环等待中断,start1: cmp counter,10jb start1 ;中断10次退出,中断就在主程序循环当中,new08h procpush ax ;保护寄存器push bxpush dssti ;
22、开中断mov ax,datamov ds,ax ;设置数据段DS,进入中断服务程序,中断处理,inc countermov si,offset intmsg ;显示信息call dpstri,显示字符串,dpstri proc ;显示字符串子程序push axpush bxdps1: lodsbcmp al,0jz dps2,显示字符串(续),mov bx,0 ;写字符mov ah,0eh ;并且光标int 10h ;前进一格jmp dps1dps2: pop bxpop axretdpstri endp,退出中断服务程序,mov al,20h ;普通EOI指令out 20h,alpop ds
23、 ;恢复寄存器pop bxpop axiret ;中断返回new08h endp,主程序结束,clipop axout 21h,al ;恢复中断屏蔽pop dxpop dsmov ax,2508h ;恢复中断向量int 21hstimov ax,4c00hint 21h,A 8259A Interrupt ! A 8259A Interrupt ! A 8259A Interrupt ! A 8259A Interrupt ! A 8259A Interrupt ! A 8259A Interrupt ! A 8259A Interrupt ! A 8259A Interrupt ! A 82
24、59A Interrupt ! A 8259A Interrupt !,第6章教学要求,1. 熟悉8086的中断类型、中断响应过程、中断向量表 2. 理解8259A的内部结构、寄存器作用、中断过程 3. 掌握8259A的普通全嵌套优先权、普通中断结束、边沿触发方式,第6章教学要求(续),4. 了解的8259A的ICW和OCW,注意命令字和状态字的区别方法 5. 了解8259A在IBM PC系列机上的应用情况 6. 掌握中断服务程序的编写 习题6(第 155 页)6.5 6.7 6.11 6.13 6.14,返回,8088的中断向量表,返回,8259级联工作示意图,返回,8259工作示意图,返回,8259A芯片的初始化流程,返回,8087中断请求 RAM奇偶错 I/O通道检查错,NMI屏蔽寄存器屏蔽位,8253定时器 键盘 未用 异步通信卡(辅) 异步通信卡(主) 硬盘 软盘 并行打印机,NMI,INTR,0 1 2 3 4 5 6 7,优 先 级,8088 CPU,8259A,I/O 通 道,返回,