第八章 微型计算机中断系统
本章内容
? 中断的概述
? 中断处理过程
? 中断优先级和中断嵌套
? 可编程中断控制器 8259A
中断的概念
? 中断
? 是一个由硬件激发的过程,它打断正在执行
的程序
? 中断过程
? 当 CPU正常运行程序时,由于 内部事件或外
设请求 (随机的 ),引起 CPU暂时 中止 正在运
行的程序,转去执行发出请求的外设(或内
部事件)的服务子程序,待该服务程序执行
完毕,再返回被中止的程序,这一过程称为
中断 。
中断的概念
中断
断点
IRET
中断服务子程序 主程序
中断的概念
? 中断源
? 引起中断的事件
? 内部中断(片内 /程序)
? 外部中断(片外)
? 中断响应
? CPU对中断的响应(处理)
? 并不是有求必应
? 在一定时刻、满足一定条件,才能响应之
中断的概念
? 中断向量表
? 中断服务子程序入口地址的地址表( 类似于
跳转表 )
? 中断优先级
? 多个中断源之间的轻重缓急
? 高级中断 /低级中断
? 中断屏蔽
? 使得 CPU无法感知相关中断请求的机制
中断分类
中断分类
? 8086/8088系统可容纳 256种(个)不同的
中断
? 外部中断(硬件中断)
? 不可屏蔽中断( NMI)
? 可屏蔽中断( INTR)
? 内部中断(软件中断)
? INT指令
? CPU出错
? 调试
中断分类
? 不可屏蔽中断( NMI)
? CPU必须 响应,不受 IF的限制
? 紧急事件
? 上升沿 触发
? 2号类型中断
中断分类
? 可屏蔽中断( INTR)
? 除了 NMI之外的硬件中断,绝大部分的外部
中断均由 INTR向 CPU请求中断
? CPU可根据情况选择响应或不响应,受 IF的
制约
? 电平触发,必须保持,直至 CPU响应之
中断分类
? 软件中断
? 不可屏蔽
? 指令中断,Int n
? CPU出错
? 调试中断
? 单步中断
? 断点中断
中断处理过程( 可屏蔽 )
? CPU响应中断的条件
? 外设接口提出(发出)中断请求
? 该请求电平信号能到达 CPU的 INTR引脚
(中途未被屏蔽)
? CPU的中断控制位 IF=1(允许 INTR中断)
? CPU执行到当前指令的最后一个总线周期的
最后一个时钟周期时,才检测中断
中断处理过程(可屏蔽)
INTR中断处理过程
? 当前指令执行结束
? 判 INTR有无中断请求
? 测 IF是否允许响应 INTR
? 发 INTA信号,获取中断向量
? 转至相应的中断服务子程序
? FR入栈 /IF=0(自动关中)
? ……
? 中断返回( IRET)
? 返回断点 /POP FR
INTR中断处理过程(无嵌套)
中断
断点
IRET
中断服务子程序 主程序 自





护PS
W




INTA响应中断
获取中断类型
获取中断向量
保护现场
中断处理
恢复现场

复PS
W




