微机原理及应用 主讲:郑海春
第7章 中断系统 7.1 中断系统基本概念 7.2 中断的处理过程 7.3 IBM-PC机中断系统结构 第7章 中断系统 7.1 中断系统基本概念 7.2 中断的处理过程 7.3 IBM-PC机中断系统结构 7.4 Intel 8259A可编程中断控制器 7.5 8259A编程举例
7.1 中断系统基本概念 7.1.1 什么是中断 7.1.2 为什么要用中断 7.1.3 中断系统的功能 7.1.4 中断类型号和中断向量表 7.1 中断系统基本概念 7.1.1 什么是中断 7.1.2 为什么要用中断 7.1.3 中断系统的功能 7.1.4 中断类型号和中断向量表 返回本章首页
7.1.1 什么是中断 计算机在正常执行程序的过程中,当出现某些异常事件或某种外部请求时,处理器就暂停执行当前程序,而转去执行对异常事件或某种外部请求的处理操作。当处理完毕后,CPU再返回到被暂停的程序继续执行,这个过程称为程序中断。 中断是微处理器与外部设备交换信息的一种方式。
中断引起程序转移示意图 返回本节
7.1.2 为什么要用中断 (1)同步操作: 快速CPU与慢速外设的同步(并行)工作。 (2)故障处理: 7.1.2 为什么要用中断 (1)同步操作: 快速CPU与慢速外设的同步(并行)工作。 (2)故障处理: 同机器硬件错误有关的应急事件的处理。 (3)实时处理: 在工业控制中使用的实时微机控制系统。 返回本节
7.1.3 中断系统的功能 1.实现中断及返回 当某一中断源发出中断申请时,若允许响应这个中断请求,CPU必须在现行的指令执行完后,把断点处的IP和CS值(即下一条应执行的指令的地址)、各个寄存器的内容和标志位的状态推入堆栈保留下来——称为保护断点和现场。然后转到需要处理的中断源的服务程序的入口,同时清除中断请求触发器。当中断处理完后,再恢复被保留下来的各个寄存器和标志位的状态(称为恢复现场),恢复IP和CS值(称为恢复断点),CPU返回断点,继续执行主程序。
2.实现优先权排队 在系统中通常有多个中断源,会出现两个或更多个中断源同时提出中断请求的情况,这样就必须要设计者事先根据轻重缓急,给每个中断源确定一个中断级别——优先权。当多个中断源同时发出中断申请时,CPU能找到优先权级别最高的中断源,响应它的中断请求;在优先权级别最高的中断源处理完了以后,再响应级别较低的中断源。
3.高级中断源能中断低级的中断处理 当CPU正在处理中断时,能响应更高级别的中断请求,而屏蔽掉同级或较低级别的中断请求。 (单级中断处理和多级中断处理:单级中断处理不允许其他设备再中断CPU的程序;多级中断处理允许优先级高的中断打断优先级低的中断服务程序。)
优先权关系:A>B>C (a)单级中断处理(b)多级中断处理 同时多个中断请求的处理方法示意图 返回本节
7.1.4 中断类型号和中断向量表 8086有一个简单而又多功能的中断系统。任何一种中断,CPU响应以后,都是要保护断点、和保护现场,然后转入各自的中断服务程序。在8086中各种中断如何转入各自的中断服务程序呢? 8086在内存的前1KB(地址00000H~003FFH)建立了一个中断向量表,可以容纳256个中断向量,每个中断向量占用4个字节。在这4个字节中,包含着这个中断向量的服务程序的入口地址——前两个字节为服务程序的IP,后两个字节为服务程序的CS。
中断向量表
中断向量:指示中断服务程序的入口地址,包括:偏移地址IP 、段地址CS。 每个中断向量的低字是偏移地址、高字是段地址,需占用4个字节(低对低,高对高)。 8086 微处理器从物理地址00000H开始到003FFH(1KB),依次安排各个中断向量,向量号从0到255。 中断向量表: 256个中断向量所占用的1KB区域。 中断向量的存放首址=N×4 返回本节
7.2 中断的处理过程 7.2.1 概述 7.2.2 CPU响应中断的条件 7.2.3 CPU对中断的响应 返回本章首页
处理一个中断的过程,就是妥善处理以下一些基本问题的过程: 7.2.1 概述 处理一个中断的过程,就是妥善处理以下一些基本问题的过程: 1)何时检查中断输入信号。(CPU在每一个指令周期的最后一个T状态采样INTR线,以决定是否进入中断响应周期) 2)如何把控制转给中断服务程序。(中断向量表) 3)如何保护和恢复中断的现场。(堆栈) 4)如何识别优先级较高的中断。(优先权排队) 5)如何开放和关闭中断。(STI 、CLI) 返回本节
7.2.2 CPU响应中断的条件 1. 设置中断请求触发器(也即要有中断请求) 设置中断请求的情况
2. 设置中断屏蔽触发器 只有接口电路中的中断屏蔽触发器为“1”时,外设的中断请求才能被送出至CPU,从而增加了控制的灵活性。可把8个外设的中断屏蔽触发器组成一个端口,用输出指令来控制它们的状态。 具有中断屏蔽的接口电路
3. 中断是开放的 在CPU内部有一个中断允许触发器(也即IF)。只有当其为“1”时,CPU才能响应中断;若其为“0”,即使INTR线上有中断请求,CPU也不响应。而这个触发器的状态可由STI和CLI指令来改变。当CPU复位时,中断允许触发器为“0”,即关中断,所以必须要用STI指令来开中断。当中断响应后,CPU就自动关中断,所以必须在中断服务程序中用STI指令来开中断。
4. 现行指令执行结束 CPU在现行指令结束后响应中断,即运行到指令周期的最后一个T状态时,CPU才采样INTR线。若发现有中断请求,则进入中断响应周期。
2)设置中断屏蔽触发器,当此触发器为“1”时,允许外设的中断请求才能被送出至CPU。 1)设置中断请求触发器,发出中断请求信号 2)设置中断屏蔽触发器,当此触发器为“1”时,允许外设的中断请求才能被送出至CPU。 3)CPU处于开中断状态。 4)CPU在一条现行指令结束之后响应中断。 返回本节
7.2.3 CPU对中断的响应 关中断 8086在CPU响应中断后,发出中断响应信号 INTA的同时,内部自动地实现关中断(IF=0)。
2. 保留断点 CPU响应中断,并且把下一条将要执行指令的地 址,也即IP和CS推入堆栈保留,以备中断处理 完毕以后,能返回主程序。
3. 保护现场 为了使中断处理程序不影响主程序的运行,故要 把断点处的有关的各个寄存器的内容和标志位的 状态,推入堆栈保护起来。8086系统是由软件 (即在中断服务程序中)把要用到的寄存器的内 容用PUSH指令推入堆栈。
4. 给出中断入口,转入相应的中断服务程序 8086是由中断源提供的中断矢量形成中断入口地 址(即中断服务程序的起始地址)。
5. 恢复现场 把所保存的各个内部寄存器的内容和标志位的状 态从堆栈弹出,送回CPU中的原来位置。这个操 作在8086中也是由中断服务程序中的POP指令来 完成的。
6. 开中断与返回 在中断服务程序的最后,要开中断(以便CPU能响应新的中断请求)和安排一条返回指令(IRET),将堆栈内保存的IP和CS值弹出,运行就恢复到主程序。
中断服务程序框图与程序示例 返回本节 中断服务程序入口 CPU 响应中断后 自动关中 断 保护现场 开中断 中断服务 关中断 恢复现场 中断返回 入口地址: PUSH AX ;保护现场 PUSH BX PUSH CX PUSH DX PUSH SI PUSH DI PUSH SP PUSH BP STI ;开中断 ∶ ;中断服务 CLI ;关中断 POP BP ;恢复现场 POP SP POP DI POP SI POP DX POP CX POP BX POP AX IRET ;中断返回 结尾部分 主体部分 起始部分 返回本节
7.3 IBM-PC机中断系统结构 7.3.1 8086/8088CPU的中断结构体系 7.3.2 8086/8088中断优先级 7.3.2 8086/8088中断优先级 7.3.3 IBM-PC/XT的中断控制逻辑 返回本章首页
7.3.1 8086/8088CPU的中断结构体系
1.软件中断(内部中断) 软件中断的特点是: 1)是指令中指定的,或隐含的,或是预定的。 2)CPU不执行中断响应总线周期INTA。 3)除单步中断外,其他内部中断的优先级都比外部中断的要高,都不能被屏蔽(禁止)。 4)单步中断的优先级是所有中断里最低的,它可以用中断允许标志位TF置0来屏蔽。
2.硬件中断(外部中断) (1)非屏蔽中断NMI:不受中断允许标志IF的影响,它总是被CPU接受的; (2)可屏蔽中断INTR:是否响应INTR的请求,取决于中断允许标志位IF的状态。
3.中断向量表的初始化 方法一:将中断服务程序的入口地址直接装入中断向量表中。 方法二:采用DOS系统功能调用。即INT 21H的25H号功能调用。 (设置中断向量 DS:DX=中断向量 AL=中断类型号)
例题:把中断类型号为84H的中断服务程序放在1234:5670H开始的内存区域,该中断向量在向量表中的地址为84H 例题:把中断类型号为84H的中断服务程序放在1234:5670H开始的内存区域,该中断向量在向量表中的地址为84H * 4=210H,那么应该在0段的0000:0210H ~ 0000:0213H这4个单元中依次存放70H,56H,34H和12H。
用方法一实现中断向量表的初始化:(1) 在程序设计时,定义如下格式的数据段: VECDATA SEGMENT AT 0 ORG 84H*4 ;$=0210H VINSUB DW 5670H,1234H VECDATA ENDS
用方法一实现中断向量表的初始化:(2) MOV AX,0 MOV DS,AX MOV SI,0210H ; 84H*4 MOV DS:[SI], 5670H ADD SI,2 MOV DS:[SI],1234H
用方法二实现中断向量表的初始化: 功能调用。DOS功能调用指令INT 21H的25号功能可以设置中断向量。在执行INT 21H前,预置参数是:AH=25H;AL=中断类型号;DS:DX中预置中断向量。 MOV AH,25H;功能号 MOV AL,84H ;中断类型号 MOV BX,1234H MOV DS,BX MOV DX,5678H;预置中断向量的偏移地址 INT 21H;设置中断向量 预置中断向量中的段地址 返回本节
7.3.2 8086/8088中断优先级 中断源 优先级 除法错、断点中断、INTO、INT n 最高 NMI INTR 单步 最低
返回本节
7.3.3 IBM-PC/XT的中断控制逻辑 (1)内部中断源:除法错引起的中断、单步中断、溢出引起的中断、执行中断指令INT(包括INT 3 断点中断)引起的中断。 (2)非屏蔽中断NMI:系统板上存储器奇偶校验错、I/O通道中的插件奇偶校验错、8087协处理器请求中断。 (3)可屏蔽中断INTR:外部设备请求中断时,是通过INTR引脚向8088CPU请求可屏蔽中断。
IBM PC/XT机中断源和中断类型号 8259输入 中断类型号 中断源 IRQ0 08 电子钟定时中断 IRQ1 09 键盘中断 IRQ2 0A 为用户保留 IRQ3 0B 异步通信中断:COM2 IRQ4 0C 异步通信中断:COM1 IRQ5 0D 硬盘中断 IRQ6 0E 软盘中断 IRQ7 0F 并行打印机中断 返回本节
7.4 Intel 8259A可编程中断控制器 7.4.1 8259A的框图和引脚 7.4.2 设置优先权方式 7.4.3 屏蔽中断源的方式 7.4.2 设置优先权方式 7.4.3 屏蔽中断源的方式 7.4.4 结束中断处理的方式 7.4.5 中断触发方式 7.4.6 数据线连接方式 7.4.7 8259A初始化命令字和操作命令字 返回本章首页
7.4.1 8259A的框图和引脚 1.功能 1)1片8259A可以管理8级中断,经级联最多可扩展至64级。 2)每一级中断都可单独屏蔽或允许。 3)在中断响应周期,8259A可提供相应的中断向量号,从而能迅速地转至中断服务程序。 4)通过编程使8259A工作在多种不同的方式。
2.8259A的结构框图
中断请求寄存器IRR 保存8条外界中断请求信号IR0~IR7的请求状态 Di位为1表示IRi引脚有中断请求;为0表示无请求 中断服务寄存器ISR 保存正在被8259A服务着的中断状态 Di位为1表示IRi中断正在服务中;为0表示没有被服务 中断屏蔽寄存器IMR 保存对中断请求信号IR的屏蔽状态 Di位为1表示IRi中断被屏蔽(禁止);为0表示允许
8259A可以级连,1个主片最多可以级连8个从片 级连时,主片的级连线CAS0~CAS2连至每个从片的CAS0~CAS2,输出被选中的从片编号 每个从片的中断请求信号INT,连至主8259A的一个中断请求输入端IRx;主片的INT线连至CPU的中断请求输入端INTR 在非缓冲方式下,引脚-SP/-EN,通过接地指定该片充当从片(-SP=0);反之若接高电平则该片充当主片(-SP=1)。
3.8259A的引脚
4. 8259A的中断响应过程 1)当它的一条或多条中断请求线(IR7~IR0)变为 高电平时,它就使中断请求寄存器IRR相应的位置1。2)8259A分析这些请求,它就向CPU发出高电平有效信号INT,请求中断服务。 3)当前一条指令执行完毕,且IF=1时,CPU响应中断请求,进入中断响应总线周期。
4)8259A接到来自CPU的第一个负脉冲,把允许中断的最高优先级请求位,置入服务寄存器ISR,并把IRR中对应的位清零。 5)CPU在第二个总线周期,再次发出一个负脉冲,8259A接到第二个负脉冲,将中断类型码(ICW2的内容)送到数据总线的D7~D0,CPU读取该类型码。第二个中断响应周期,总线封锁撤销。
中断响应总线周期时序
5.8259A的读写操作及地址 CS RD WR A0 功能 8259A端口 PC/XT机端口 1 读IRR,ISR 偶地址 20H 1 读IRR,ISR 偶地址 20H 读IMR 奇地址 21H 写ICW1,OCW2,OCW3 写ICW2,ICW3,ICW4,OCW1 × 无操作 返回本节
7.4.2 设置优先权方式 1.普通全嵌套方式 2.特殊全嵌套方式 7.4.2 设置优先权方式 1.普通全嵌套方式 8259A的中断优先权顺序固定不变,从高到低依次为:IR0、IR1、IR2、……IR7 中断请求后,8259A对当前请求中断中优先权最高的中断IRi予以响应,将其向量号送上数据总线,对应ISR的Di位置位,直到中断结束(ISR的Di位复位) 在ISR的Di位置位期间,禁止再发生同级和低级优先权的中断,但允许高级优先权中断的嵌套 2.特殊全嵌套方式 允许同级中断嵌套(用于级连主片) 返回本节
7.4.3 屏蔽中断源的方式 1.普通屏蔽方式 将IMR的Di位置1,对应的中断IRi将被屏蔽,该中断请求将不能从8259A送到CPU 7.4.3 屏蔽中断源的方式 将IMR的Di位置1,对应的中断IRi将被屏蔽,该中断请求将不能从8259A送到CPU 如果将IMR 的Di位置0,则允许对应的中断产生 1.普通屏蔽方式 2.特殊屏蔽方式 允许发生低级的中断嵌套,用于级连时的主片。 返回本节
7.4.4 结束中断处理的方式 8259A判断中断服务寄存器ISR的状态:若某位为1,表示该中断源正在得到服务;若某位为0,表示该中断服务已结束。 1.自动中断结束方式 中断响应后自动送结束字(EOI)使中断源在ISR中的相应位复位。 2.非自动中断结束方式 中断结束时用户用指令送结束字(EOI),使ISR中的相应位复位。 返回本节
7.4.5 中断触发方式 边沿触发方式 中断请求输入端出现上升沿为有效的中断请求信号 电平触发方式 中断请求端出现高电平为有效的中断请求信号 7.4.5 中断触发方式 边沿触发方式 中断请求输入端出现上升沿为有效的中断请求信号 电平触发方式 中断请求端出现高电平为有效的中断请求信号 返回本节
7.4.6 数据线连接方式 缓冲方式 对8259A的数据线(输出中断向量号)加缓冲器予以隔离和驱动 7.4.6 数据线连接方式 缓冲方式 对8259A的数据线(输出中断向量号)加缓冲器予以隔离和驱动 -SP/-EN引脚作为输出端,输出允许信号,用以关闭或开启缓冲器 非缓冲方式 -SP/-EN引脚作为输入端 在8259A级连时,用它选择该芯片充当主片或从片
8259A非缓冲方式下级连结构 当中断源提出中断申请时,相应的从8259会通过主8259向CPU提出服务请求,CPU将发出2个-INTA脉冲,在此期间主8259根据申请信号的引脚编号通过CAS0~CAS2发出选择编码,被选中的从8259在第二个-INTA脉冲期间通过数据总线发出中断向量号。 返回本节
7.4.7 8259A初始化命令字和操作命令字
1. 初始化命令字ICW 8259A在开始工作前必须写入初始化命令字 初始化命令字ICW最多可以有4个:ICW1~ICW4 必须按照下图顺序依次写入: 其中ICW1和ICW2是必须的 ICW3和ICW4是否需要,由具体的工作方式决定
8259A初始化命令字的顺序 写ICW1 写ICW2 Y N 写ICW3 写ICW4 初始化完 准备接收中断 单片8259A?
D2和D7~D5,只在8080/8085CPU模式下用,8086CPU模式下这几位不起作用。 ICW1 命令字 A0 D7 D6 D5 D4 D3 D2 D1 D0 1 要 ICW4 不要 单片方式 级连方式 偶地址端口 特征位 电平触发 边沿触发 × × × 1 LTIM × SNGL IC4 D2和D7~D5,只在8080/8085CPU模式下用,8086CPU模式下这几位不起作用。
ICW2 命令字 A0 D7 D6 D5 D4 D3 D2 D1 D0 1 中断类型号的高 5 位 8259A 自动 填入 T7 T6 T5 T4 T3 0 0 0 9259A管理的中断类型号的高5位由D7~D3确定,由用户给出,系统会根据中断引入端IR0~IR7自动确定D2~D0的值。例如,写入ICW2的内容为40H,则IR0~IR7对应的8个中断类型号依次为:40H,41H,…,47H。可见,设定的8个中断类型号一定是连号的(末位必是0H~7H或8H~FH)。
主8259A的 ICW3 命令字 1 - IRi 输入引脚接从片的INT 输入引脚未接从片的INT A0 D7 D6 D5 D4 D3 D2 D1 D0 S3 S2 S1 S0 S4 S5 S6 S7 ICW3(主/从片初始化字)。该命令字定义系统中主片、从片的级连。若系统中只有一片8259A,则不需要ICW3;若有多片8259A,则主片8259A和从片8259A的初始化都需要ICW3。主片和从片的ICW3格式是不同的。
从8259A的 ICW3 命令字 D7~D3:不起作用,常取0。 ID2 ID1 ID0 1 D7~D3:不起作用,常取0。 D2~D0:表示从片的识别码ID2~ID0,它对应于主片的IR7~IR0级连的从片的编码。例如,主片的IR5中断请求线上级连有从片,此从片的ID2~ID0为101(即从片的ICW3为00000101),而主片的ICW3为00100000。
ICW4 命令字 1 - 8088/8086CPU 8080/8085 CPU 自动 EOI 方式 非自动 特殊全嵌套方式 普通全嵌套方式 8080/8085 CPU 自动 EOI 方式 非自动 特殊全嵌套方式 普通全嵌套方式 × 非缓冲方式 缓冲方式从片 缓冲方式主片 A0 D7 D6 D5 D4 D3 D2 D1 D0 0 0 0 SFNM BUF M/S AEOI uPM
PC机上主片8259A地址:20h-21h IBM-PC/AT机对8259A的初始化——初始化主片8259A MOV AL,11H ;边沿触发,级连,有ICW4 OUT 20H,AL ;写入ICW1 MOV AL,08H ;中断类型号的初值为08H OUT 21H,AL ;写入ICW2 MOV AL,04H ;04H=00000100B 从片INT接主片IR2 OUT 21H,AL ;写入ICW3 MOV AL,01H ;8086系统,非自动EOI,非缓冲,普通全嵌套 OUT 21H,AL ;写入ICW4
PC机上从片8259A地址:0A0h-0A1h IBM-PC/AT机对8259A的初始化——初始化从片8259A MOV AL,11H ;边沿触发,级连,有ICW4 OUT 0A0H,AL;写入ICW1 MOV AL,70H ;中断类型号的初值为70H OUT 0A1H,AL;写入ICW2 MOV AL,02H ;从片INT接主片IR2 OUT 0A1H,AL;写入ICW3 MOV AL,01H ;8086系统,非自动EOI,非缓冲,普通全嵌套 OUT 0A1H,AL ;写入ICW4
2. 操作命令字OCW OCW1 命令字 A0 D7 D6 D5 D4 D3 D2 D1 D0 1 该命令字用来设置或清除对中断源的屏蔽。若OCW1的某位为“1”,则对应的中断源被屏蔽;若为“0”,则中断被开放。例如:OCW1=80H,则IR7中断被屏蔽。
OCW2 命令字 A0 D7 D6 D5 D4 D3 D2 D1 D0 R SL EOI L2 L1 L0 R=0、SL=0、EOI=1(L0~L2无意义):此时的OCW2用作全嵌套方式下的非自动EOI命令的中断结束字。通常,该命令在中断服务程序的末尾,用来清除当前正在服务的中断级。 OCW3命令字(略) 返回本节
7.5 8259A编程举例 例:利用PC机的8259A中断控制器的08H号中断(时钟定时中断)进行字符串“8259A interrupt!”的多次显示。 说明: 8259A的IRQ0(向量号为08H)中断请求来自定时器8253,每隔一定时间产生一次定时中断。 本例改变PC机原08H号中断服务程序为我们自己定义的用来显示一个字符串的中断服务程序。 PC机采用非自动中断结束EOI方式,需在中断服务程序最后发送EOI命令(OCW2)。 返回本章首页