中断系统
目录
一、中断的基本概念
当CPU正常运行程序时,用户通过某种方式向CPU请求为自己服务,CPU接收请求暂时中断正在运行的程序,转去执行用户服务程序,执行完毕后再返回被中断的程序。这一过程被称为中断。
中断可以提高CPU与外设交换数据的效率。
-
中断源
能够导致CPU产生中断的来源就是中断源。
中断源分类:
①硬中断源——硬中断:外部电路在CPU引脚上产生的中断。
②软中断源——软中断:CPU执行程序的过程中产生的中断请求。
硬中断源可以不止一个这取决于CPU有多少个可以接收硬中断请求的引脚。
软中断可以只是一条软中断指令,在8086CPU系统当中,经常使用“INT 21H”指令,他将中止执行当前程序,转而去执行相应的DOS功能调用程序。
-
开中断和关中断
中断分为条件中断和无条件中断,中断源也可以分为条件中断源和无条件中断源。
通过对中断标志IF的置位来切换开中断和关中断的状态,IF=1为开中状态,IF=0为关中状态。
-
中断优先权
中断优先级:当多个中断源同时向CPU申请中断时,为了能够有序的处理多个中断申请,给每个中断源确定一个中断级别。
中断嵌套:如果CPU在执行中断服务程序时,又接受了新的中断申请,就会打断正在执行的中断服务程序,为新的中断源服务。
中断嵌套也是要有规则的:只有高优先级的中断可以打断低优先级中断服务,低优先级中断或者同优先级中断一般不允许实现中断嵌套。
- 软件查询实现中断优先级排队
CPU响应中断之后,从数据总线读入锁存器的内容,并按照中断源的优先级从高到低进行查询,这样就可以实现高优先级的申请首先得到响应。
方法:移位法(循环移位类指令)、屏蔽法(逻辑类指令)。
优缺点:
优点是简单、应用面广;缺点是不够灵活,需要变动时需对整个服务程序进行修改。
2.硬件电路实现中断优先级排队
从图中可以看出,中断源从左向右,等级由高到低,离CPU越近,优先级越高。
工作过程:
①外部向CPU请求中断。
②CPU给出中断应答信号,高电平有效。
③排队电路选择最高级别的中断,三态锁存器选通,将其锁存的中断源标识传送到CPU的数据总线上。
④CPU读入中断源标识,调用相应的中断服务子程序。
优缺点:
硬件电路实现中断优先权排队的优点是中断响应快,使用灵活。每个中断源都有自己的中断服务子程序,不会相互影响,增加或者减少中断源都很方便。
缺点是接口电路比较复杂。特别是每个中断源需要有自己的标识,在8086CPU系统中这个标识称为中断类型号,还必须建立这个中断类型号和中断服务子程序的一一对应关系。
-
中断向量表
中断向量表的IP地址为中断标识号n*4,该地址存储的为中断标识号为n的中断服务程序入口地址。
-
中断过程
二、8086中断系统
(一)中断源
8086CPU系共有256个中断类型,对应中断类型号为00H~FFH。
可屏蔽中断只有在CPU为开中断状态下才可以响应。
当标志IF=1时,是开中断状态。执行指令“STI”,使得IF=1
当标志IF=0时,是关中断状态。执行指令“CLI”,使得IF=0
8086CPU中断优先级:
除法溢出中断——INT n——INTO——NMI——INTR——单步中断(最低)
-
可屏蔽中断周期
中断响应周期需要两个总线周期。
可屏蔽中断的接口电路,在收到第一个应答信号后,立即向CPU传送相应外设的中断类型号。
数据总线的低八位读中断类型号。
-
中断向量表
8086的中断向量表位于存储器的0~3FFH地址,共1024字节。
8086的中断向量表中存放的是中断服务程序的入口地址。1024个字节用来存放256个中断服务程序的入口地址。每个中断号分配4个字节。低地址的2个字节是中断入口的IP(偏移地址),高地址的2个字节是中断入口的CS(段地址)。
例:如果在DEBUG环境中观察到8086CPU中断向量表(部分)的内容:
-D 0000:0000 002F↙
0000:0000 9E 0F C9 00 FF 13 F4 0C-16 00 44 09 F5 13 F4 0C
0000:0010 65 04 70 00 56 3F 00 12-40 E1 00 F0 6F EF 00 F0
0000:0020 00 00 00 CC 28 00 44 09-3A 00 44 09 52 00 44 09
试问中断类型号n=5的中断服务程序入口地址是多少?
解:偏移地址=(5*4)=(0014H)= 3F56H
段地址=(5*4+2)=(0016H)= 1200H
中断服务程序的入口地址= 1200H*10H+3F56H=15F56H
-
中断过程
中断申请:NMI、INTR都是高电平有效。
中断响应:无论是哪一种中断申请,8086都要在执行完当前指令后,开始响应中断。
SP-2→SP,FR→(SP);标志寄存器入栈
IF=0、TF=0;关中状态,TF=0
SP-2→SP,CS→(SP);CS入栈保护
SP-2→SP,IP→(SP);IP入栈保护
(n*4)→IP,(n*4+2)→CS;CPU指针转移到中断服务子程序的入口。
TF——单步标志(Trace Flag)。又称跟踪标志。该标志位在调试程序时可直接控制CPU的工作状态。当TF=1时为单步操作,CPU每执行一条指令就进入内部的单步中断处理,以便对指令的执行情况进行检查;若TF=0,则CPU继续执行程序。
中断处理 :执行中断服务程序。如果希望允许中断嵌套,在中断服务程序的开始时,写一条开中断指令(STI)。
中断返回 :用IRET指令
IRET指令的功能:
IP←(SP), SP←SP+2
CS←(SP), SP←SP+2
F←(SP), SP←SP+2
IRET指令从堆栈取出断点地址,赋值给CS和IP寄存器,同时恢复中断服务前标志寄存器的内容。
中断服务程序:
INTER1 PROC FAR
PUSH AX
PUSH BX ;保护现场
......
PUSH BX
PUSH AX ;恢复现场
IRET
INTER1 ENDP
-
三、可编程中断控制器8259A及其应用(原理、过程)
8259A是可编程(记忆功能)中断控制器,实际上就是一种中断接口电路。
(一)8259A中断控制器的基本功能
①单片8259可以接8个中断源,多片8259级联后,最多可以连接64个中断源。
②可以设置中断源的中断类型号(ICW2),在CPU响应中断后,能自动地向CPU发送中断类型号。
③能管理中断源的优先级,并有固定优先级(全嵌套方式)和循环优先级(相等优先级)两种。
④可以对8个中断源进行屏蔽或不屏蔽(OCW1)。
说明:
①多片级联之后,最多可以由9片8259构成,1个主片,8个从片,8*8=64个中断源。
5片级联时,4个从片可以管理32个中断源,主片还剩余4个接口,共可管理36个中断源。
②8259对中断源进行屏蔽与条件屏蔽不同。条件屏蔽为在8086CPU内判断是否响应;而8259屏蔽直接在该芯片内开放或者禁止。
(二)8259A的基本结构
主要模块:
中断请求寄存器IRR:保存还没有得到处理的外部中断源的申请。
中断服务寄存器ISR:登记哪些中断源的申请正在被CPU响应。
优先级分析器PR:有多个中断源申请中断时,优先级分析器判定谁是最高优先级,可以优先服务;或者决定是不是可以中断嵌套。
中断屏蔽寄存器IMR:IMR共有8位,每一位控制一个外部中断源申请。
读写逻辑:其接收CPU发来的读写控制信息,以完成控制信息的写入和状态信息的读出。地址线A0对内部端口进行寻址。
基本工作过程:
①外部设备将中断申请信号加入IR0~IR7;
②如果中断屏蔽寄存器IMR对于加入的中断申请没有屏蔽,中断申请存入IRR寄存器;
③优先级分析器对中断申请进行优先级分析,对于最高优先级的申请,清除它在IRR寄存器中的登记,并将ISR寄存器的相应位置1,向CPU发出中断申请;
④CPU响应中断,发回应答信号,收到应答信号后,8259A向CPU发送中断类型号;
⑤CPU调用中断服务子程序,进入中断服务,在中断服务子程序的最后,向8259A发送结束中断命令,收到命令后,8259A清除ISR寄存器中相应位的1,一次中断过程结束。
(三)8259A的引脚
:输入,低电平有效,片选信号。片选信号有效时,8259A和CPU的数据线连通,可以和CPU交换信息。片选信号无效时,8259A的数据线处于高阻状态。CS应该连接到译码器的输出,决定对8259A寻址时的高位地址。
A0:输入,接CPU的地址线,用来对8259A内部端口寻址。A0=0选择一个端口,A0=1选择另一个端口。
8259A内部可访问的寄存器不止两个,不能只通过A。地址的不同来进行区分,还要配合其他的方法。这是8259A内部端口寻址的一个特点。
(四)8259A工作方式
①中断结束方式
复位ISR寄存器中的登记,表明一次中断服务的结束。
自动结束中断:8259A在CPU发送第二个INTA应答信号的后延,自动清除被响应的中断在ISR寄存器中的登记,把登记的“1”复位为“0”.
非自动结束中断:在中断服务子程序结束之前,向8259A发送一个结束中断命令。
②优先权管理方式★★★
全嵌套方式:对于8个中断源,从IR0接入的中断源优先级最高,从IR7接入的中断源优先级最低,优先级固定。
循环优先级方式:非固定优先级方式。一旦某个中断请求被响应了,这个中断输入对应的优先级就降到最低,原来比这个输入低一级的输入的优先级升位最高,其余各个输入对应的优先级仍然依次排列。
例如:IR5的输入请求被响应了,IR5的输入优先级变为最低,原来低一级的输入IR6的优先级上升为最高,其余依次排列。如:
IR6——IR7——IR0——IR1——IR2——IR3——IR4——IR5
特殊全嵌套方式:
在级联方式下,它允许同级中断的嵌套。
例:对于下边的级联芯片,从8259A的IR7中断服务期间,又收到从IR4的申请,对主8259A的IR6是同级 ,IR4可以中断响应。
特殊全嵌套方式只适用于主8259A的优先级管理,从8259A还是要用全嵌套方式。
(五)8259A的编程★
- 初始化命令字(ICW1~4):每个初始化命令字要写到8259A的不同的端口。
①ICW1初始化命令字
写入端口:A0
功能:设置中断触发方式,规定初始化过程是否需要ICW3/ICW4。
表明初始化命令字是ICW1的特征有两个:
任何时候向8259A写入具有以上两个特征的命令字,8259A都认为是ICW1,开始一次新的初始化过程.
②ICW2初始化命令字
写入端口:AO=1
功能:写入8个中断源的中断类型号的高5位。
对于中断类型号的低三位,IR0~IR7输入的中断源中断类型号的低三位分别是000—111.(存在对应关系)
ICW2是紧接着ICW1写入到8259A中的命令字,是8259A初始化过程中必须写入的命令字。
③ ICW3初始化命令字
写入端口:A0=1
功能:在多片8259A的系统中,说明主、从8259A之间的连接关系。
从ICW3的低三位通过编码的方式主8259A的接入端,如D2D1D0=011,则连接的主8259A的IR3端。
④ ICW4初始化命令字:
写入端:A0=1
功能:设置8259A的中断结束方式等。
自动结束中断与非自动结束中断。
初始化过程:
(2)操作命令字(OCW1~3)
初始化过程结束后所写入的命令字都是操作命令字。每个操作命令字写入的次数和时间顺序都是没有限定的。
8259A有3个操作命令字:OCW1、OCW2和OCW3。
①OCW1命令字
功能:设置中断屏蔽寄存器。
②OCW2命令字
功能:设置中断优先级管理方式,向8259发送中断结束字(EOI)
③OCW3命令字
主要功能:确定下一次读出是IRR还是ISR
OCW3也有两个特征位,D4=0和D3=1,以便和ICW1和0CW2区分。
8259A初始化编程
例:2片8259A级联,从片的INT接主片的IR2。端口地址:主片20H、21H,从片A0H、A1H。主片和从片均采用边沿触发。主片采用特殊全嵌套方式,从片是全嵌套方式。采用非缓冲方式,主片接+5V,从片接地。主片的中断类型号为08H~0FH,从片的中断类型号为70H~77H。写出主8259A和从8259A的初始化程序段。
主8259A
MOV AL,11H ;ICW1,边沿触发,多片,需ICW4(P197)
OUT 20H,AL
MOV AL,08H ;ICW2,中断类型码
OUT 21H,AL ;写端口地址不同,A0
MOV AL,04H ;ICW3,IR2接从片
OUT 21H,AL
MOV AL,11H ;ICW4,非缓冲,特殊全嵌套,非自动结束
OUT 21H,AL
; 从8259A
MOV AL,11H ;ICW1,边沿触发,多片,需ICW4
OUT A0H,AL
MOV AL,70H;ICW2,中断类型码
OUT A1H,AL
MOV AL,02H ;ICW3,INT接主片的IR2
OUT A1H,AL
MOV AL,01H ;ICW4,非缓冲,全嵌套,非自动结束
OUT A1H,AL
一、中断服务程序(单级中断)
INTER1 PROC FAR
PUSH AX
PUSH BX ;保护现场(寄存器)
…….
POP BX
POP AX ;恢复现场(寄存器)
IRET
INTER1 ENDP
二、写中断矢量表(设中断类型号为0AH)
方法1:XOR AX, AX
MOV DS, AX
MOV DI, 0028H ;0AH*4=0028H
MOV AX, OFFSET INTER1 ;P91
MOV [DI], AX ;(0028H)=AX,偏移地址
MOV AX, SEG INTER1
MOV [DI+2], AX ;(002AH)=AX,段地址
STI ;IF=1
LAST: HLT
JMP LAST
方法2:;利用DOS功能调用写中断矢量表,功能号为25H(P188)。
;入口参数(AL中断类型号、DS:DX中断服务程序入口
;地址)
MOV AX, SEG INTER1
MOV DS, AX
MOV DX, OFFSET INTER1
MOV AL,0AH
MOV AH, 25H
INT 21H
STI
LAST: HLT
JMP LAST