830 likes | 1.08k Views
第 5 章 中断技术. 5.1 中断基本概念. 中断结束. 中断请求. 中断响应. 中断服务. 中断处理. 5.1.1 中断基本概念. 定义: CPU 暂停现行程序,转而处理随机到来的事件,待处理完后再回到被暂停的程序继续执行,这个过程就是中断。. 中断过程:. 中断处理的隐操作: 程序状态及程序断点地址的进栈及出栈。. 中断系统其他功能:. 支持多中断源和多种中断源。. 支持中断屏蔽处理。. 支持中断嵌套处理。. 支持中断优先级修改。. 支持中断结束方式选择。. 5.1.2 中断类型. SIO LPC47B27X. SERIRQ.
E N D
5.1 中断基本概念 中断结束 中断请求 中断响应 中断服务 中断处理 5.1.1 中断基本概念 定义:CPU暂停现行程序,转而处理随机到来的事件,待处理完后再回到被暂停的程序继续执行,这个过程就是中断。 中断过程: 中断处理的隐操作:程序状态及程序断点地址的进栈及出栈。
中断系统其他功能: 支持多中断源和多种中断源。 支持中断屏蔽处理。 支持中断嵌套处理。 支持中断优先级修改。 支持中断结束方式选择。
5.1.2 中断类型 SIO LPC47B27X SERIRQ 中断类型号 IRQx … 82801BA 82815EP PIRQx INTR PII/III CPU 1.外部硬件(如键盘、鼠标,串口,并口打印机等)中断 属性:硬件、可屏蔽、向量。 中断请求:多个中断请求的排队和判优由中断控制器完成,产生的有无中断请求的信号送到CPU的INTR引脚。 中断类型号:通过数据总线送到CPU中。 EFLAGS寄存器的IF位影响CPU对中断请求的响应。 处理器在当前指令执行结束的时候启动中断识别INTA总线周期。
2.不可屏蔽中断 属性:硬件、不可屏蔽、向量。 中断请求:中断请求的信号送到CPU的NMI引脚。 中断类型号:固定为2。 CPU不需要进行中断识别,直接处理中断。 NMI由0跳变到1以后要维持至少4个连续的处理器时钟周期的高电平才被识别。 NMI由1跳变到0以后要维持至少4个连续的处理器时钟周期的低电平,新的NMI中断才能被识别。
3.软件中断 属性:软件、不可屏蔽、向量。 中断请求:指令执行中或程序调用产生。 中断类型号:CPU规定或指令给出。 CPU专用中断:除0错(0)、单步(1)、断点中断(3)、溢出(O(4))、边界越界中断(5)。 BIOS中断:I/O设备控制、实用服务、特殊中断、专用参数中断。 DOS中断:公开/未公开、可调用、系统功能。 自由中断:未定义(20H~3FH中未使用的中断)。 CPU不需要进行中断识别,直接处理中断。
常用的软件中断 BIOS、DOS、自由中断的汇编调用方式: INT n ; n为中断向量号,如 INT 10H、INT 21H
常用的DOS系统功能调用 功能号 功能 入口参数 出口参数 01H 键盘输入 (AH)=1 (AL)=输入字符 02H 显示器输出 (AH)=2 无 (DL)=欲输出字符 09H 显示字符串 (AH)=9 无 (DS:DX)=字符串首址 字符串以‘$’结束 0AH 输入字符串 (AH)= 0AH (DS:DX)所指 (DS:DX)=输入缓 缓冲区中为 冲区首址 输入的字符串 4CH 返回调用 (AH)=4CH 无 进程
软中断调用的基本方法如下: 1、子功能号送AH寄存器; 2、按要求设置所有入口参数; 3、发送 INT n 软中断指令。 BIOS中断调用示例 设置屏幕显示方式为640×480 16色图形方式 MOV AH, 0 ; 子功能号 MOV AL, 12H ; 调用参数 INT 10H ; BIOS 的视频服务中断
BIOS中断调用示例 欲打印字符‘S’,相应的系统调用如下: MOV AH,1 ;初始化打印机子功能号 MOV DX,0 ;打印机号 INT 17H;初始化打印机 MOV AH, 0 ;打印机子功能号 MOV DX, 0 ;打印机号 MOV AL, 'S' ;欲打印的字符 INT 17H ;打印‘S’
单个字符输入示例 读入一个字符,若是‘Y’,则Z<--X+Y;否则 Z<--X-Y MOV AH, 01H ;输入字符 INT 21H ;DOS功能调用 CMP AL, ‘Y’ ;比较 JZ ADDT MOV BX, X SUB BX, Y JMP NEXT ADDT: MOV BX, X ADD BX, Y NEXT: MOV Z, BX
单个字符输出示例 MSG DB ‘How are you!’,’$’ LEN EQU $-MSG;$表示本语句的有效地址 MOV CX, LEN ;序列长度 MOV SI, 0 MOV AH, 02H ;输出一个字符 LP: MOV DL, MSG[SI] INT 21H INC SI ;修改指针 LOOP LP 字符串输出示例 MOV AX, SEG MSG MOV DS, AX LEA DX, MSG MOV AH,09H INT 21H 如何输出的更简单?
字符串输入示例 该子功能调用前,在数据段中必须定义一个缓冲区: N EQU 20 MAXLEN DB N ;缓冲区最大长度 ACTLEN DB ? ;缓冲区实际字符个数 STRING DB N DUP(?) ;N个字符空间 …… MOV AH, 0AH LEA DX, MAXLEN INT 21H 说明: 1)缓冲区可接受的字符个数为1~255 2)缓冲区的第3个字节开始存放输入的字符,前2个字节位置分别放缓冲区长度和字符串实际字符数
4.内部中断和异常 属性:软件、不可屏蔽、向量。 中断请求:指令执行中产生。 中断类型号:CPU规定。 失效:错误在指令完成前,错误指令的CS:EIP压栈。该指令会重做。 陷阱:错误在指令完成后,错误指令下一指令的CS:EIP压栈。 中止:不保存,重启机器。 CPU不需要进行中断识别,直接处理中断。
5.1.3 中断识别及其优先级 1.中断识别 只有外部硬件中断需要进行识别,其余不需要识别。 中断识别由中断控制器完成。 2.中断优先级 原则:按机器故障、DMA、外围硬件、软件递减。 结果:CPU专用>DMA>外围硬件>BIOS>DOS>自由。 即基本按中断向量表排序。 外围硬件一般可由用户修改其优先权。
5.1.4 中断响应 在当前指令结束后,可屏蔽中断根据EFLAGS寄存器IF位决定是否响应;其他中断给予响应。 中断响应的步骤如下: 1.保护断点 通过堆栈及相关硬件实现EFLAGS、CS、EIP的保护。并清除IF和TF。 压栈的顺序是EFLAGS、CS、EIP 2.取得中断类型号 对外部硬件中断通过中断响应周期取得中断类型号。 非外部硬件中断直接取得入口地址,无须第2步
3.取得中断服务程序入口地址 对向量中断,通过中断类型号查中断向量表或中断描述符表取得。 4.转入中断处理程序 从中断处理程序入口地址转到中断处理程序。执行对中断的处理。 5.返回断点 恢复断点(EIP、CS、EFLAG顺序出栈)继续执行主程序。
5.1.5 PC机中断向量表(IVT,用于实地址模式) 1.中断向量 对应中断类型号的中断服务程序入口地址。 每个中断向量占4字节。 2.中断向量表 按中断类型号顺序存放中断向量的存储区域。 位于内存地址0000 : 0000开始的1KB范围内。 3.中断向量指针 指向存放中断向量地址第一字节的指针。 中断向量指针=中断类型号×4。 软件中断中自由中断的中断向量需用户自己装入。
Pentium的中断向量表在存储区的最低1KB字节中,对应256种中断,每个中断向量占4个字节Pentium的中断向量表在存储区的最低1KB字节中,对应256种中断,每个中断向量占4个字节 00000 类型0的IP 类型0的CS 00004 类型1的IP 类型1的CS 4*N 类型N的IP 类型N的CS 类型0的中断向量 类型1的中断向量 类型N的中断向量
5.1.6 中断描述符表(IDT,用于保护模式) 1.中断描述符表(IDT) 表项长度:8字节,每个表项对应一个中断类型号。 表项类型:任务门、中断门、陷阱门。 通过特征位(b40~b44)区分不同类型。
表的位置:由中断描述符表寄存器(IDTR)指向。 表的长度:8字节×256=2KB。 2.中断描述符指针 指向中断描述符表中的中断描述符的指针。 中断描述符指针=IDT基地址+中断类型号×8。 3.中断门/陷阱门 内容:段选择符、属性和偏移量。 中断门与陷阱门区别: 通过中断门处理时EFLAG的IF被清0,通过陷进门处理IF不清0。 中断门的优先级比陷阱门高,是面向外部硬件中断的门,后者面向优先级低的中断。
中断服务子程序入口地址取得: 中断类型号 CS段描述符缓冲器 7 0 IDT GDT/LDT IDTR 代码段 段描述符 段基地址 中断门/陷阱门 ×8 CS 偏移 选择符 基地址 属性 属性 EIP 中断服务子程序 偏移 边界 中断描述符 …… …… 线性地址 段描述符
4.任务门 内容:TSS选择符与属性。 TSS取得: 中断类型号 TR描述符缓存器 7 0 IDT GDT IDTR 任务门 TSS描述符 ×8 TR 基址 基址 TSS 选择符 段限 TSS 属性 …… …… 线性地址 优点:中断任务和被中断任务完全隔离。 缺点:中断响应过程耗时长。
5.2 Intel 8259A 5.2.1 8259A主要任务 接受外部的中断请求; 管理所有外部的中断请求(排队、判优、屏蔽、嵌套); 向CPU产生中断请求INTR信号及中断类型号; 进行中断结束处理; 接受CPU命令及返回状态。
CS; RD、WR、A0; INT、INTA; SP/EN、 CAS0~CAS2。 5.2.2 8259A引脚及内部结构 1.8259A引脚 CPU侧: DB0~DB7; 外设侧: IR0~IR7; 级联:
接口电路:CPU接口、I/O接口。 … D0 D7 ISR编码 ≥1 中断屏蔽寄存器IMR 中断请求寄存器IRR IR0 比 较 器 B0 B1 B2 A>B A0 A1 A2 中断请求优先级编码器 & INT … … & & & & & & & & IR7 内部逻辑:IRR、IMR、PR、ISR及控制电路。 中断请求过程:IR->INT。
第一个INTA,CPU封锁总线(LOCK有效),8259A最高优先级请求对应ISR位置位,对应IRR复位。第一个INTA,CPU封锁总线(LOCK有效),8259A最高优先级请求对应ISR位置位,对应IRR复位。 第二个INTA,总线解锁,ALE无效,8259A将当前中断服务程序对应中断类型号送到数据总线上。 CPU响应可屏蔽中断条件: 当前指令执行完毕; EFLAGS中IF=1; INTR信号有效。 中断响应过程:8259向CPU送中断类型号。 ISR的复位在自动结束/非自动结束时不一致。 DMA传送方式比中断方式速度快(响应与传送)。 回ICW3
级联方式结构: 级联2 级联1 级联3
3.8259A工作方式 中断请求方式: 边沿触发方式:正跳变向8259A请求中断。 电平触发方式:高电平向8259A请求中断,响应中断后要及时清除高电平。 查询中断方式:外设向8259A请求中断,但8259A不向CPU发中断请求信号INT。而是将请求状态保存等待CPU来查询。 PC机初始化为边沿触发
非缓冲方式:小系统中,8259A数据线直接连系统数据总线,不需要总线缓冲器,此时SP/EN表示级联时主/从关系。非缓冲方式:小系统中,8259A数据线直接连系统数据总线,不需要总线缓冲器,此时SP/EN表示级联时主/从关系。 主片:SP/EN接高电平; 从片:SP/EN接低电平。 缓冲方式:大系统中,数据总线都具有总线缓冲器,此时SP/EN表示数据传送方向,级联时主/从关系通过软件设定ICW4来决定。 连接总线与级联方式: PC机初始化为非缓冲方式
屏蔽方式: 缺省特性:自动屏蔽低于自己优先级的IR。 正常屏蔽:IMR中相应位置位; 特定屏蔽:开放比自己优先级低的IR。 优先级管理方式: 缺省特性:IR0~IR7的优先级为一循环队列。 固定优先权:从IR0~IR7降序; 轮转优先权: 自动轮转:刚被服务的IR的优先级降至最低; 指定轮转:指定的IR的优先级降至最低。 PC机初始化为缺省屏蔽特性,固定优先权
嵌套方式: 全嵌套:禁止同优先级和低优先级请求发生; 特殊全嵌套:禁止低优先级请求发生。 应用:级联时主片特殊全嵌套,从片全嵌套。 结束方式(ISR复位方式): 自动:中断响应后ISR中最高优先级位自动复位; 非自动:中断服务程序返回前,需要处理程序发出对ISR中相应位复位的中断结束命令; 不指定方式:ISR中最高优先级位复位; 指定方式:命令中指定的ISR中相应位复位。 级联结构 PC机初始化为全嵌套,非自动结束方式
4.8259A的操作功能及命令 I/O端口地址:只提供二个端口(使用A0区别); 命令:初始化--ICW1~ICW4, 操 作--OCW1~OCW3。 状态:IRR、ISR、IMR、查询字。 I/O端口操作冲突时解决方法: 信息字节中有空闲位时:特征位方法; 信息字节中无空闲位时:时序方法、读/写区分法。
8259A命令关系表(地址以PC机中为例): 注:ICWx只有在初始化过程中才会出现。
(1)初始化命令ICW1 特征位:D4=1; 初始化命令ICW4主要设定嵌套、缓冲、结束方式,缺省值为全嵌套、非缓冲、非自动结束方式。 当SNGL=0,需要初始化命令ICW3来设置级联项。
(2)初始化命令ICW2 时序: ICW1→ICW2→[ICW3]→[ICW4]。 IRi的中断类型号 = ICW2的高5位+i 例:如果ICW2为08H,则 IR3的中断类型号(中断向量)为08H+03H=0BH。 思考题:如果一个中断的类型号是16H,请问该中断接在IR几?该8259初始化的ICW2是多少?
(3)初始化命令ICW3 级联结构 级联方式结构设置: 需要分别对主片和从片进行设置。 主片:S7~S0分别对应相应的IR号的引脚,为1的位对应的引脚接有从片; 从片:ID2~ID1的编号是该从片接到主片的IR引脚的IR号。
主 片:MOV AL, 14H OUT 21H,AL 主片响应:收到第一个INTA后,对从片的IR请求,在第一个INTA下降沿从CAS线送出该IR编码;否则,在第二个INTA返回中断类型号。 从片响应:通过CAS线译码,选中时在收到第二个INTA后,返回中断类型号。 从片1:MOV AL, 04H OUT 0A1H,AL 级联结构 从片2:MOV AL, 02H OUT 0C1H,AL 级联方式中断请求及响应过程: 非级联响应 主片请求:与非级联一致。 从片请求:与非级联一致,但其INT送到主片,服从主片的请求规则。
(4)初始化命令ICW4 D0:用于8位(0)/16位(1)微机; D1:非中断自动结束(0)/自动结束(1)方式; 从片非自动结束时,主、从片均需发EOI命令。 D2:缓冲方式(D3=1)时的主从片级联位置设置, 从片(0)/主片(1) ; D3:非缓冲(0)/缓冲(1)方式; D4:全嵌套(0)/特殊全嵌套(1)方式。
(5)操作命令OCW1 特征位:无,时序:无。 功能:写中断屏蔽寄存器IMR 实际上改变了中断优先级(屏蔽掉高优先级的中断请求)。 对IMR的读取在21H(主)、0A1H(从)端口做读操作。
(6)操作命令OCW2 特征位:D4D3=00; 功能:结束方式和优先权轮转管理; 结束方式管理: D6D5=×0,自动结束,硬件自动清除ISR的相应位; D6D5=01,非自动结束[命令不指定清ISR的哪一位]; D6D5=11,非自动结束[命令指定清ISR的哪一位]。 优先权管理: D7=0,优先权固定;D7=1,优先权轮转。 D6的含义仍然有效
例:MOV AL, 20H OUT 20H,AL的含义?
(7)操作命令OCW3 特征位:D4D3=01;
查询字格式: I=0,无中断请求; I=1,有中断请求。 W2~W0,正在申请中断的若干中断源中优先级最高的中断源的编码。
特定屏蔽管理: 设置方法: 用OCW1屏蔽部分IR[含自己], 用OCW3置SMM即可。 取消方法: 用OCW3取消特定屏蔽, 用OCW1取消被屏蔽的IR。
out 20h(a0h), al 5.2.3 8259A初始化编程 1.初始化编程步骤 out 21h(a1h), al out 21h(a1h), al out 21h(a1h), al
2.初始化编程 注意点: • 不同8259A的I/O端口地址不同; • 8259A级联时,每个8259A均必须有完整的初始化过程[端口地址和部分参数不同而已]; • 全嵌套方式时,初始IR优先级IR0最高。
例: INTM00 EQU 020H ;8259A端口0 INTM01 EQU 021H ;8259A端口1 …… MOV AL, 00010011B ;ICW1:边沿触发,要ICW4; ;单片方式,不要ICW3。 OUT INTM00, AL JMP SHORT $+2 ;I/O端口延时 MOV AL, 00001000B ;ICW2:设置中断向量,起始的 ;中断向量为08H。 OUT INTM01, AL JMP SHORT $+2 MOV AL, 00000001B ;ICW4:非缓冲,全嵌套,非自 ;动中断结束(EOI)。 OUT INTM01, AL JMP SHORT $+2 ……
思考题: MOV AL, 13H OUT 20H, AL MOV AL, 08H OUT 21H, AL MOV AL, 02H OUT 21H, AL MOV AL, 12H OUT 20H, AL MOV AL, 08H OUT 21H, AL MOV AL, 02H OUT 21H, AL 问:以上左右两段对8259的访问程序中,最后一句分别是发的什么命令?