中断处理过程
中断处理过程 —— 中断向量表
? 中断向量表
? 8086/8088系统具有 256个中断类型
? 将 256个中断服务子程序的入口地址,集中
排放在 0000,0000开始的区域内
? 每个类型对应 4个字节(段:偏移)
? 256× 4=1024字节
? 只需获得中断类型即可
中断向量表
? 向量地址
? 类型 n
? n× 4→→IP
? n× 4 + 2→→CS
中断处理过程 —— 向量中断
? 向量中断
? 利用中断类型、中断向量表决定中断服务子
程序入口地址的中断方式
中断处理过程 —— 向量中断
? 中断类型的获得
? Int n
? 固定的中断
? I/O提供的类型号
? 中断向量的设置
? 利用 Int 21H
? AH= 25H,设置
? AH= 35H
? 直接程序设置
中断处理过程 —— 向量中断
? 中断向量的访问
? 通过 INT 21H的设置
? AH=25H
? AL=中断类型,DS,DX子程序入口地址
? 通过 INT 21H获取向量
? AH=35H
? AL=中断类型,ES,BX获得的入口地址
? 程序直接访问向量表
? 0段 0地址开始的 1KB区域
中断处理过程 —— 向量中断
? 中断类型
? 系统中的每个中断源均具有一个中断类型
? 内部中断
? 固定中断类型
? Int n —— n号中断
? NMI
? 2号中断类型
? INTR
? 由中断控制器、中断源向 CPU提供中断类型号
中断处理过程 —— 主程序
? 设置中断向量
? BIOS
? 用户自定义
? 初始化中断控制器
? 开中( STI) /关中( CLI)
中断处理过程 —— CPU/IO
? 中断源发出中断请求、并到达 CPU引脚
? CPU在当前指令结束时,判中断请求
? NMI—— 中断类型为 2,必须响应
? INTR—— CPU在可以响应时( IF=1),发出
INTA,以获取类型号
? 保护 标志寄存器 和 断点,转向中断服务子
程序
中断处理过程 —— 子程序
? 保护现场
? 开中(如果允许中断嵌套)
? 中断处理
? 关中
? EOI(清除当前中断的被服务标志)
? 恢复现场
? IRET( FR恢复、段点恢复)
此时嵌套的
INTR中断可能
被响应
中断处理过程 —— INTA
? 第一个 INTA周期
? 通知外设接口(或中断控制器),准备好中断
类型信息
? 第二个 INTA周期
? 放出中断类型号数据
? CPU从 DB获取中断类型号
中断优先级和中断嵌套
? 中断嵌套
? 多个中断源,有可能同时发出中断请求
? 多重中断响应(服务)
? 中断优先级
? 给每个中断源规定优先级别,CPU先响应高级
中断的请求
? 一般情况下,在允许中断嵌套时,高级中断可
以打断低级中断,同级或低级中断不能打断高
级或同级中断
中断优先级和中断嵌套
? IBM PC的中断优先级层次
? 内部中断(出错,INT n)
? NMI
? INTR
? 单步中断
中断优先级和中断嵌套
? 中断优先级的判断
? 软件查询 —— 依优先次序查询
中断优先级和中断嵌套
? 中断优先级的判断
? 硬件方式 —— 如:菊花链
中断优先级和中断嵌套
? 中断优先级的判断
? 向量中断控制器 —— 如,8259中断控制器
某中断正被
服务标志
中断优先级和中断嵌套
中断
断点
IRET
中断服务子程序 主程序 自





护PS
W




INTA响应中断
获取中断类型






保护现场
中断处理
恢复现场

复PS
W




开中断
中断优先级和 中断嵌套
IRQ0
IRQ1

