第7章 中断与异常
7.1 中断基本概念 7.1.1 中断基本概念 定义:CPU暂停现行程序,转而处理随机到来的事件,待处理完后再回到被暂停的程序继续执行,这个过程就是中断。 中断过程: 中断服务 中断响应 中断结束 中断请求 中断处理 中断处理的隐操作:程序状态及程序断点地址的进栈及出栈。
中断系统其他功能: 支持多中断源和多种中断源。 支持中断屏蔽处理。 支持中断嵌套处理。 支持中断优先级修改。 支持中断结束方式选择。 屏蔽中断请求
7.1.2 中断与异常类型 1.外部硬件(如键盘、鼠标,串口,并口打印机等)中断 属性:硬件、可屏蔽、向量。 中断请求:多个中断请求的排队和判优由中断控制器完成,产生的有无中断请求的信号送到CPU的INTR引脚。 中断类型号:通过数据总线送到CPU中。 SIO LPC47B27X … IRQx 82801HB SERIRQ 82G965 Pentium 4/Conroe INTR 中断类型号 PIRQx 屏蔽中断请求响应,IF通过CLI/STI清零/置位 EFLAGS寄存器的IF位影响CPU对中断请求的响应。 处理器在当前指令执行结束的时候启动中断识别INTA总线周期。
中断请求:中断请求的信号送到CPU的NMI引脚。 属性:硬件、不可屏蔽、向量。 中断请求:中断请求的信号送到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不需要进行中断识别,直接处理中断。
4.内部中断和异常 属性:软件、不可屏蔽、向量。 中断请求:指令执行中产生。 中断类型号:CPU规定。 故障 (失效):错误在指令完成前,错误指令的CS:EIP压栈。该指令会重做。 陷阱:错误在指令完成后,错误指令下一指令的CS:EIP压栈。 异常中止:不保存,重启机器。 CPU不需要进行中断识别,直接处理中断。
7.2 Intel 8259A 7.2.1 8259A主要任务 接受外部的中断请求; 管理所有外部的中断请求(排队、判优、屏蔽、嵌套); 向CPU产生中断请求INTR信号及中断类型号; 进行中断结束处理; 接受CPU命令及返回状态。
7.2.2 8259A引脚及内部结构 1.8259A引脚 CPU侧: CS#; DB0~DB7; RD#、WR#、A0; INT、INTA#; 外设侧: IR0~IR7; 级联: SP#/EN#、 CAS0~CAS2。
2.8259A内部结构 I/O接口包含级联/缓冲比较器
内部逻辑:IRR、IMR、PR、ISR及控制电路。 接口电路:CPU接口、I/O接口。 内部逻辑:IRR、IMR、PR、ISR及控制电路。 中断请求过程:IR->INT。 & INT ISR编码 中断请求优先级编码器 中断请求寄存器IRR IR0 IR7 … 中断屏蔽寄存器IMR D0 D7 ≥1 比 较 器 B0 B1 B2 A>B A0 A1 A2 有一个电路存放当前最高优先级对应IR,下一个IR优先级次之,为循环链。 优先级编码器选择从最高优先级IR到最低IR的最近一个有请求的IR编码(非IR号)。 ISR中正在和被打断服务的中断均置位 ISR编码为正在服务的优先权编码,非IR号
第一个INTA#,CPU封锁总线(LOCK#有效),8259A最高优先级请求对应ISR位置位,对应IRR复位。 当前指令执行完毕; EFLAGS中IF=1; INTR信号有效。 中断响应过程:8259向CPU送中断类型号。 第一个INTA#,CPU封锁总线(LOCK#有效),8259A最高优先级请求对应ISR位置位,对应IRR复位。 第二个INTA#,总线解锁,ALE无效,8259A将当前中断服务程序对应中断类型号送到数据总线上。 ISR的复位在自动结束/非自动结束时不一致。 回ICW3
级联方式结构: 级联1 级联2 级联3
3.8259A工作方式 中断请求方式: 边沿触发方式:正跳变向8259A请求中断。 电平触发方式:高电平向8259A请求中断,响应中断后要及时清除高电平。 查询中断方式:外设向8259A请求中断,但8259A不向CPU发中断请求信号INT。而是将请求状态保存等待CPU来查询。 PC机初始化为边沿触发
连接总线与级联方式: 非缓冲方式:小系统中,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只有在初始化过程中才会出现。 PIC1 PIC2 操作 内容 特征位 时序 D4D3D2 20H 0A0H 写 ICW1 1×× 无 OCW2 00× OCW3 01× 21H 0A1H ICW2~ICW4 在初始化期间,ICW1之后ICW2→ICW4 OCW1 非初始化期间 读 IRR,ISR 查询字 OCW3决定 IMR 注:ICWx只有在初始化过程中才会出现。
(1)初始化命令ICW1 特征位:D4=1; 初始化命令ICW4主要设定嵌套、缓冲、结束方式,缺省值为全嵌套、非缓冲、非自动结束方式。 当SNGL=0,需要初始化命令ICW3来设置级联项。
(2)初始化命令ICW2 IRi的中断类型号 = ICW2的高5位+i 时序: ICW1→ ICW2→[ICW3]→[ICW4]。 例:如果ICW2为08H,则 IR3的中断类型号(中断向量)为08H+03H=0BH。 思考题:如果一个中断的类型号是16H,请问该中断接在IR几?该8259初始化的ICW2是多少?
主片:S7~S0分别对应相应的IR号的引脚,为1的位对应的引脚接有从片; (3)初始化命令ICW3 级联方式结构设置: 级联结构 需要分别对主片和从片进行设置。 主片:S7~S0分别对应相应的IR号的引脚,为1的位对应的引脚接有从片; 从片:ID2~ID1的编号是该从片接到主片的IR引脚的IR号。
从片请求:与非级联一致,但其INT送到主片,服从主片的请求规则。 主 片:MOV AL, 14H OUT 21H,AL 从片1:MOV AL, 04H OUT 0A1H,AL 级联结构 从片2:MOV AL, 02H OUT 0C1H,AL 级联方式中断请求及响应过程: 非级联响应 主片请求:与非级联一致。 主片响应:收到第一个INTA#后,对从片的IR请求,在第一个INTA#下降沿从CAS线送出该IR编码;否则,在第二个INTA#返回中断类型号。 从片请求:与非级联一致,但其INT送到主片,服从主片的请求规则。 从片响应:通过CAS线译码,选中时在收到第二个INTA#后,返回中断类型号。
(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的含义? R SL EOI 0 0 L2 L1 L0 功能 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 自动EOI、优先权固定命令 0 0 1 0 0 0 0 0 非自动EOI[不指定] 、优先权固定命令 0 1 1 0 0 L2 L1 L0 非自动EOI[指定] 、优先权固定命令 1 0 0 0 0 0 0 0 自动EOI、优先权自动轮转命令 1 0 1 0 0 0 0 0 非自动EOI[不指定] 、优先权自动轮转命令 1 1 1 0 0 L2 L1 L0 非自动EOI[指定] 、优先权指定轮转命令 1 1 0 0 0 L2 L1 L0 自动EOI、优先权指定轮转命令 例:MOV AL, 20H OUT 20H,AL的含义?
(7)操作命令OCW3 特征位:D4D3=01; P RR RIS 功能 应用 0 1 0 读取IRR内容 MOV AL, 0AH 0 1 0 读取IRR内容 MOV AL, 0AH OUT 20H,AL IN AL,20H 0 1 1 读取ISR内容 MOV AL, 0BH 0 0 × 不读取任何寄存器内容 1 × × 读取查询字信息 MOV AL, 0CH OUT 20H, AL IN AL, 20H
W2~W0,正在申请中断的若干中断源中优先级最高的中断源的编码。 查询字格式: I=0,无中断请求; I=1,有中断请求。 W2~W0,正在申请中断的若干中断源中优先级最高的中断源的编码。
特定屏蔽管理: ESMM SMM 功能 0 × 该操作对特定屏蔽无效 1 0 取消特定屏蔽 1 1 设置特定屏蔽 设置方法: 用OCW1屏蔽部分IR[含自己], 用OCW3置SMM即可。 取消方法: 用OCW3取消特定屏蔽, 用OCW1取消被屏蔽的IR。
7.2.3 8259A初始化编程 out 20h(a0h), al 1.初始化编程步骤 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)。
问:以上左右两段对8259的访问程序中,最后一句分别是发的什么命令? 思考题: MOV AL, 12H OUT 20H, AL MOV AL, 08H OUT 21H, AL MOV AL, 02H MOV AL, 13H OUT 20H, AL MOV AL, 08H OUT 21H, AL MOV AL, 02H 问:以上左右两段对8259的访问程序中,最后一句分别是发的什么命令? 左边是写中断屏蔽寄存器,右边是写ICW4
5.2.4 微机中8259A应用(D31:F0) 1.PC机系统板上8259A的连接 1 15 A5 A Y0# 2 14 A6 B 3 IOW# RD# 1 15 A5 A Y0# IOR# 接8288总线控制器 WR# 2 14 A6 B CS# INTA# 3 13 INTA# A7 C 12 INTR 74LS138 INT 接CPU 5 11 A8 G2B# 8259A IR[7..0] 4 10 A9 G2A# 接中断源 9 6 DB[7..0] AEN# G1 7 Y7# 接数据线 A0 A0 接地址线 中断控制器8259A的端口地址为20H、21H
2.现代微机中ICH8中8259A级联 注意: 主、从区分; IRQ优先级; 请求与响应。
;对主片8259A的初始化 INTM00 EQU 020H ;主8259A端口0 INTM01 EQU 021H ;主8259A端口1 …… MOV AL, 00010001B ;ICW1:边沿触发,要ICW4;级联方式,要ICW3。 OUT INTM00, AL JMP SHORT $+2 ;I/O端口延时 MOV AL, 00001000B ;ICW2:设置主片的中断向量,起始的中断向量为08H OUT INTM01, AL JMP SHORT $+2 MOV AL, 00000100B ;ICW3:表示从8259A的INT输出是连接到主片的IR2。 MOV AL, 00010001B ;ICW4:非总线缓冲,特殊全嵌套,非自动EOI
;对从片8259A的初始化 INTS00 EQU 0A0H ;从8259A端口0 INTS01 EQU 0A1H ;从8259A端口1 …… MOV AL, 00010001B ;ICW1边沿触发,要ICW4;级联方式,要ICW3。 OUT INTS00, AL JMP SHORT $+2 MOV AL, 01110000B ;ICW2:设置从片的中断向量,起始的中断向量为70H OUT INTS01, AL MOV AL, 00000010B ;ICW3:设置从片的识别标志,指定对应主片的IR2。 MOV AL, 00000001B ;ICW4:非总线缓冲,全嵌套,非自动中断结束。
3.现代微机中断请求线连接 8259 引脚 类型号 典型的中断源 被连接的引脚/功能 主片 8H 内部 内部时钟/计数器0的输出 1 9H 8H 内部 内部时钟/计数器0的输出 1 9H 键盘 通过SERIRQ来的IRQ1 2 0AH 从控制器的级联引脚 3 0BH 串行端口2 通过SERIRQ来的IRQ3 4 0CH 串行端口1 通过SERIRQ来的IRQ4 5 0DH 并行端口/普通 通过SERIRQ来的IRQ5 6 0EH 软磁盘 通过SERIRQ来的IRQ6 7 0FH 通过SERIRQ来的IRQ7 返回下页
8259 引脚 类型号 典型的中断源 被连接的引脚/功能 从片 70H 内部实时时钟 内部RTC 1 71H 普通 通过SERIRQ来的IRQ9 2 72H 通过SERIRQ来的IRQ10 3 73H 通过SERIRQ来的IRQ11 4 74H PS/2鼠标 通过SERIRQ来的IRQ12 5 75H 内部 基于处理器FERR#的状态机输出 6 76H 基本IDE电缆 从输入信号来或通过SERIRQ来的IRQ14 7 77H 第二IDE电缆 从输入信号来或通过SERIRQ来的IRQ15 SIO LPC47B27X … IRQx 82801HB SERIRQ CPU INTR IRQ14,15 转上页 返回PCI中断
7.3 现代微机中的中断处理 7.3.1 中断响应过程 在当前指令结束后,可屏蔽中断根据EFLAGS寄存器IF位决定是否响应;其他中断给予响应。 中断响应的步骤如下: 1.保护断点 通过堆栈及相关硬件实现EFLAGS、CS、EIP的保护。并清除IF和TF。 压栈的顺序是EFLAGS、CS、EIP 2.取得中断类型号 中断类型号与IRQ不对应。 对外部硬件中断通过中断响应周期取得中断类型号。 非外部硬件中断直接取得入口地址,无须第2步
3.取得中断服务程序入口地址 对向量中断,通过中断类型号查中断向量表或中断描述符表取得中断服务程序的入口地址。 4.转入中断处理程序 从中断处理程序入口地址转到中断处理程序。执行对中断的处理。 5.返回断点 恢复断点(EIP、CS、EFLAG顺序出栈)继续执行主程序。
7.3.2 现代微机中断控制 82801HB PCI INTA 内部逻辑 两个 INTA# 82G965 CPU总线 中断类型号 INTA# INTR 酷睿 CPU IRQ
在上面的过程中有几点注意: 一个或多个IRQ到来的时候,置中断请求寄存器IRR的相应位 。如果中断没有被屏蔽,才可以发INTR。 82801HB内部产生两个周期INTA#后,第一个INTA#脉冲,有最高优先级的ISR的相应位被置上,而IRR的相应位被复位。第一个脉冲的下降沿,主中断控制器利用内部3根专用线CAS向从中断控制器发送从片识别码。第二个INTA#脉冲后,主或从识别码选中的从可编程中断控制器返回中断类型号。 结束中断响应周期时,如果在自动中断结束(AEOI)模式下,则中断服务寄存器(ISR)的相应位在第二个INTA#脉冲的末尾被复位,否则ISR相应位保持置位直到中断处理程序末尾发出EOI命令。
7.3.3 中断识别及其优先级 1.中断识别 只有外部硬件中断需要进行识别,其余不需要识别。 中断识别由中断控制器完成。 2.中断优先级 原则:按机器故障、DMA、外围硬件、软件递减。 结果:CPU专用>DMA>外围硬件>BIOS>DOS>自由。 即基本按中断向量表排序。 外围硬件一般可由用户修改其优先权。
7.3.4 中断向量表和实地址模式下中断处理程序的编写 7.3.4 中断向量表和实地址模式下中断处理程序的编写 一、 PC机中断向量表(IVT,用于实地址模式) 1) 中断向量 对应中断类型号的中断服务程序入口地址。 每个中断向量占4字节。 2) 中断向量表 按中断类型号顺序存放中断向量的存储区域。 位于内存地址0000 : 0000开始的1KB范围内。 3) 中断向量指针 指向存放中断向量地址第一字节的指针。 中断向量表只有在实模式下使用。 中断向量指针=中断类型号×4。 软件中断中自由中断的中断向量需用户自己装入。
IA-32的中断向量表在存储区的最低1KB字节中,对应256种中断,每个中断向量占4个字节 类型0的向量指针 00000 类型0的IP 类型0的CS 00004 类型1的IP 类型1的CS 4*N 类型N的IP 类型N的CS 类型0的中断向量 类型1的向量指针 类型1的中断向量 类型N的向量指针 类型N的中断向量
二、 实模式下中断程序编写 1. 中断编程注意点 中断编程包括主程序部分和中断处理程序部分。 1)使用正确的中断类型号 二、 实模式下中断程序编写 1. 中断编程注意点 中断编程包括主程序部分和中断处理程序部分。 1)使用正确的中断类型号 根据中断处理程序要完成的功能,选择好正确的中断类型号,如:COM1串行通信用0CH号中断,Ctrl+Break键控制中断号是1BH,注意定时器中断一般不使用08H号,而使用更安全的1CH号中断。 如果是自己定义的软中断,注意不要和系统中断类型号相重合。
2)中断服务程序入口地址的正确设置(主程序中完成) 有两种设置中断服务程序入口地址(中断向量)的方法: 1)直接写中断向量表(假设中断向量是0CH) CLI ; 关中断 MOV AX, 0 MOV ES, AX ; ES指向0000H段(中断向量表的段) MOV SI, 0CH*4 ; 一个中断向量4个字节 MOV AX, OFFSET SERVICE ; 中断入口偏移地址 MOV ES:[SI], AX MOV AX, SEG SERVICE ; 中断入口的段地址 MOV ES:[SI+2], AX STI ; 开中断 …… ; 中断处理子程序 SERVICE PROC FAR 2)使用DOS功能调用中断 MOV AX, SEG SERVICE MOV DS,AX MOV DX,OFFSET SERVICE MOV AX,250CH INT 21H
3)适当地保护现场 由于中断随时到来,所以中断处理程序中一定要保护好需要使用的寄存器。如果使用的寄存器多,可以保护所有寄存器,如果寄存器用的不多,可只将要用的寄存器压栈。 4)避免非软件中断中断处理程序中DOS重入 DOS的重入容易引起系统瘫痪,所以在中断处理程序中要避免调用DOS功能调用,如果是对外设或屏幕的操作,改用BIOS中断,如果是文件操作,要到中断处理程序外的主程序中完成。 5)中断程序执行时间的正确估计 中断处理程序执行时间要小于中断到来的周期或最短间隔时间,中断处理程序里不要出现死循环、需要人工干预的人机交互和时间很长的循环语句。
中断响应的时候系统会自动将IF清0,如果希望中断能有限嵌套(高级与本级中断能嵌套)则在现场保护后,用STI指令将中断屏蔽打开。 6)中断的打开与关闭 中断响应的时候系统会自动将IF清0,如果希望中断能有限嵌套(高级与本级中断能嵌套)则在现场保护后,用STI指令将中断屏蔽打开。 7)中断结束处理及返回 a) 如果现场保护后,执行过STI,这恢复现场前要执行CLI关闭中断。 b) 如果是外部硬件中断,非自动结束模式下,恢复现场前应该发中断结束命令(EOI)。 MOV AL, 20H OUT 20H, AL ; 向主8259发EOI OUT 0A0H, AL ; 向从8259发EOI c) 恢复现场,使用和保护现场压栈顺序的逆序将寄存器的值弹出 d) 使用IRET中断返回指令返回
2. 中断处理程序举例(假设中断类型号是0CH) ; 主程序的相关部分 …… OLD0C DD ? CODE SEGMENT MOV AX, 350CH ; 保存原来的0CH中断向量 INT 21H MOV WORD PTR OLD0C,BX MOV WORD PTR OLD0C+2,ES MOV AX, SEG SERVICE ; 写入新的0CH中断向量 MOV DS,AX MOV DX,OFFSET SERVICE MOV AX,250CH …… ; 其它程序段
; 中断处理子程序 SERVICE PROC FAR PUSHA ; 保护现场 PUSH DS STI ; 打开中断 …… ; 中断处理程序主体 CLI ; 关闭中断 MOV AL, 20H OUT 20H, AL ; 发中断结束命令 POP DS ; 恢复现场 POPA IRET SERVICE ENDP
7.3.5 保护模式下中断与异常的处理 1.中断描述符表(IDT) 表项长度:8字节,每个表项对应一个中断类型号。 表项类型:任务门、中断门、陷阱门。 注意三个门的图中下面是0~3字节,上面是4~7字节 通过特征位(b40~b44)区分不同类型。
表的位置:由中断描述符表寄存器(IDTR)指向。 表的长度:8字节×256=2KB。 2.中断描述符指针 指向中断描述符表中的中断描述符的指针。 中断描述符指针=IDT基地址+中断类型号×8。 3.中断门/陷阱门 内容:段选择符、属性和偏移量。 中断门与陷阱门区别: 通过中断门处理时EFLAG的IF被清0,通过陷进门处理IF不清0。 系统地址寄存器组包括IDTR、GDTR、LDTR、TR。 中断门的优先级比陷阱门高,是面向外部硬件中断的门,后者面向优先级低的中断。
中断服务子程序入口地址取得: 中断描述符 段描述符 中断类型号 CS段描述符缓冲器 7 0 IDT GDT/LDT IDTR 代码段 7 0 IDT GDT/LDT IDTR 代码段 段描述符 中断门/陷阱门 段基地址 ×8 CS 偏移 选择符 基地址 属性 属性 EIP 中断服务子程序 中断描述符 偏移 边界 基地址:选择符->CS(由TI位选择GDT/LDT)->基地址 偏移:偏移->EIP …… …… 线性地址 段描述符
4.任务门 内容:TSS选择符与属性。 TSS取得: 优点:中断任务和被中断任务完全隔离。 缺点:中断响应过程耗时长。 中断类型号 TR描述符缓存器 7 0 IDT GDT IDTR 任务门 TSS描述符 ×8 TR 基址 基址 TSS 选择符 段限 TSS 属性 …… …… 任务切换:任务门或直接写TR 线性地址 优点:中断任务和被中断任务完全隔离。 缺点:中断响应过程耗时长。
7.4 PCI中断 7.4.1 PCI中断请求 PCI中断线:INTA#、INTB#、INTC#、INTD#。 PCI中断源:PIRQA#~PIRQD#。 PCI中断源连接:通过映射到ISA(8259)中断(3~7,9~12,14~15)来实现。 特点: 当PCI中断被映射到一个ISA的IRQ后,该IRQ不可再被ISA设备(通过SERIRQ的中断)使用。 互斥IRQ:3~7,9~12;14,15非SERIRQ中断 PCI中断可与低电平有效的非ISA中断共享同一IRQ。 转中断请求线
实现: 设备31的0号功能的60H~63H、68H~6BH的PIRQ路由控制寄存器实现PIRQA#~PIRQH#与IRQ的映射关系。 PIRQ#路由控制寄存器[8bit]存放的是IRQ编码。 PIRQA# PIRQB# PIRQC# PIRQD# 3 5 7 60H~63H 8259A IR0 IR3 IR5 IR7 PCI中断请求: PCI中断请求必须为低电平触发方式。 多个PIRQ#信号线能连在同一个IRQ上。 不同PIRQ#的优先级由IRQ决定。 同一PIRQ#不同设备INT#的优先级由安装次序决定。
7.4.2 PCI中断响应周期 PCI中断响应为单周期响应。 HOST-PCI桥自动将双中断响应周期转换成单中断响应周期。 其他中断响应过程与8259A同,中断类型号通过HOST-PCI桥再返回给处理器。 中断响应周期中可插入等待周期。 中断服务程序入口地址由中断描述符表或中断向量表管理。
CLK FRAME# 1 2 3 4 5 AD C/BE# IRDY# TRDY# 无效 向量 0000 BE#s(1110) DEVSEL # PCI中断响应周期 地址期没有地址,隐含的目标设备是系统中断控制器。一般它负责驱动DEVSEL#,也可由PCI-ISA桥进行负向译码。
7.4.3 PCI中断共享 ^ PCI中断请求信号为漏极开路的。 同一PIRQ#不同设备的优先级最后安装的最高。 采用链表式处理方法。 方法:PNP配置时将同一PIRQ#的原中断向量存放到其设备驱动的特定寄存器后才替换为新的中断向量。 中断向量 (描述符) 中断处 理程序 设备2 设备1 ^ PIRQA#
7.5 串行中断(自学) 7.5.1 串行中断结构 SERIRQ INTR SIO IRQx 82801BA LPC47B27X CPU … 7.5 串行中断(自学) 7.5.1 串行中断结构 SIO LPC47B27X SERIRQ INTR IRQx 82801BA CPU … PIRQx IRQ14,15 PIRQx … 82801BA 串行中断驱动部件 SERIRQ 串行中断分离部件 2个8259 部件 INTR IRQ14,15
SERIRQ包含IRQ0, 1, 3~15, PIRQA#~PIRQD#, SMI#和IOCHK#。但实际上并不支持IRQ0、8、13中断。实际的IRQ14、IRQ15实际上也不从SERIRQ中传到南桥。 SERIRQ线采用同步单线传输结构。 遵循PCI信号使用的三态协议。 S-取样阶段 信号为低电平。 R-恢复阶段 信号为高电平。 T-翻转状态 信号被释放 SERIRQ上信息分帧传输。
7.5.2 帧结构 1.开始帧 操作模式: 连续的(82801BA单独产生开始帧) 静态的(一个串行IRQ设备来启动开始帧) 长度:4、6或8个时钟宽度(设备31的0号功能配置空间的64H处串行IRQ控制寄存器位1和位0决定). 2.停止帧 长度:2或3个时钟宽度。(由SERIRQ配置寄存器决定) 含义:2—SERIRQ设备触发下次开始帧; 3—82801BA触发下次开始帧。
3.数据帧 长度:21个时钟宽度。 驱动:需请求中断的设备在自己的数据帧中将SERIRQ驱动: IRQ0~15在没有中断请求的时候将SERIRQ线驱动为低电平 PCI INT[A:D]#,SMI#和IOCHK#在有中断请求的时候将SERIRQ线驱动为低电平 否则都将SERIRQ线变为三态,由上拉电阻将他们驱动到高电平 。 所谓自己的数据帧是指在21个时钟中数据帧号和本设备的IRQ号码相等那一数据帧。外设要在SERIRQ的上升沿开始计算帧。
7.6 APIC(自学) 7.6.1 APIC子系统组成 1.组成 Local APIC、I/O APIC和APIC总线。 处理器核心 模块 I/O APIC 模块 INTIN 23 INTIN 0 系统中断请求 APIC 时钟 PICD0 PICD1 PICCLK LINT0/ INTR LINT1/ NMI 处理器0 处理器1 返回下页
经APIC总线送来的处理器间中断请求(IPI); Local APIC: 转上页 包含了8259A和8254的功能。 响应的中断: I/O APIC送来的系统中断请求; 经APIC总线送来的处理器间中断请求(IPI); 本地的中断请求(定时、错误、计数、连线)。 I/O APIC: 多达24个中断; 中断优先级与中断号独立; 不需要中断响应周期。 可选择某个或一组处理器中的一个为目标处理器。
组成:APICD0、APICD1、APICCLK。 类型:串行同步总线。 串行时序:不同时钟先高位,后低位;同一时钟D1高位,D0低位。 内容:EOI命令和短消息。 应用:连接的每个模块均有自己的ID(固定); 每个模块均有自己的仲裁ID(可变,初值来自模块ID)。 APICD1、APICD0为集电极开路门:见‘1’,APICD*为低电平;全‘0’,APIC*为高电平。
2.APIC中断类型 系统中断: 经I/O APIC模块引脚送入的中断请求。 交中断请求指定的目标处理器处理。 本地中断: 定时、计数、错误、INTR及NMI。 只能由本地处理器处理。 处理器间中断: 电平撤消初始化、初始化、启动、远程读、SMI、NMI等。 交目标处理器处理。
7.6.2 I/O APIC的寄存器 1.直接访问寄存器 INDR:[R/W]存放需访问的间接寄存器编号。 DATR:[R/W]间接访问寄存器访问结果。 IRQPAR:[W]存放置位方式产生的中断向量号。 EOIR:[W]存放正在服务(将结束)的中断向量号。 2.间接访问寄存器 IDR:[R/W32B]存放模块自己的固定的ID。 VERR:[R32B]存放有无IRQ声明和重定向寄存器数。 ARBIDR:[R32B]存放模块的仲裁ID。 BOOT_CONFIGR:[R/W32B]存放中断传递方式。
RDR:[R/W64B]索引编号10H~3FH, 每个RDR占两个号。 中断向量 逻辑模式--8位 物理模式--低4位 传递模式 Vector DM DS DtM RIRR TM M 目标APICID L 中断向量 传递模式 000—固定式 001—最低优先权式 100—NMI 111--ExtINT 目标模式 0—物理方式 1—逻辑方式 递交状态 0—空闲 1—正在递交 逻辑模式--8位 物理模式--低4位 屏蔽位 0—允许 1—屏蔽 中断请求 0—无 1—中断未决 引脚极性 0—高电平激活 1—低电平激活 触发模式 0—边沿 1—电平
7.6.3 APIC工作过程 1.中断请求产生并递交 收到引脚信号有效改变时,置位RDR的RIRR位,争取总线使用权后,向APIC总线发送短消息。 目标处理器(目标模式及传递模式)已在RDR中设定。 边沿触发方式时,消息传送后将RDR的RIRR位复位。 2.处理器接受中断请求产生并服务 目标处理器(可能多个)的Local APIC收到请求后,根据传递模式,确定本处理器是否命中。 命中的目标处理器做相应中断处理,当处理器核心执行的代码优先级低于中断请求优先级时处理中断。
3.中断结束阶段 中断为电平触发方式时,发布EOI命令通知I/O APIC做结束处理。 当前处理器的总线使用权降为最低。
7.6.4 APIC总线仲裁 结构:分布式仲裁。 空闲状态:D1D0=11(某消息结束后)。 仲裁周期:5个时钟周期。 CLK D1 D0 解释 1 EOI D1=1:常规,D1=0:EOI 2 NOT (ARBIDR[27]) 仲裁ID,如果82801BA检测到的值和自己发送的值不一样就失去仲裁资格。 3 NOT (ARBIDR[26]) 4 NOT (ARBIDR[25]) 5 NOT (ARBIDR[24]) EOI传输优先级高于正常传输。 仲裁算法:轮转优先级算法。 仲裁得胜者置为0,其余模块一律加1。
补充作业练习 看下图完成以下题目: 1 15 A5 A Y0# 14 2 A6 B 3 13 A7 C 12 74LS138 A8 5 11 IOW# RD# 1 15 IOR# A5 A Y0# WR# 14 2 INTA# A6 B INTA# 3 13 A7 C INTR INT 12 74LS138 A8 5 8259A IR5 ≥1 11 接信号源 A9 G2B# A3 10 DB[7..0] A4 4 G2A# ≥1 9 A2 7 6 Y7# A0 AEN# G1 CS# A0 希望该8259采用电平触发,起始中断类型号是16,总线缓冲方式,全嵌套,非自动EOI。现在要求当IR5中断到来的时候,将变量COME+1,当COME=100时,程序退出(注意中断向量要恢复)。要求编写与中断相关的程序和中断处理程序。