1.34k likes | 1.56k Views
第 6 章 中断系统. 1 、中断的基本概念 2 、 8086/8088CPU 的中断系统 3 、可编程中断控制器 8259A 原理及应用 4 、中断处理例程的设计. 1 、中断的基本概念. 1 、基本概念 2 、中断处理过程 3 、中断识别和中断优先级. 基本概念. 1 、中断与中断源 中断 :是一个“过程”,由微机内外部的硬件或软中断指令引起, CPU 终止现行程序,转去执行相应的中断服务程序。与调用子程序相似,但有本质的不同。 中断源 :引起中断请求的源。有: ① I/O 设备、定时时钟等 CPU 外部的。
E N D
第6章 中断系统 • 1、中断的基本概念 • 2、8086/8088CPU的中断系统 • 3、可编程中断控制器8259A原理及应用 • 4、中断处理例程的设计
1、中断的基本概念 • 1、基本概念 • 2、中断处理过程 • 3、中断识别和中断优先级
基本概念 • 1、中断与中断源 • 中断:是一个“过程”,由微机内外部的硬件或软中断指令引起,CPU终止现行程序,转去执行相应的中断服务程序。与调用子程序相似,但有本质的不同。 • 中断源:引起中断请求的源。有: • ①I/O设备、定时时钟等CPU外部的。 • ②CPU硬件故障、指令执行异常(掉电、除0、结果溢出、指令非法)等。 • ③执行了INT指令(无随机性)。
非屏蔽中断 2# NMI INTR 可屏蔽中断 中断逻辑 8259A INT n指令 INTO指令 除法出错 单步 (TF=1) n# 4# 0# 1# • 8086/8088中断源
中断系统 • 为实现中断而设置的各种硬件和软件系统称为中断系统。中断系统应具备的功能: • 1、能实现中断响应、中断服务和中断返回。 • 2、能实现中断优先级排队。 • 3、能实现中断嵌套。
CPU中断系统的功能 • (1)实现中断及返回 • (2)实现优先权排队,以确定优先处理的中断源。 • (3)优先权高的中断源能中断优先权低的中断处理
中断处理过程 • 中断处理过程可分4个阶段: • ⑴中断请求,发请求须满足: • ①外设应通过接口电路在CPU的中断请求输入引脚输入一个符合规定的信号(电平的或边缘触发的) • ②外设处于就绪工作状态。 • ③该中断源未被屏蔽。
⑵中断响应。CPU的中断响应包括: • ①关中断,使中断响应周期不被其他中断终止。 • ②保护断点(当前程序的断点地址CS和IP进栈)和标志寄存器内容进栈。 • ③取得中断服务程序的入口地址并执行。 • CPU响应外部中断的条件(以8086/8088 CPU为例)是: • ①当前指令周期无总线请求 • ②中断允许标志位IF=1 • ③当前指令执行完。
⑶中断服务。 • 中断服务程序要做的工作有: • ①保护现场。将中断服务程序可能用到的寄存器进栈保护。 • ②开中断 • ③查找中断源,转入相应的中断服务。 • 中断服务完成后: • ④关中断,使下一步的恢复现场工作不受干扰。 • ⑤恢复现场 • ⑥开中断,允许其他中断请求可以被CPU响应。
⑷中断返回。 • 中断服务程序最后一条指令,必须是中断返回指令。CPU执行后,自动把现存堆栈中的标志寄存器内容和断点地址内容恢复,接着执行的将是中断前被打断的原程序。
中断识别和中断优先级 • 中断优先权是事先根据中断源的重要性给每个中断源确定一个中断优先级别-优先权。 • 中断优先权管理就是判别和确定各个中断源的中断优先权。 • 中断优先权判别方法有软件和硬件两种方法。
(1)软件确定中断优先权 • 软件法是在CPU响应中断后,用软件查询确定哪个中断源申请中断,先被查询的先响应。 • 查询次序决定了中断优先权次序,最先被查询的中断源具有最高的优先权。
如图,8个外设只要有中断请求,CPU检测到中断请求信号,响应中断;如图,8个外设只要有中断请求,CPU检测到中断请求信号,响应中断; 读入端口80H的内容,逐位判别确定当前申请中断的优先权最高的中断源,从而进入相应的中断服务程序。
软件查询流程图 • (1)软件确定中断优先权 软件查询程序: IN AL,80H ;端口读入状态 TEST AL,80H; JNZ SERVE_A TEST AL,40H JNZ SERVE_B … … TEST AL,01H JNZ SERVE_H HLT * 软件查询次序就是优先权高低的次序; * 软件确定中断优先权不需复杂的硬件电路,简单易实现; * 中断源较多时,查询时间较长,中断响应较慢。
(2)硬件确定中断优先权 • 由硬件实现中断优先权的判别。 • * 常用的硬件电路有:中断优先权编码电路,链式优先权排队电路及专用硬件电路等。 • * 利用中断控制器8259A,它具有8个优先权控制,可以通过级联,扩展至64级优先权控制,且每级中断都可设置为允许或屏蔽 。
中断的多级嵌套 • 指低级中断服务可以被高级中断服务打断的中断管理。 • 写有嵌套功能的中断服务程序时要注意: • ①有屏蔽本级和低级中断请求的环节。防止低级中断的干扰。 • ②执行中断服务程序前,要开放中断,才可以响应高级中断请求。 • ③执行中断服务程序后,要关中断,然后才恢复现场。 • ④之后,再开放中断,接着是中断返回。
二、8086/8088的中断系统 • 1、8086/8088CPU的中断分类 • 2、中断向量和中断向量表 • 3、硬件中断 • 4、软件中断
8086/8088CPU具有一个功能很强、管理高效且简便灵活的中断系统,可以处理多达256种中断源。8086/8088CPU具有一个功能很强、管理高效且简便灵活的中断系统,可以处理多达256种中断源。 • 采用向量中断方法,对256种中断只需一次间接访问就可获得任一中断源的中断服务程序的入口地址,中断响应快速。 • 8086/8088CPU有两类中断: • * 内部中断 由执行中断指令或特殊事件引起; • * 外部中断 由外围设备接口向CPU的中断请求引脚INTR和NMI发出中断请求信号而引起的。
1、8086/8088的中断分类 • 8086/8088的中断系统可以处理256种不同的中断。 • 所有可能产生的中断源有:可屏蔽中断INTR、非屏蔽中断NMI、指令中断INT n和特定条件下的中断,分为两类: 外部中断 内部中断
内部中断CPU不是通过外部中断请求而是通过内部逻辑进入中断,调用相应的中断服务程序,是CPU自启动的中断。内部中断CPU不是通过外部中断请求而是通过内部逻辑进入中断,调用相应的中断服务程序,是CPU自启动的中断。 • 除单步中断外,所有内部中断为非屏蔽型的。 • 内部中断主要用于解决程序运行中发生的一些意外情况、程序调试、用户定义的中断或者调用系统提供的一些标准中断服务程序。 • (1)除法出错中断 (类型0) ; • (2)单步中断(类型1); • (3)断点中断(类型3); • (4)溢出中断(类型4); • (5)软件中断
内部中断 (1)除法出错中断 (类型0) CPU在执行触发指令DIV和IDIV时,若发现除数为0,或商超过了寄存器所能表达的范围,就立即产生一个类型为0的内部中断,CPU转入除法错误中断处理程序。 注意:此中断是由CPU自身产生,并没有对应的中断指令。 (2)单步中断 (类型1) 此中断也是由CPU自身产生,没有对应的中断指令,它是由CPU对状态标志寄存器中的陷阱标志TF的测试而引起的。 TF=1,自动单步中断,用于程序调试。
(3)断点中断 (类型3) 执行INT指令就产生一个类型为3的内部中断,称为断点中断 。 和单步中断类似,用于程序调试。 (4)溢出中断 (类型4) 溢出中断是由CPU执行一条INTO指令实现的: 当OF=1时,执行INTO就会进入类型码为4的内部中断; 否则,按顺序执行。 (5)软件中断 当执行INT n指令时,形成中断,类型码由指令提供。 从功能上来说,类似于调用子程序,但入口地址在中断向量表里。
外部中断 通过外部的硬件产生,由送至CPU引脚NMI和INTR上的信号引起中断。 分为两类: (1)非屏蔽中断(n=2) 一旦在NMI引脚有中断请求,CPU立即响应。 (2)可屏蔽中断 从INTR脚引入,必须满足IF=1,且没有非屏蔽中断,CPU可以响应中断。 中断请求信号是由电平触发,必须保存到CPU响应中断请求后才能撤除。 中断允许标志IF的标志,可由指令设置: STI ——开中断,将IF置1; CLI ——关中断,将IF置0 。 当系统复位,或CPU响应中断后,都使IF置0。
2、中断向量和中断向量表 • 中断向量即中断服务程序的入口地址,用两个字表示,低字是IP,高字是CS。 • 将所有中断源的中断向量集中存储在内存的指定空间内,这样一个指定的存储区称为中断向量表; • 8086/8088的中断类型码用8位二进制表示,共有从n=0~FFh, 256个中断向量; • 中断向量表建立在内存空间最低1K地址; • 地址范围:00000H — 003FFH(即CS=0000H)。 • 注意:中断类型码只能决定存放中断向量的地址,并不能决定中断向量本身和中断服务程序的功能。
在IBM-PC/XT机中,n=40H~0FFH,可以供用户设置中断向量。在IBM-PC/XT机中,n=40H~0FFH,可以供用户设置中断向量。 • 向中断向量表中写入中断向量,就是中断向量表的设置。 • (1)使用INT 21H • (2)用传送指令
1、使用INT 21H,设置中断向量 • 操作步骤: • ①AH中预置功能号, AH=25H; • ②AL中预置要设置的中断类型码; • ③DS:DX中预置中断服务程序的入口地址; • (DS内是段地址,DX内是偏移地址) • ④执行INT 21H • 2、用传送指令设置中断向量
例:某中断源的中断类型码为70H,其中断服务程序入口地址为IRQ0。 • 该中断源的中断向量表设置程序: • MOV AX, SEG IRQ0 • MOV DS, AX ;段基址送入DS • MOV DX, OFFSET IRQ0 ;偏移地址送入DX • MOV AX, 2570H ;类型码送AL,功能号送AH • INT 21H ;系统功能调用
方法二、用传送指令设置 • 例:某中断源的中断类型码为72H,其中断服务程序入口地址为IRQ2。 • 该中断源的中断向量表设置程序: • CLI • PUSH DS • MOV AX, 0 • MOV DS, AX ;中断向量表段基址为0 • MOV [01C8H], OFFSET IRQ2;存入偏移地址 • MOV [01CAH], SEG IRQ2 ;存入段基址 • POP DS 求中断向量指针: 72H×4=01C8H
硬件中断 • 1、非屏蔽中断—NMI • 由NMI引脚引入,响应与否不受中断标志IF的影响。 • 对应类型码为INT 2 • 用于PC系统的紧急处理:掉电
2、可屏蔽中断—INTR • 响应中断与否受中断标志IF的控制。 • 在INTR=1和IF=1时,CPU在完成当前指令后,响应外部中断请求。 • 响应中断包含两个连续的总线周期。
软件中断 • 执行中断指令INT n 引起。 • 特点: • ①执行中断指令INT n 进入中断服务,并从指令本身获得中断类型码。 • ②进入中断不需中断响应总线周期。 • ③除单步中断,不受中断标志IF的控制。 • ④中断服务可被硬中断打断。 • ⑤没有随机性
3、可编程中断控制器8259A原理及其应用 • 1、8259A基本构成与引脚信号 • 2、8259A工作过程 • 3、8259A的工作方式 • 4、8259A编程方法
可编程中断控制器8259A CS WR RD D7 D6 D5 D4 D3 D2 D1 D0 CAS0 CAS1 Vss 1 2 3 4 5 6 7 8 9 10 11 12 13 14 28 27 26 25 24 23 22 21 20 19 18 17 16 15 Vcc A0 INTA IR7 IR6 IR5 IR4 IR3 IR2 IR1 IR0 INT SP/EN CAS2 8259A 图(a)8259A芯片引脚
8259A的功能和引脚 • 电源线(2条) • 数据总线(8条) • D7 ~ D0:双向数据线,接数据总线的低8位 • 中断线(10条) • IR7 ~ IR0:外设中断请求输入端,可编程为脉冲 或电平触发 • INT:向CPU发出的中断请求信号 • INTA:CPU向8259A发的INTA中断响应信号
8259A的功能和引脚 (续) • 读写控制线(4条) • CS:片选信号,低电平有效 • RD:读信号,低电平有效 • WR:写信号,低电平有效 • A0:8259A内部寄存器选择信号(0:偶地址,1:奇地址) • 级联线(4条) • CAS2 ~ CAS0:级联信号线,需与SP/EN配合 • SP/EN:作输入时为SP(0:从片,1:主片) • 作输出时为EN(控制总线驱动方向) • (SP: Slave Program / EN: Enable Buffer)
8259A的内部结构 INTA INT 数据 总线 缓冲器 控 制 逻 辑 D0-D7 RD WR A0 IR0 IR1 IR2 IR3 IR4 IR5 IR6 IR7 读/写 逻辑 现行 服务 寄存器 ISR 中断 请求 寄存器 IRR 优先级 分析器 PR CS 级联 缓冲器/比较器 CAS0 CAS1 CAS2 中断屏蔽寄存器 IMR SP/ EN 内部总线 图(b)8259A内部结构方框图
8259A的内部结构 • 数据总线缓冲器 • D7 ~ D0 三态双向8位缓冲器,接数据总线低8位 • 可通过总线驱动器 • 读写控制逻辑 • RD WR CS A0 • 在IBM-PC/XT中,只有一个8259A 地址为20H 21H • 在386/486等中,有两个8259A 地址为 20H 21H和0A0H 0A1H • 控制逻辑
8259A的内部结构(续) • 级联缓冲/比较器 • 如中断源多于8个,可用几个8259A级联,此时,主片的CAS2 ~ CAS0作输出,从片的CAS2 ~ CAS0作输入,从片的INT接到主片的IRi,级联时,SP=1为主片,SP=0为从片。 • 缓冲方式:8259A的数据线通过总线驱动器(’245等)与CPU的数据总线相连 • 此时,SP/EN作输出端用,以控制数据传输的方向 • 非缓冲方式:如不通过总线驱动器,即非缓冲方式,此时,SP/EN作为输入端,用作定义主从8259A芯片(SP = 0 从片,SP = 1 主片) • 如只有一片8259A,则SP/EN恒接1
8259A的内部结构(续) • 中断请求寄存器IRR • 8位寄存器,对应IR7 ~ IR0,如某个外设有中断请求,则相应位置1,并通知控制逻辑 • 如该中断被响应后,相应的请求位清0 • 允许多位同时被置1 • 中断屏蔽寄存器IMR • 8位寄存器,可由软件设定某位或某几位为’1’,即相应的中断被屏蔽,即使该位的IRR已置位,也不会进入中断优先级判别器PR • 优先级判别器PR • 对IRR中置’1’的中断请求,根据IMR中的情况判别其优先级,对于优先级最高的,8259A发出INT信号,在CPU发出第一个INTA后置相应的ISR为’1’并清相应的IRR为’0’
8259A的内部结构(续) • 现行服务寄存器ISR • 8位寄存器,如某中断被执行,则相应的位置’1’,直止该中断服务结束,即执行EOI操作后将被清’0’ • 在中断嵌套时,ISR中有多位被置’1’ • 控制电路 • 根据IRR、IMR及PR判定优先级并向CPU发INT信号 • 接收到CPU第一INTA信号后,清IRR中相应位并置ISR中的相应位 • 接收到CPU第二个INTA信号后,送出中断类型号
8259A的编程结构 • 初始化命令字ICW • ICW1(芯片控制初始化命令字) • ICW2(设置中断类型号初始化命令字) • ICW3(主从片标志初始化命令字) • ICW4(方式控制初始化命令字) • 操作命令字OCW • OCW1(中断屏蔽操作命令字) • OCW2(优先级轮换和中断结束方式操作命令字) • OCW3(特殊屏蔽和查询方式操作命令字)
初始化命令字ICW1 • 芯片控制初始化命令字 8080/8085用 中断向量A7~A5 偶地址 恒为1 0:中断向量间址8 1:中断向量间址4 0:边沿触发 1:电平触发 0:不需要ICW4 1:需要ICW4 0:多片8259 1:单片8259 当A0 = 0(偶地址) ,且D4 = 1时,为写ICW1 其中:LTIM:Level Triggered Interrupt Mode
初始化命令字ICW2 • 设置中断类型号初始化命令字 中断类型高5位 奇地址 当A0 = 1(奇地址),为写ICW2 如T7 ~ T3为00001时,对应8259A的IR7 ~ IR0的中断类型号为:0FH ~ 08H 当CPU发出第二个INTA时,8259A将把IR7 ~ IR0中提出中断请求的序号(7 ~ 0)作为T2 ~ T0组成一个完整的中断类型号送入数据总线(D7 ~ D0)
初始化命令字ICW3 • 主从片标志初始化命令字 主片: 奇地址 0:相应的IR上无从片 1:相应的IR上有从片 从片: 主片相应的 i 端口号 奇地址 当A0 = 1(奇地址),为写ICW3 如主片上IR2上接有从片,则:主片的ICW3为04H;从片的ICW3为02H ICW3仅在级联方式时,即当ICW1中SNGL(D1) = 0时才需要设置
初始化命令字ICW4 • 方式控制初始化命令字 恒为0 奇地址 0X: 非缓冲方式 10: 缓冲方式(从)11: 缓冲方式(主) 0:8080/8085 1:8086/8088 0:特殊全嵌套方式 1:常规全嵌套方式 0:正常结束中断 1:自动结束中断 当A0 = 1(奇地址) ,为写ICW4 ICW4仅在需要设置时,即在ICW1中的IC4(D0)= 1时,才设置
ICWi的设置顺序 • 复位后,只能进行一次初始化 • 置8259A的初始化命令字必须按此顺序:
操作命令字OCW1 • 中断屏蔽操作命令字 0:允许IRi端的中断请求(中断允许) 1:屏蔽IRi端的中断请求(中断屏蔽) 奇地址 当A0 = 1(奇地址),为写OCW1 中断屏蔽操作命令字被保存在IMR(中断屏蔽寄存器)中
操作命令字OCW2 • 优先级轮换和中断结束方式操作命令字 偶地址 对应的中断请求号 标志位