第7章 中断.docx
- 文档编号:30638022
- 上传时间:2023-08-18
- 格式:DOCX
- 页数:23
- 大小:796.42KB
第7章 中断.docx
《第7章 中断.docx》由会员分享,可在线阅读,更多相关《第7章 中断.docx(23页珍藏版)》请在冰豆网上搜索。
第7章中断
第七章中断
§7.1引言
最初,中断只是作为计算机与外部设备交换信息的一种同步控制方式而提出的。
因此,所谓中断是指执行当前程序的过程中,由于某种随机出的外设请求,使CPU暂停正在执行的程序而转去执行为外设服务的程序;当服务完毕后,CPU再返回到暂停处继续执行原来的程序。
后来,随着计算机技术的发展,中断的概念延伸了,除了传统的外部事件(硬件)引起的中断外,又增加了内部软件中断的概念。
并且将硬中断又分为可屏蔽和不可屏蔽两种类型。
一、中断的应用
①分时操作
CPU可命令多个外设同时工作,采用中断方式,使CPU分时为每个外设服务。
②实时处理
即控制现场的各个参数,可在任何时间发出中断申请,要求CPU处理,CPU则可以马上响应并加以处理。
这样有及时处理在查询的工作方式下是做不到的。
③故障处理
计算机在运行过程中,往往会出现事先预料不到的情况,或者出现一些故障如电源突跳、存储出错、运算溢出、程序跑飞等。
计算机就可以利用中断系统自选处理,而不必停机。
二、中断源
①一般I/O设备,如键盘、显示器、打印机、鼠标等
②存储设备,如硬盘、软盘、光盘等
③实时时钟,如外部各种可编程和不可编程的定时器/计数器等
④故障源,如电源掉电、存储器奇偶校验错、被零除或溢出等。
三、中断分类
①从来源分为:
内部中断和外部中断
②从CPU的控制分:
可屏蔽中断和非屏蔽中断
可屏蔽中断是指其响应时受CPU内部的标志控制,而非屏蔽中断不受此标志的控制,有申请必须响应。
③从响应方式分:
非矢量中断和矢量中断
非矢量中断是指响应时将转入固定的入口地址;而矢量中断是当CPU响应时,应向CPU提供中断源的向量号,根据向量号转入相应的入口地址,或者提供中断处理程序的入口地址。
四、中断系统的功能
1、实现中断及返回
当某一中断源发出中断申请时,CPU能决定是否响应这个中断请求,若允许响应这个中断请求,CPU必须在现行的指令执行完后,保存断点(即IP和CS值和标志寄存器的内容)然后转到需要处理的中断服务程序的入口,同时清除中断请求触发器。
不中断处理完后,再恢复被保留下来的各个寄存器的标志寄存器的内容(称为恢复现场),恢复IP和CS值,使CPU返回断点,继续执行主程序。
2、实现优先权排队
在系统中通常有多个中断源,会出现两个或多个中断源同时提出中断请求的情况,这样就必须要事先根据轻重缓急,给每个中断源确定一个中断级别-优先权。
当多个中断源同时发出中断申请时,CPU能找到优先权级别最高的中断源,响应它的中断请求;在优先权级别最高的中断源处理完以后,再响应级别较低的中断源。
3、高级中断源能中断低级的中断处理
当CPU响应某一中断源的请求并在进行中断处理时,若有优先权级别更高的中断源,发出中断申请,则CPU要能中断下在进行的中断服务程序,响应高级中断,在高级中断处理完以后,再继续进行被中断的中断服务程序。
五、8086微处理器的中断系统
1、中断类型号(中断向量码)
在8086/8088的中断系统中,每个中断源都有相应的处理程序,对每个中断都规定有一个中断类型号,共256个(0~255)。
CPU根据这些类型号结合中断向量表就可以转入相应的中断处理程序,完成相应的中断服务。
其中中断类型号的前5个是8086规定的专用中断;8H~FH是八级硬件中断;5H和10H~1AH是基本外部设备的输入/输出驱动和BIOS中断调用的有关程序;1BH和1CH由用设定;20H~3FH由DOS操作系统使用,40H号以后可由用户程序安排使用。
2、中断向量表
在8086/8088系统中,系统是依靠中断向量表来转到中断源相应的处理程序。
中断向量表是中断类型号与相应中断源的中断处理程序入口地址之间的连接表。
8086/8088微机系统用内存最低端的1KB空间作为中断向量表(00000H~003FFH),在微机系统初始化时,利用程序将中断向量写入系统内存的最低端。
如下P286图2-22所示。
每个中断向量在内存中占4个字节,共有256个中断向量,在4个字节中,高地址字为中断处理程序的段地址(CS),低地址字则是偏移地址IP。
在中断响应时,CPU根据中断向量码n,通过n×4运算,查找中断向量表,从表中n×4地址开始的连续4字节单元获取中断处理程序的入口地址,从而转入相应的中断服务程序。
§8.2中断处理过程
一个完整的中断处理过程可分为4部分:
中断请求、中断响应、中断服务和中断返回。
1、中断请求
中断请求是由中断源提出。
当CPU不能保证及时响应时,或者请求信号是边沿信号时,应设中断请求触发器,来锁存请求信号,直到CPU响应,由响应信号清零请求触发器。
另外,CPU的中断请求输入端只有一个,当有多个中断源,并且在某段时间CPU将不响应部分中断源的申请,则中断源应设有中断屏蔽触发器,CPU通过向屏蔽触发器写屏蔽字以屏蔽部分中断源。
2、中断响应
中断响应是指CPU获知中断请求到获得相应的中断服务程序入口地址这一段时间。
(1)若CPU响应中断,则自动完成3项工作:
关中断(IF=0,TF=0)、保护断点(FLAGS、CS、IP进入堆栈)和获取中断服务程序入口地址(CS:
IP←入口地址)。
(2)CPU是在执行当前指令后和没有总线请求时响应中断。
(3)内部中断或非屏蔽中断,则转入固定入口地址的中断服务程序进行中断处理。
可屏蔽中断的中断服务程序入口地址的获得有两种方式:
固定入口地址和中断向量。
中断向量是由外设提供的,用于确定入口地址的数据。
3、中断服务
(1)保护现场:
将寄存器的内容推入堆栈。
(2)开中断:
对于有中断嵌套的应开中断。
(3)中断服务
(4)关中断:
关中断对应于上述的开中断。
(5)恢复现场
4、中断返回
8086CPU通过执行IRET指令(IP、CS、FLAGS出栈)实现中断返回。
§8.3中断优先权
中断的优先权是指每个中断源在接受CPU服务时的优先等级,对中断优先权的控制要解决以下两个方面的问题:
①CPU应首先响应优先权高的中断请求。
②中断嵌套。
即高优先权的中断请求可以中断低优先权的中断服务。
优先权的设定通常有两种方法:
软件查询和硬件电路
一、软件查询中断优先级
该方法是将中断请求状态位组成一个端口,赋予一个端口号。
当CPU响应中断进入中断服务程序后,首先读取端口内容,对端口寄存器的内容进行逐位查询,查到哪个外设有中断申请,再转到相应的中断服务程序。
查询程序的查询顺序,决定了外设中断优先级的高低。
查询程序一般有两种方法:
屏蔽法和移位法。
二、硬件优先权排队电路
1、中断优先权编码电路
该方法是用硬件编码器和比较器组成的优先排队电路。
当8个中断源中某一个有中断请求时,便在其中断请求线上产生“1”,并在“或”的输出端形成一个中断请求信号,但它能否送至CPU,还受比较器的控制。
优先权寄存器存有CPU正在服务的中断编码。
如果A2A1A0级别较低,则比较器输出为“0”,与门1被封锁;否则中断请求能送至CPU。
当CPU没有处理中断时,优先权无效信号为高电平,打开与门2,则任何中断申请可通过与门2发出中断申请。
2、菊花链硬件式或称为链式优先权排队电路
菊花链排队是向量中断的一种,这种方法是利用外设在系统中的物理位置来决定其中断优先级的。
例如,中断源B发出中断请求(高电平信号)且CPU响应时,将封锁后面的中断源的申请。
在响应中断源B并为其服务期间,若中断源A发出中断申请,则CPU会挂起中断源B的服务转支接收优先级高的中断源A的中断申请并为其服务。
§8.4中断控制器8259
8259可编程中断控制器又称为优先级中断控制器。
一、8259的主要性能
1可以直接管理8个中断源
2能为中断源提供中断向量码
3可对每一级中断进行屏蔽控制
4可提供多种可供选择的工作方式,并能通过编程进行控制。
二、8259的内部结构
1、中断请求寄存器(IRR)
中断请求寄存器IRR是一个具有锁存功能的8位寄存器,用来存放由外部输入的中断请求信号,中断请求有两种方式:
边沿触发(上升沿)、高电平触发。
2、中断服务寄存器(ISR)
用来存放正在处理中的中断请求。
ISR中相应位的置位是在中断响应的
脉冲期间;复位,则可以是自动或非自动。
3、优先级判别器(PR)
用来管理和识别各中断申请信号的优先级别。
在有中断请求时,将根据控制逻辑规定的优先级别和IMR的内容,确定是否响应,则在
脉冲期间指导它置入ISR的相应位。
4、中断屏蔽寄存器(IMR)
当某位为1时,相应的中断源被屏蔽。
5、级联缓冲器/比较器
它是为实现级联方式的主-从结构而设计的一个功能模块。
CAS0~CAS2是级联信号,在一个主-从系统中,应将全部8259的CAS0~CAS2对应端相连,在主8259中CAS0~CAS2是输出信号,在从8259中CAS0~CAS2是输入信号。
/
是双向功能引脚,当8259处于缓冲方式时,用于控制缓冲器的接和发送,在主从结构关系中,
=1表示主的,
=0表示从的。
6、控制电路
该电路按照初始化程序设定的工作方式管理8259的全部工作。
根据IRR的内容和PR的判断结果向CPU发出中断请求信号INT,并接受来自CPU的中断响应信号
。
7、读/写控制逻辑
用于接收CPU送来的读/写命令,及片选信号和端口选择信号。
8、数据总线缓冲器
9、8259与8086的连接
三、8259的工作过程
①外部中断源输入中断请求信号
②请求信号使IRR的相应位置“1”,并与IMR按位相“与”后送优先权判决电路PR。
③优先权判决电路从IRR中检测出优先级最高的中断请求位,并将其与ISR中记录的正在被CPU服务的中断进行比较,若高,则向控制电路发出有效的中断请求信号。
④当控制电路收到有效的中断请求信号时,向CPU发出高电平INT信号。
5在中断允许的情况下,CPU接受中断请求,并发出中断响应
。
⑥当8259接到第一个
脉冲将置位ISR的相应位,并把IRR中的相应位复位,如果工作在级联方式下,则主8259将送出级联地址CAS0~CAS2给从8259。
⑦在第二个
脉冲对单独使用或级联方式下从属的8259将中断向量发送至数据总线。
⑧CPU获取中断向量后转移到相应的中断处理程序。
四、8259的工作方式
1、中断优先级设置方式
8259对中断优先级的管理可分为4种情况:
完全嵌套方式、特殊完全嵌套方式、自动循环方式和特殊自动循环方式。
①完全嵌套方式
该方式为8259的默认方式。
在此种方式下,8259的8个请求输入端的优先级是固定的,IR0最高,IR7最低,高级的可中断低级的,从而实现嵌套中断。
②特殊完全嵌套方式
特殊完全嵌套方式和完全嵌套方式基本相同,不同之处在于:
在特殊完全嵌套方式下,当处理某一级中断时,如果有同级的中断请求,也会给予响应,从而实现一种对同级中断请求的特殊嵌套。
③优先级自动循环方式
在这种方式下,IR0~IR7引入的中断轮流为最高优先级,任何一级中断被处理完后,它的优先级就被修改为最低,而最高优先级分配给该中断的下一级中断。
④优先级特殊自动循环方式
这种方式和优先级自动循环方式的不同在于:
一开始的最低优先级是由编程确定的。
2、中断结束方式
在中断服务结束时,ISR中相应位应清“0”,以便再次接收同级别的中断。
中断结束的管理就是用不同的方式使ISR中相应位清“0”。
8259中断结束方式可分为3种情况
1自动中断结束方式
所谓的自动结束方式,是利用响应中断时最后一个
脉冲的后沿自动将士ISR中的相应位清“0”。
这种方式存在一个明显的缺点:
任何一级中断在执行中断期间,在8259中没有留下任何标志。
如果此过程中出现了新的中断请求,则只要CPU允许中断,不管出现的中断级别如何,都将打断正在执行的中断服务而被优先执行,从而产生重复嵌套,并且嵌套的深度无法控制,这显然是不合理的。
②普通中断结束方式
普通中断结束方式用在完全嵌套情况下,其原因在于,8259每得到一次EOI(中断结束命令),将把ISR中已经置位的各位中优先级最高的位复位。
③特殊中断结束方式
该方式的特殊在于,除了普通EOI方式具有的将ISR相应位复位外,将明确指明本次复位的ISR的位。
3、屏蔽中断源的方式
CPU可用CLI指令将IF清“0”,可以禁止所有的可屏蔽中断进入。
但是,要想屏蔽某个或某几个中断源,就得用8259的中断优先级管理的屏蔽方式来实现,。
8259对中断源的屏蔽方式有以下两种方法。
①普通屏蔽方式
利用8259的IMR中断屏蔽寄存器,IMR中的8个位与中断申请输入信号IR0~IR7相对应,在IMR中某位设为1,则相应的IR信号被屏蔽。
②特殊屏蔽方式
所谓特殊屏蔽,是由操作命令字OCW中的ESMM和SMM位控制的。
当它们分别为1时,可通过写入IMR的不同内容,有选择地被允许或被禁止请求中断服务。
4、中断触发方式
①电平触发方式
即中断申请输入端IR上的有效高电平来触发。
通常当选择电平触发方式后,应选择非自动EOI方式。
以避免重复嵌套。
②边沿触发方式
即中断申请输入端IR上由低电平到高平时触发。
当IR由低电平跳转为高电平后,应一直保持高电平到中断被响应时止。
通常边沿触发方式与自动EOI方式联合使用。
五、8259的编程
在使用8259时,除按各引脚规定的信号接好电路外,还必须用程序选定其工作状态,如优先级、中断屏蔽、中断矢量等。
8259的四条初始化控制字ICW1~ICW4,三条操作字OCW1~OCW3,而8259只有一条地址线,因此对各个控制字的写入是按照一定顺序并结合某些数据位的标志来进行寻址的。
(一)8259的初始化编程
初始化编程完成的主要功能是:
1设定触发方式
2设定连接方式为单片或级联
3设定中类型友基值,即IR0所对应的中断类型号
4设定中断优先级管理方式
5设定中断结束时的处理方式
初始化命令字必须按顺序,由写入ICW1开始,然后写入ICW2。
至于是否写入ICW3和ICW4取决于工作方式。
8255有两个端口,一个为偶地址(A0=0),一个为奇地址(A0=1)。
1、ICW1
写入ICW1时,还自动将中断屏蔽寄存器IMR清零,并恢复各中断源的优先级为IR0最高,IR7最低。
2、ICW2
设置中断类型码基值命令字
在8080方式下是向量地址的高8位。
在8086/8088方式下,D7~D3表示中断类型码的高5位,D2~D0为固定值000。
在响应时由中断源序号填入相应值。
3、ICW3
用于设定8259的级联。
若系统中只有一片,则不用ICW3。
若系统中有级联的,则主和从的ICW3格式不同。
4、ICW4
(二)8259的工作编程
对8259初始化完成后,就进入工作状态,准备好接受中断源的请求信号。
如果需要改变初始化时设置的中断控制方式、屏蔽某些中断级、读出一些状态信息,则必须向8259写入操作命令字OCW,进行操作方式编程。
1、OCW1
OCW1是中断屏蔽命令字
2、OCW2
控制中断结束、优先权循环等操作。
3、OCW3
用来设置特殊屏蔽方式、查询方式以及读中断请求寄存器IRR、中断服务寄存器ISR和中断屏蔽寄存器IMR的当前状态。
特殊屏蔽方式:
如果执行中断服务程序中,希望开放较低级的中,则先利用OCW1将正在执行的中断屏蔽,然后设置特殊屏蔽方式,这样可使ISR相应的功能中止,直到清除特殊屏蔽方式为止。
特殊屏蔽方式
例如IR2在完全嵌套方式下被服务,并希望在中断服务程序执行过程中,IR2的中断服务程序能被其它任何级别的中断源中断,则可IR2中断服务程序的某处送屏蔽字,使IM2=1,然后写入OCW3置特殊屏蔽方式,则IR2的中断服务程序在执行期间,就可被其它任何级别的中断源中断,其流程如下图所示:
中断查询
CPU应先关中断,向8259发送P=1的OCW3的查询命令,表明用查询方式决定中断优先级的次序,则下一条对同一地址(A0=0)读指令将起中断识别作用。
若有中断请求,便识别出最高级别的中断请求,使ISR中的相应位置1,并通过数据总线由8259向CPU送一个字节的信息,该信息的格式如下:
其中,I=0,表示无中断请求,且W2,W1,W0三位无意义;I=1,表示有中断请求,W2,W1,W0三位的组合指明请求服务的各中断源中最高的中断级。
五、8259的应用
在某个系统中接有一片8259,有一外设中断请求从IR7引入,8259的端口地址如图所示。
CLI
MOVAL,00010011
OUT84H,AL
MOVAL,0C0H
OUT86H,AL
MOVAL,01H
OUT86H,AL
8259中断控制器应用实验
(2)利用实验平台上8259控制器对扩展系统总线上的中断线INTR进行扩展。
编写程序对8259控制器的IR0和IR1中断请求进行处理。
;T8259-2.asm
;扩充中断源实验
INTR_IVADDEQU01CCH;INTR对应的中断矢量地址
INTR_OCW1EQU0A1H;INTR对应PC机内部8259的OCW1地址
INTR_OCW2EQU0A0H;INTR对应PC机内部8259的OCW2地址
INTR_IMEQU0F7H;INTR对应的中断屏蔽字
PCI_INTCSREQU9438H;PCI卡中断控制寄存器地址
IOY0EQU9C00H;片选IOY0对应的端口始地址
MY8259_ICW1EQUIOY0+00H;实验系统中8259的ICW1端口地址
MY8259_ICW2EQUIOY0+04H;实验系统中8259的ICW2端口地址
MY8259_ICW3EQUIOY0+04H;实验系统中8259的ICW3端口地址
MY8259_ICW4EQUIOY0+04H;实验系统中8259的ICW4端口地址
MY8259_OCW1EQUIOY0+04H;实验系统中8259的OCW1端口地址
MY8259_OCW2EQUIOY0+00H;实验系统中8259的OCW2端口地址
MY8259_OCW3EQUIOY0+00H;实验系统中8259的OCW3端口地址
STACK1SEGMENTSTACK
DW256DUP(?
)
STACK1ENDS
DATASEGMENT
CS_BAKDW?
;保存INTR原中断处理程序入口段地址的变量
IP_BAKDW?
;保存INTR原中断处理程序入口偏移地址的变量
IM_BAKDB?
;保存INTR原中断屏蔽字的变量
DATAENDS
CODESEGMENT
ASSUMECS:
CODE,DS:
DATA
START:
MOVAX,DATA
MOVDS,AX
CLI
MOVDX,PCI_INTCSR
SUBDX,19H
INAL,DX
MOVDX,PCI_INTCSR;初始化PCI卡中断控制寄存器
MOVAX,1F00H;向PCI_INTCSR中写入003F1F00H
OUTDX,AX
ADDDX,2
MOVAX,003FH
OUTDX,AX
MOVAX,0000H;替换INTR的中断矢量
MOVES,AX
MOVDI,INTR_IVADD
MOVAX,ES:
[DI]
MOVIP_BAK,AX;保存INTR原中断处理程序入口偏移地址
MOVAX,OFFSETMYISR
MOVES:
[DI],AX;设置当前中断处理程序入口偏移地址
ADDDI,2
MOVAX,ES:
[DI]
MOVCS_BAK,AX;保存INTR原中断处理程序入口段地址
MOVAX,SEGMYISR
MOVES:
[DI],AX;设置当前中断处理程序入口段地址
MOVDX,INTR_OCW1;设置中断屏蔽寄存器,打开INTR的屏蔽位
INAL,DX
MOVIM_BAK,AL;保存INTR原中断屏蔽字
ANDAL,INTR_IM
OUTDX,AL
MOVDX,MY8259_ICW1;初始化实验系统中8259的ICW1
MOVAL,13H;边沿触发、单片8259、需要ICW4
OUTDX,AL
MOVDX,MY8259_ICW2;初始化实验系统中8259的ICW2
MOVAL,08H
OUTDX,AL
MOVDX,MY8259_ICW4;初始化实验系统中8259的ICW4
MOVAL,01H;非自动结束EOI
OUTDX,AL
MOVDX,MY8259_OCW1;初始化实验系统中8259的OCW1
MOVAL,0FCH;打开IR0和IR1的屏蔽位
OUTDX,AL
STI
WAIT1:
MOVAH,1;判断是否有按键按下
INT16H
JZWAIT1;无按键则跳回继续等待,有则退出
QUIT:
CLI
MOVDX,PCI_INTCSR;恢复PCI卡中断控制寄存器
MOVAX,0000H
OUTDX,AX
MOVAX,0000H;恢复INTR原中断矢量
MOVES,AX
MOVDI,INTR_IVADD
MOVAX,IP_BAK;恢复INTR原中断处理程序入口偏移地址
MOVES:
[DI],AX
ADDDI,2
MOVAX,CS_BAK;恢复INTR原中断处理程序入口段地址
MOVES:
[DI],AX
MOVDX,INTR_OCW1;恢复INTR原中断屏蔽寄存器的屏蔽字
MOVAL,IM_BAK
OUTDX,AL
STI
MOVAX,4C00H;返回到DOS
INT21H
MYISRPROCNEAR;中断处理程序MYISR
QUERY:
MOVDX,MY8259_OCW3;向8259的OCW3发送查询命令
MOVAL,0CH
OUTDX,AL
INAL,DX;读出查询字
TESTAL,80H;判断中断是否已响应
JZQUERY;没有响应则继续查询
ANDAL,03H
CMPAL,00H
JEIR0ISR;若为IR0请求,跳到IR0处理程序
JNEIR1ISR;若为IR1请求,跳到IR1处理程序
JMPEOI
IR0ISR:
MOVAL,30H;IR0处理,显示字符串STR0
MOVAH,0EH
INT10H
MOVAL,20H
INT10H
JMPEOI
IR1ISR:
MOVAL,31H;IR1处理,显示字符串STR1
MOVAH,0EH
INT10H
MOVAL,20H
INT10H
JMPEOI
EOI:
MOVDX,MY8259_OCW2;向实验系统中8259发送中断结束命令
MOVAL,20H
OUTDX,AL
OVER:
MOVDX,PCI_INTCSR
SUBDX,19H
INAL,DX
MOVDX,PCI_INTCSR;清PCI卡中断控制寄存器标志位
ADDDX,2
MOVAX,003FH
OUTDX,AX
MOVDX,INTR_OCW2;向PC机内部8259发送中断
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 第7章 中断