820 likes | 1.04k Views
第 4 章 微型计算机的中断系统. 4.1 中断原理 4.2 8086 CPU 中断系统 4.3 可编程中断控制器8259 A 4.4 中断方式输入输出. 4.1 中断原理. 4.1.1 中断的基本概念. 1. 中断 由于某个事件的发生, CPU 暂停当前正在执行的程序,转而执行处理该事件的一个程序。 该程序执行完成后, CPU 接着执行被暂停的程序。 这个 过程 称为中断。. 2. 中断源 引发中断的事件称为中断源 内部中断(在 CPU 内部的中断源): 程序异常(运算溢出等),
E N D
第4章 微型计算机的中断系统 4.1 中断原理 4.2 8086 CPU中断系统 4.3 可编程中断控制器8259A 4.4 中断方式输入输出
4.1 中断原理 4.1.1 中断的基本概念 1. 中断 由于某个事件的发生,CPU暂停当前正在执行的程序,转而执行处理该事件的一个程序。 该程序执行完成后,CPU接着执行被暂停的程序。 这个过程称为中断。
2. 中断源 • 引发中断的事件称为中断源 • 内部中断(在CPU内部的中断源): • 程序异常(运算溢出等), • 陷阱中断(例如,单步运行程序等), • 软件中断(执行特殊指令)等。 • 外部中断(发生在CPU外部的中断): • 外部故障(电源故障,存储器读写校验错) • 外部事件(定时时间到,外部特殊信号) • IO事件(外部设备完成一次IO操作,请求数据传输)
3. 中断类型 用若干位二进制表示的中断源的编号。 4. 中断断点 由于中断的发生,某个程序被暂停执行。 该程序中即将执行,由于中断没有被执行的那条指令的地址称为中断断点,简称断点。
5. 中断服务程序 • 处理中断事件的程序段称为中断服务程序。 如:故障中断服务程序,输入输出中断服务程序。 • 不同类型的中断需要不同的中断服务程序。 • 中断服务程序不同于一般的子程序: • 子程序由某个程序调用,它的调用是由程序设定的, 它的执行时间是确定的。 • 中断服务程序由某个事件引发,它的执行一般是随 机的,不确定的。
6. 中断系统 为实现计算机的中断功能而配置的相关硬件、软件的集合称为中断系统。
1. 并行处理能力 • 实现CPU和多个外设同时工作,提高CPU效率。 • 2. 实时处理能力 • 计算机应用于实时控制时,对外部事件及时响应。 • 故障处理能力 • 及时处理故障,不影响其他程序的运行。 • 4. 多道程序或多重任务的运行 • 在操作系统的调度下,运行多道程序或多重任务。 4.1.2 中断工作方式的特点
1. 对中断全过程的控制 • 中断源发出中断请求时,CPU能决定是否响应这一中断。 • 若允许响应这个中断请求,CPU在保护断点后,将控制转移到相应的中断服务程序去 • 中断处理完,CPU返回到断点处继续执行被中断的程序。 4.1.3 中断管理
2. 中断源的识别 • 软件识别: • 响应中断后, CPU进入中断处理程序。 • 在这个程序里,CPU逐个查询各中断源的状态,确 定是哪一个设备申请了中断。 • 硬件识别: • 响应中断后, CPU进入一个“中断响应周期”。 • 在这个周期里,申请中断的设备向CPU发送它的中断类型。
3. 中断的优先权 优先权:有多个中断源同时提出中断请求时,CPU响应中断的优先次序。 (1)软件查询法 (2)分类申请法 (3)链式优先权排队——菊花链法 (4)可编程中断控制器——“向量”优先权排队
菊花链中断优先级排队电路 图4-1
4. 中断嵌套 • CPU在处理中断过程中,如果出现了级别更高的中断 请求,CPU停止执行低级中断的处理程序而去优先处 理高级中断。 • 等高级中断处理完毕后,再接着执行低级的未处理完 的程序。 • 这种中断处理方式称为多重(级)中断或中断嵌套。 • CPU在响应中断时已将IF清零,一定要在中断处理程 序中加入开中断指令,才有可能进行中断嵌套。
1.中断源请求中断 • (1)外部中断源由外部硬件产生可屏蔽或不可屏蔽中断的请求信号; • (2)内部中断源在程序运行过程中发生了指令异常或其他情况。 • (3)中断屏蔽CPU用程序的方法允许某些中断源发出中断请求,而禁止某些中断源请求中断 • 在外设的接口内增设一个中断屏蔽触发器 • Q=0时,中断请求不能发往INTR; • 适当地设定中断屏蔽触发器的状态,可以控制中断 请求信号是否能够送到INTR端 4.1.4 中断过程
2. 中断响应 (1) 响应可屏蔽中断必须同时具备以下条件: • CPU处于允许中断状态(IF=1); • 没有不可屏蔽中断请求和总线请求; • 当前指令执行结束。 (2) 响应不可屏蔽中断必须同时满足以下条件: • 没有总线请求; • 当前指令执行结束。 (3) 响应内部中断的条件: • 当前指令执行结束。
中断响应周期 CPU接受中断请求后转入中断响应周期: (1)识别中断源,取得中断源的中断类型; (2)将标志寄存器FLAGS和CS、IP(断点)先后压入 堆栈保存; (3)清除自陷标志位TF和中断允许标志位IF; (4)获得相应的中断服务程序入口地址,转入中断服务 程序。
中断过程 图4-3
3. 中断服务 (1)保护现场: 保护中断服务时要使用的寄存器(压栈); (2)开中断: 中断服务时能响应更高级的中断请求; (3)中断处理:执行输入输出或非常事件的处理; (4)关中断: 恢复现场时不被新的中断打扰; (5)恢复现场: 将堆栈中保存的内容弹出; (6)中断返回 :通过中断返回指令,弹出IP,CS,FLAGS, 程序回到被中断的地址,恢复中断前的状态。
4.2 8086 CPU中断系统 4.2.1 8086的中断类型 中断类型:用8位二进制表示,可以有256个不同的中断; 中断请求输入引脚:NMI、INTR; 中断优先级: INT 0(除法溢出)→溢出中断(INTO)→INT n指令→NMI → INTR → 单步中断。
8086 CPU中断 图4-4
1. 可屏蔽中断 • IF= 0时,CPU不响应INTR的中断请求;IF= 1时,CPU响应INTR的中断请求。 • 用STI指令使IF=1,称为开中断; 用CLI指令使IF=0,称为关中断。 • 系统复位后,或CPU响应了任何一种中断后,都会使IF=0。 • 应使用STI指令使IF=1,确保中断开放。 • 可屏蔽中断源由8259A统一管理,每片8259A可以接 受8个外部设备的中断请求。
2. 不可屏蔽中断 • NMI接收上升沿触发的中断请求信号; • 输入脉冲应大于两个时钟周期; • CPU对NMI中断请求的响应,不受中断允许 标志位IF控制; • NMI中断类型码固定为2。
3. 内部中断 (1)除法溢出中断(n=0): 除数为零或商超过寄存器所能表达的范围。 (2)单步中断(n=1) :TF=1,每执行完一条指令产生一次中断。 用于实现单步操作,是强有力的调试手段。 (3)断点中断 (n=3) : INT 3指令产生一个中断类型码为3的断点中断。 (4)INTO指令 (n=4) :OF=1,则INTO指令引起类型码为4的内部中断;OF=0,此指令不起作用,程序顺序执行。 (5) INT n指令
4.2.2 8086的中断向量表 中断向量:中断服务程序的入口地址; • 8086的中断向量表从内存00000H开始存放; • 每个中断向量占用4个字节; • 中断服务程序入口的偏移地址存入两个低地址字节, 入口的段基址存入两个高地址字节; • 256个中断向量占用00000H~003FFH共1024个字节。
8086的中断向量表 图4-5
AH=35H AL=中断类型 INT 21H →把原有的中断向量送ES:BX AH=25H AL=中断类型 DS:DX=中断向量 INT 21H →把新的中断向量送中断向量表
4.2.3 8086对外部中断的响应 1. 不可屏蔽中断NMI • 不受CPU内部中断允许标志IF的约束,优先权高于INTR; • 中断类型号2;采用边沿触发(上升沿)方式 (1)标志寄存器压入堆栈 (2)清除IF标志和TF标志 (3)保存断点,把断点处的CS和IP内容先后压入堆栈 (4)取出中断服务程序的入口地址,送入IP和CS (5)进入中断服务程序 用途:主板上RAM奇偶错, I/O通道中的奇偶校验错, 8087协处理器异常中断。
2.可屏蔽中断INTR • 外设的中断请求首先送到8259A,按照中断优先权排队; • 电平触发方式,高电平有效。 响应过程: • 第一个INTA总线周期,通知外部做好准备; • 第二个INTA总线周期,从外部获取中断类型号; • 执行总线写周期,把FLAGS压入堆栈,并清除IF,TF; • 执行总线写周期,把CS内容压栈; • 执行总线写周期,把IP内容压栈; • 执行总线读周期,中断服务程序入口偏移地址送入IP; • 执行总线读周期,中断服务程序入口段基址送入CS。
4.3 可编程中断控制器8259A • 接收8路外部中断请求,通过级联可以扩展至64级; • 优先权排队和控制,优先权方式可选; • 中断嵌套功能; • 向CPU提供中断类型号; • 对每一级编程进行屏蔽或开放。 4.3.1 8259A的基本功能
4.3.2 8259A引脚及内部结构 DB7~DB0:双向三态数据总线; IR7~IR0: 外设向8259A发出的中断请求信号,输入。 A0: 地址线,输入,用于选择内部端口。 CS#: 片选信号,输入、低电平有效。 RD#: 读信号,输入、低电平有效。 WR#: 写信号,输入、低电平有效。 INTA#: 中断响应信号,输入、低电平有效。 INT: 中断请求信号,输出、高电平有效。 CAS2~CAS0:双向的级联线。 SP/EN: 主从设备设定/缓冲器读写控制,双向双功能
8259A引脚 图4-6
8259A的内部结构 图4-7
2. 中断请求寄存器IRR • 锁存外部设备送来的IR7~IR0中断请求信号; • 中断请求线变为高电平时,IRR中与之对应的一位被置1; • 寄存器的内容可以被CPU读出。 3. 中断屏蔽寄存器IMR • 记录对每一级中断的屏蔽信号; • 置1时,对应的外部中断请求线被屏蔽; • 设置IMR起到改变中断请求优先级的效果。
4. 中断服务状态寄存器ISR • 记录当前正在被服务的所有中断级; • CPU响应IRi中断请求,ISR中对应第i位置1; • 中断处理结束前,要使用指令清除这一位; • 寄存器可以被CPU读出。 5.优先权处理器 • 识别和管理各中断请求信号的优先级别; • 多个中断请求信号同时出现时,优先权处理器根据 控制逻辑规定的优先级规则和IMR的内容来判断这 些请求信号的最高优先级。
6.控制逻辑 初始化命令字寄存器ICW1~ICW4: 在系统初始化时置入,工作过程中保持不变。 操作命令字寄存器OCW1~OCW3: 工作过程中根据需要设定。 7. 数据总线缓冲器 8位的双向三态缓冲器,是8259A与系统数据总线的接口。
8.读/写控制逻辑 接收、执行CPU的读/写命令。 9.级联缓冲/比较器 在级联方式的主/从结构中,用来控制8259A的级联。 缓冲器: SP/EN输出低电平时,开启双向缓冲器。 级联比较器: 主8259A:用CAS2~CAS0输出被选中从片代码; 从8259A: 接收主器件送来的从片选择代码
4.3.3 8259A的工作方式 1. 8259A的工作过程 (1)中断源在IR0~IR7上产生中断请求; (2)中断请求被锁存,经IMR“屏蔽”,送优先权电路判优; (3)控制逻辑接收中断请求,向CPU输出INT信号; (4)CPU接受8259A的INT信号,进入连续两个INTA周期 (5)优先权电路将最高优先权对应ISR中的位置位; (6)第二个INTA周期把中断类型号输出到数据总线; (7)CPU读取中断类型号,转移到相应的中断处理程序。 (8)中断处理结束前,向8259A发送EOI(中断结束)命 令,使ISR相应位复位,本次中断到此结束。
2. 8259A的优先权管理 (1)固定优先级 中断源的优先级由它所连接的引脚编号决定; 全嵌套方式 : 中断优先权级别固定,IR0优先权最高,IR7最低。 特殊全嵌套 : 接收同一引脚上的第二次中断请求。 (2)循环优先级 各个中断申请具有大体相同的优先级; 有优先权自动循环方式和优先权特殊循环方式。
3. 中断屏蔽方式 (1)普通屏蔽方式 • 通过将中断屏蔽字写入IMR实现; • 写入某位为“1”,对应的中断请求被屏蔽;为“0”开放。 (2)特殊屏蔽方式 • 采用特殊屏蔽方式并用屏蔽字对IMR中某一位置“1”, 会同时使ISR中对应位清“0”。 • 对屏蔽位的设置部分地改变了中断优先权。
4. 中断结束方式 中断结束命令(EOI): 将ISR中的相应位清“0”,表示中断处理结束。 (1)自动中断结束方式(AEOI) • 8259A在第二个中断响应周期INTA信号的后沿,自动 将ISR中被响应中断级的对应位清“0”。 (2)非自动中断结束方式(EOI) • 从中断服务程序返回前,在程序里向8259A输出一个中 断结束命令(EOI),把ISR对应位清“0”。 一般的中断结束方式:由8259A自动选择优先权最高的位。 特殊的中断结束命令:指令内指明要清除ISR中的某一位。
注意! 在非自动中断结束方式下,如果在程序里忘了发送中断结束命令,那么,8259A将不再响应这个中断以及比它级别低的中断请求。
5. 8259A查询工作方式 • 工作在程序查询方式时,8259A不向CPU发INT信号; • CPU通过查询8259A了解有无中断; • 如果有中断发生,转入相应的服务程序。 设置查询方式的过程: • 关闭中断; • 用输出指令把“查询方式命令字”送到8259A; • 对8259A执行一条输入指令,读取查询字 • 查询字格式为: I XXXXW2WlW0 I=1,有中断请求,W2WlW0为最高优先级编码。
4.3.4 8259A的编程 初始化命令字: • 在系统初始化时写入; • 用来设定8259的基本工作方式。 操作命令字: • 在初始化后的任何时刻写入8259A; • 用来动态地控制8259A的操作。
1. 初始化命令字ICW (1)初始化命令字ICW1 图4-8
注意! 向8259A送入一条A0=0、D4=1的命令(ICW1): • 启动8259A的初始化过程, • 相当于RESET信号的作用,自动完成下列操作: • 清除中断屏蔽寄存器IMR; • 设置以IR0为最高优先级,IR7为最低优先级的全嵌 套方式; • 固定中断优先权排序。
(2)初始化命令字ICW2 图4-9
(3)初始化命令字ICW3(主片) 图4-10
(3)初始化命令字ICW3(从片) 图4-11
(4)初始化命令字ICW4 图4-12
(5)8259A初始化 按以下顺序对8259A初始化: 单片8259A:ICW1、ICW2、ICW4 级联方式:ICW1、ICW2、ICW3、ICW4 注意:级联方式下,每一片8259A都要独立地按上 面顺序写入初始化命令字。