IRQ7
该中断
正被服
务标志
清除
可编程中断控制器 8259A( PIC)
? 8级 (可级联至 64级 )优先级控制
? 单独屏蔽 /允许
? 提供中断类型码
? 可编程多种工作模式
? 具有内部寄存器
? 由初始化命令字、操作命令字进行编程
? 改变工作模式
8259A—— 内部结构
8259A—— 内部结构
8259A—— 内部结构
? IRR中断请求寄存器
? 锁存中断请求信号,被响应后复位
? 1:有请求 /0:无请求
? IMR中断屏蔽寄存器
? 可编程屏蔽控制
? 逐位屏蔽
? 1:屏蔽 /0:未屏蔽
8259A—— 内部结构
? PR优先级判断寄存器
? 多种中断优先判断机制
? ISR中断服务寄存器
? 中断正被服务标识
? 1:正被服务 /0:未被服务
? 全 0?
? 全 1?
8259A—— 中断过程
? 一条或多条中断请求 IR变为高电平,使 IRR相应位
置 1
? PR分析它们的优先级,向 CPU发出中断请求 INTR
? CPU响应中断,以 INTA作为回答
? 8259接受来自 CPU的第一个 INTA,最高优先级的
ISR置位,相应的 IRR复位
? 第二个 INTA,8259向 DB发出中断类型码
? EOI使 ISR复位,示该中断服务完毕
8259A—— 中断管理方式
? 编程结构
? ICW1~ICW4设定 8259的工作模式
? OCW1~OCW3控制中断过程
8259A—— 中断管理方式
? 优先权管理方法
? 完全嵌套方式
? 特殊全嵌套方式
? 优先级自动循环方式
? 优先级特殊循环方式
8259A—— 中断管理方式
? 完全嵌套方式
? 最基本的中断优先管理方式(缺省)
? 固定的优先级,IR0最高,IR7最低
? 普通 EOI、自动 EOI
? 特殊全嵌套方式
? 允许同级的中断打断
? 适用于级联方式
? 主级为特殊全嵌套方式
? 从级为其他优先级方式
? 特殊 EOI
8259A—— 中断管理方式
? 优先级自动循环方式
? 优先级队列
? 初始为 IR0~IR7
? 被服务后变为最低
? 普通 EOI、自动 EOI
? 优先级特殊循环方式
? 同前
? 初始的最低优先级由程序设定
? 特殊 EOI
8259A—— 中断管理方式
? 中断结束方式
? 普通 EOI
? 将 ISR中,正在被服务的具有最高级别的 ISR复位
? 主要用于完全嵌套方式下
? 特殊 EOI
? CPU发出 EOI命令,通知 8259哪个级别将被 EOI
? 自动 EOI
? 在第二个 INTA之后,即清除对应的 EOI
? 使低级 /同级中断可以嵌套
8259A—— 中断管理方式
? 中断源的屏蔽
? 普通屏蔽方式
? 特殊屏蔽方式
? 在中断服务子程序中,使 8259OCW3中的 SMM=11
? 使 IMR中的对应位置 1
? 结果是当前 ISR中的对应位复位
? 导致其他中断可以嵌套进入
8259A—— 中断管理方式
? 中断请求的引入
? 边沿触发
? IRR,INTR,IF=1,INTA
? 电平触发
? IRR,INTR,IF=1,INTA
? 中断查询
? IRR,INTR,IF=0
? 程序查询 IRR( OCW3)
8259A—— 中断管理方式
? 初始化命令字 ICW
? 复位后,先出现 ICW
? 只初始化一次
? 状态、中断方式、优先级管理
? 操作命令字 OCW
? 对中断操作过程进行控制
? 中断屏蔽、优先级次序、结束方式
? OCW1奇地址端口
? OCW2,OCW3偶地址端口
8259A—— 编程方法
? 设定中断请求的信号触发方式
? 电平、边沿
? 工作方式
? 单片、级联
? 中断类型码的基数
? IR0对应的类型码,其余顺延
? 优先级设置方式
? EOI类型
8259A编程方法 —— ICW
? ICW1—— 芯片控制初始化命令字
8259A编程方法 —— ICW
0
? ICW2—— 设置中断类型码基数
8259A编程方法 —— ICW
? ICW3—— 标识主片 /从片
8259A编程方法 —— ICW
? ICW4—— 方式控制初始化
8259A编程方法 —— ICW
? ICW的顺序
8259A编程方法 —— ICW
? OCW1—— 中断屏蔽操作命令字
8259A编程方法 —— OCW
? OCW2—— 优先权循环方式和中断结束方
式操作命令字
8259A编程方法 —— OCW
? OCW3—— 特殊屏蔽方式和查询方式操作
命令字
8259A编程方法 —— OCW
0x:无效
10:下次 RD有效时读 IRR
11:下次 RD有效时读 ISR
8259A—— 中断的级联
PC