1 / 92

第 7 章

第 7 章. 微型计算机中断系统. 中国科学技术大学 何克东. 一、中断概念 中断就是 CPU 暂停执行现行的程序,转而处理随机事件,处理完毕后再回到被中断的程序继续执行,这一过程称为中断。. 7.1 概述. 中断系统具有以下基本功能: ① 为了加强中断系统的灵活性,对于各种中断请求,应该具有屏蔽和开放的功能,使得程序员可以灵活控制。 ② 具有“中断级别”的判断和控制功能,即能实现中断源排队。当有多个中断源申请中断时,能根据事先的设定及时响应中断。 ③ 能实现中断嵌套,即高级别的中断能中断较低级别的中断。

greg
Download Presentation

第 7 章

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 第 7 章 微型计算机中断系统 中国科学技术大学 何克东

  2. 一、中断概念 中断就是CPU暂停执行现行的程序,转而处理随机事件,处理完毕后再回到被中断的程序继续执行,这一过程称为中断。 7.1 概述

  3. 中断系统具有以下基本功能: • ①为了加强中断系统的灵活性,对于各种中断请求,应该具有屏蔽和开放的功能,使得程序员可以灵活控制。 • ②具有“中断级别”的判断和控制功能,即能实现中断源排队。当有多个中断源申请中断时,能根据事先的设定及时响应中断。 • ③能实现中断嵌套,即高级别的中断能中断较低级别的中断。 • ④系统响应中断后,能自动进行中断处理。当中断处理完后能自动返回。

  4. 中断主要解决的问题 • 1.实现分时操作,解决CPU与外部设备速度上的差异,提高计算机系统的工作效率,达到并行处理的目的。 • 2.处理随机的异常事件,如运算结果溢出、机器故障等。 • 3.实现实时操作,在控制系统中许多信号是随机产生的,只有通过中断系统才能实时的对它们进行处理,避免信息的丢失。

  5. 8086的中断系统采用向量中断机制 能够处理256个中断 用中断类型号0~255区别 可屏蔽中断还需要借助专用中断控制器Intel 8259A实现优先权管理 8086中断系统

  6. 中断源:引发CPU中断的来源称为中断源 中断响应:接受中断请求 中断向量表:存放中断服务子程序入口地址的内存区域(00000H~003FFH) 中断优先权:有多个中断源请求中断时, 系统响应中断申请的级别 中断屏蔽 :由软件设置,使之不能被响应,称为中断屏蔽。

  7. 非屏蔽中断源 可屏蔽中断源 NMI 8259A 中断 控制器 IR0 IR1 IR2 IR3 IR4 IR5 IR6 IR7 CPU INTR 中断逻辑 外 设 中 断 源 INTA INT n 指令 INTO 指令 除法 错误 单步 中断 二、中断分类 外部中断 内部中断 8086中断源

  8. 外部中断是由于CPU外部提出中断请求引起的程序中断,也称为硬件中断。 非屏蔽中断:类型号为2 外部通过非屏蔽中断NMI请求,必须响应 非屏蔽中断主要用于处理系统的意外或故障 可屏蔽中断:类型号来自中断控制器 外部通过可屏蔽中断INTR请求,由IF控制是否响应;响应时产生INTA信号 可屏蔽中断主要用于与外设交换数据 1. 外部中断

  9. IF=0:可屏蔽中断不会被响应 关中断、禁止中断、中断屏蔽 系统复位,使IF=0 任何一个中断被响应,使IF=0 执行指令CLI,使IF=0 IF=1:可屏蔽中断会被响应 开中断、允许中断、中断开放 执行指令STI,使IF=1 执行指令IRET恢复原IF状态 中断标志IF的状态

  10. 内部中断是由于CPU内部执行程序出现异常引起的程序中断,所以又称软件中断。内部中断的中断类型号已定(内部中断是不可屏蔽的) 除法错中断:类型号为0 指令中断:类型号为n 断点中断:类型号为3 溢出中断:类型号为4 单步中断:类型号为1 2、内部中断

  11. 由中断指令INT引起的中断 由CPU运算错误引起的中断 由Debug设置的中断 软件中断

  12. 7.2 中断处理过程 可屏蔽中断处理流程

  13. 申请 响应 中断过程 处理

  14. 中断申请 当需要CPU中断以处理一些紧急事件,向CPU发出的请求。引发CPU中断的来源称为中断源 。 中断响应 为了及时处理中断,中断系统(或中断装置)定时查询有无中断申请,若有且未屏蔽,则引出处理中断的程序称为该中断被响应。 中断处理 执行相应的中断处理程序(例行中断服务子程序)。

  15. CPU响应I/O中断的三个条件: (1)外设提出中断申请 (2)本中断位未被屏蔽 (3)中断允许 一、CPU响应中断过程

  16. 现行指令 Y 内部中断 N Y NMI N 中断响应周期 读中断类型号 Y Y INTR IF=1 N N Y TF=1 N 下条指令 中断响应过程(P268)

  17. 标志寄存器入栈 TEMP=TF,IF=TF=0 CS:IP入栈 获取中断向量 Y 还有NMI N Y TEMP=1 N 执行服务程序 弹出CS:IP 弹出标志寄存器 返回被中断程序 中断响应过程

  18. 确定中断源: 查询中断 矢量中断 二、 8086的中断向量表 • 要解决的问题 • 确定中断源 • 找到对应中断处理程序的入口地址

  19. 中断向量:中断服务程序的入口地址(首地址)中断向量:中断服务程序的入口地址(首地址) 逻辑地址含有段地址CS和偏移地址IP(32位) 每个中断向量的低字是偏移地址、高字是段地址,需占用4个字节 8086微处理器从物理地址00000H开始,依次安排各个中断向量。 256个中断占用1KB区域,就形成中断向量表 1. 8086的中断向量表 类型号为N的中断向量的 物理地址=N×4

  20. 2050 IP CS A000 INT 68H MOV AX,0 向量地址 =68H×4 =1A0H 中断处理程序 A000:2050 STI PUSH DS : : IRET 中断操作过程例子

  21. 设置中断向量 AL=中断类型号 DS:DX=中断服务程序入口地址 AH=25H INT 21H 取中断向量 AL=中断类型号 AH=35H INT 21H 返回:ES:BX=中断服务程序入口地址 2.中断向量(中断入口地址)的设置 方法一:

  22. POP DX;恢复中断向量 POP DS MOV AL,N MOV AH,25H INT 21H : INTRAD PROC FAR : IRET INTRAD ENDP MOV AL,N MOV AH,35H INT 21H PUSH ES;保存中断向量 PUSH BX PUSH DS MOV AX,SEG INTRAD ;设置中断向量 MOV DS,AX MOV DX,OFFSET INTRAD MOV AL,N MOV AH,25H INT 21H POP DS

  23. 方法二: MOV AX,0 MOV ES,AX MOV DI,N*4 MOV AX,OFFSET INTRAD CLD STOSW MOV AX,SEG INTRAD STOSW STI : INTRAD PROC FAR : IRET INTRAD ENDP

  24. 对除法错、单步中断、NMI、断点中断、溢出中断,CPU自动提供中断类型号0~4。对除法错、单步中断、NMI、断点中断、溢出中断,CPU自动提供中断类型号0~4。 对INT n,中断类型号由n确定。 对I/O中断(由INTR引脚引入),通过8259获得中断类型号。 3.中断类型号(确定中断源)的获取

  25. 中断主程序的编写方法 1.主程序中的初始化. (1)设置中断向量。 (2)设置8259A的中断屏蔽寄存器的中断屏蔽位。 (3)设置CPU中断允许位标志IF(开中断STl)。

  26. 2.硬件(外设接口)和CPU自动完成 (1)外设接口向CPU的INTR端发中断请求。 (2)当前指令执行完后,CPU发两个中断响应信号INTA给外设接口。 (3)CPU取中断类型号n。 (4)CPU自动将当前PSW、CS、IP内容入栈保护。 (5)清除IF、TF,禁止外部中断和单步中断。 (6)从中断向量表中取(4×n)地址中内容→IP,取(4×n+2)地址中内容→CS。 (7)转向中断服务子程序。

  27. 注意: (1)对重复前缀的指令(如REP MOVSB)作为一条指令处理。执行一次重复前缀和串指令即可响应中断,而不是把串操作全部执行完。 (2)遇到开中断指令STI和中断返回指令IRET,要在这两条指令执行完后,再执行一条指令才能响应中断。 (3)CPU自动清除IF及TF位,使CPU进入中断服务程序后,不允许再产生新的中断,如果在中断服务程序中还允许外部中断进入,则在中断服务程序中必须再开中断。

  28. 中断服务子程序的结构形式: 1.保护现场 2.开中断,IF=1,允许中断嵌套 3.执行中断处理程序 4.关中断,IF=0,禁止其他中断请求进入 5.发中断结束命令EOI 6.恢复现场 7.中断返回IRET 三、中断服务子程序

  29. 编写内部中断服务程序与编写子程序类似 利用过程定义伪指令PROC/ENDP 保护完现场后要用开中断指令STI置IF=1 恢复现场前要用关中断指令CLI置IF=0 最后用中断返回指令IRET 通常采用寄存器传递参数 主程序需要调用中断服务程序 调用前,需要设置中断向量 利用INT n指令调用中断服务程序 内部中断服务程序

  30. 编写80H号中断服务程序 功能:显示以“0”结尾字符串的功能 利用显示器功能调用INT 21H的2号模块 字符串缓冲区首地址为入口参数 DS:DX(段地址:偏移地址)传递参数 例:内部中断服务程序

  31. intoff dw ? intseg dw ? intmsg db ‘A Instruction Interrupt !’ db 0dh,0ah,0 : : mov al,80h : mov ah,35h;保存中断向量 int 21h mov intoff,bx ;保存偏移地址 mov intseg,es;保存段基地址 push ds mov dx,offset new80h ;设置中断向量 mov ax,seg new80h mov ds,ax mov ax,2580h int 21h pop ds mov dx,offset intmsg int 80h;调用中断服务程序 mov dx,intoff mov ax,intseg mov ds,ax mov ax,2580h int 21h mov ax,4c00h int 21h : :

  32. 外部中断服务程序 例: 编写中断处理程序,要求主程序运行时,每10秒响铃一次,同时屏幕上显示信息“The bell is ring! ”(P274) 可以利用中断类型1CH进行处理,因为系统定时器(中断类型8)的中断处理程序中,时钟中断一次(约18.2次/秒)要调用一次INT 1CH。在ROM BIOS中,1CH的处理程序只有一条IRET指令,仅为用户提供一个中断类型号。这样可以利用系统定时器的中断间隔,将用户设计的程序来代替原有的INT 1CH程序。在编写程序时,有两个部分的工作: l. 在主程序初始化部分,先保存当前中断向量表内容,再置新的中断向量。 2.在主程序结束部分恢复保存的1CH向量。

  33. DATA SEGMENT COUNT DW 1 MESS DB ‘The bell is ring!’,0AH,0DH,‘$’ DATA ENDS CODE SEGMENT ASSUME CS:CODE,DS:DATA MAIN PROC FAR START: PUSH DS SUB AX,AX PUSH AX MOV AX,DATA MOV DS,AX MOV AL,1CH MOV AH,35H ;得到原中断向量 INT 21H PUSH ES ;存储原中断向量 PUSH BX PUSH DS

  34. MOV DX,OFFSET RING ;中断子程序RING的偏移地址和段地址 MOV AX,SEG RING MOV DS,AX MOV AL,1CH ;设置中断向量 MOV AH,25H INT 21H POP DS IN AL,21H;设置中断屏蔽位,21H为8259中断屏蔽寄存器端口地址 AND AL,0FEH OUT 21H,AL STI ;开中断 MOV DI,2000; 延迟 DELAY:MOV SI,3000 ;等待中断 DELAY1: DEC SI JNZ DELAY1 DEC DI JNZ DELAY POP DX ; 取原中断向量 POP DS MOV AL,1CH MOV A H,25H INT 21H RET MAIN ENDP CODE ENDS

  35. 第一个INTA周期 T1 T2 T3 T4 第二个INTA周期 T1 T2 T3 T4 CLK ALE LOCK INTA D0~D7 n 四、中断响应时序 中断类型号 中断响应总线周期时序图

  36. 7.3 中断优先级和中断嵌套 开中断 取下一条指令 执行一条指令 中断服务程序 否 中断? 关中断 是 关中断 恢复现场 保护现场 返回 屏蔽本级和低级中断 多个中断源中断流程图

  37. IBM PC机优先级 内部中断 除法错中断 指令中断 溢出中断 不可屏蔽中断 可屏蔽中断 单步中断 一、中断优先级 高 低

  38. INTR 中断0 中断1 中断2 锁 存 器 三态 缓冲器 D0~D7 … … IOR 8001H A0~A15 译码 1.软件查询中断优先级 中断查询接口

  39. MOV DX,8001H IN AL,DX TEST AL,80H JNZ SEV0 TEST AL,40H JNZ SEV1 TEST AL,20H JNZ SEV2 TEST AL,10H JNZ SEV3 TEST AL,08H JNZ SEV4 :

  40. 2.硬件查询优先方式-菊花链法 菊花链优先查询法

  41. 3.矢量中断优先级 IR0 8253定时器 键盘 未用 异步通信卡(辅) 异步通信卡(主) 硬盘 软盘 并行打印机 优先级管理逻辑 中断请求寄存器 中断服务寄存器 IR7 中断屏蔽寄存器 21H

  42. 二、中断嵌套 高 低

  43. 一、功能 Intel 8259A是可编程中断控制器PIC 8259A的基本功能 一片8259A可以管理8级中断,可扩展至64级 每一级中断都可单独被屏蔽或允许 在中断响应周期,可提供相应的中断类型号 8259A设计有多种工作方式,可通过编程选择 7.4 可编程中断控制器8259A

  44. INTA 控制逻辑 INT D7~D0 数据 总线 缓冲器 IR0 中断服务寄存器 优先权判别电路 中断请求寄存器 RD 读/写 控制 逻辑 WR A0 CS IR7 CAS0 级联 缓冲器 比较器 CSA1 CAS2 中断屏蔽寄存器(IMR) SP/EN 二、 8259A的内部结构 ISR PR IRR

  45. 8259A的读写功能

  46. 中断请求寄存器IRR 保存8条外界中断请求信号IR0~IR7的请求状态 Di位为1表示IRi引脚有中断请求;为0表示无请求 中断服务寄存器ISR 保存正在被8259A服务着的中断状态 Di位为1表示IRi中断正在服务中;为0表示没有被服务 中断屏蔽寄存器IMR 保存对中断请求信号IR的屏蔽状态 Di位为1表示IRi中断被屏蔽(禁止);为0表示允许 中断控制

  47. 一个系统中,8259A可以级联,有一个主8259A,若干个(最多8个)从8259A一个系统中,8259A可以级联,有一个主8259A,若干个(最多8个)从8259A 级联时,主8259A的三条级联线CAS0~CAS2作为输出线,连至每个从8259A的CAS0~CAS2 每个从8259A的中断请求信号INT,连至主8259A的一个中断请求输入端IR 主8259A的INT线连至CPU的中断请求输入端 SP/EN在非缓冲方式下,规定该8259A是主片(SP=1)还是从片(SP=0) 中断级联

  48. 完全嵌套方式 特殊全嵌套方式 设置优先权方式 自动中断结束方式 结束中断处理方式 普通中断结束方式 非自动中断结束方式 特殊中断结束方式 普通屏蔽方式 屏蔽中断源方式 特殊屏蔽方式 边沿触发方式 中断请求触发方式 电平触发方式 自动循环方式 缓冲方式 优先权固定方式 特殊循环方式 非缓冲方式 优先权循环方式 数据线连接方式 三、 8259A的中断管理方式 中断查询方式

  49. 1. 8259A的编程结构

  50. 完全嵌套方式 8259A的中断优先权顺序固定不变,从高到低依次为 IR0、IR1、IR2、……IR7 中断请求后,8259A对当前请求中断中优先权最高的中断IRi予以响应,将其类型号送上数据总线,对应ISR的Di位置位,至到中断结束(ISR的Di位复位) 在ISR的Di位置位期间,禁止再发生同级和低级优先权的中断,但允许高级优先权中断的嵌套 特殊全嵌套方式 用于级联方式,可响应同级中断请求。 优先权自动循环方式 优先权特殊循环方式(程序指定初始的最低优先级) 2. 优先级设置方式

More Related