现代计算机测控系统.docx
《现代计算机测控系统.docx》由会员分享,可在线阅读,更多相关《现代计算机测控系统.docx(12页珍藏版)》请在冰豆网上搜索。
现代计算机测控系统
现代计算机测控系统
关于中断技术
摘要:
本文对中断技术的重要作用、特点以及响应过程作了详细的介绍;对8086中断系统也作了简单介绍;重点讲了8259A的工作过程、编程、应用。
1.中断技术
(1)中断技术的重要性
中断技术是微型计算机系统中广泛应用的一种资源共享技术,是微型计算机系统的核心技术,也是计算机硬件接口及应用系统设计开发人员必须熟练掌握的一项关键技术。
中断系统功能的强弱已经成为评价计算机整体性能的一项重要指标。
为实现中断功能而设置的硬件电路和与之相应的软件,称为中断系统。
利用中断,实现了多程序的分时操作和实时处理。
利用中断还可以完成处理机与处理机之间信息交流和任务的切换。
计算机在运行过程中,由于输入/输出设备或是其它非预期的急需处理的事件发生,使CPU暂时中断现在正在执行的任务,而转去执行引起中断的事件,当该事件处理完毕,再返回到原程序继续执行,这个过程叫中断。
在日常工作中,CPU需要输入一些数据,或是输出运行结果,但I/O的运行速度比CPU的执行速度要慢得多,这就意味着CPU常常需要用大量的时间去等待计算机外围设备进行输入输出。
这种等待的过程使得计算机处理事务的效率受到了很大的影响。
而“中断”就是计算机解决CPU和I/O之间速度矛盾的有效途径。
通过中断管理,当外设需要进行输入输出操作时,就像CPU发出中断申请,CPU将按各中断申请的优先级别响应中断请求,从而使计算机的工作效率明显提高。
中断过程示意图如图1:
图1中断过程示意图
(2)中断技术的特点
1)中断技术中硬件与软件的分工与配合。
硬件承担最基本的任务就是检测、接收、传送中断源的中断请求信号,同时还要管理中断允许触发器IF的开/关,管理中断屏蔽、中断判优、断点保护与恢复,以及形成中断服务子程序的入口地址。
软件承担的工作就是中断服务子程序所完成的工作。
在中断服务子程序中,除了首尾使用入栈和出栈指令进行现场的保护和恢复外,主要的工作就是进行控制或数据交换。
2)中断方式和查询方式的区别。
虽然这两种方式都适用于CPU与慢速外设的协调工作,但二者有着本质的区别。
在工作过程中,起主动作用的角色不同。
在查询方式中,以外设为中心,CPU处于主动方。
CPU不断查询外设状态,判断外设是否准备好,直到外设准备好后,CPU才与外设交换数据。
而中断方式中,以CPU为中心,外设处于主动方。
CPU不必等待慢速外设,只管不断的运行主程序,不管外设状态,只有当外设准备好,提出中断请求时,CPU才与外设打交道。
在工作过程中,CPU与外设工作的并行或串行方式不同。
查询方式下,CPU与外设串行工作,当外设未准备好时,CPU一直等待,直到外设准备好后,CPU才工作,所以这种串行方式下的CPU工作效率非常低。
而在中断方式下,慢速外设做自己的准备工作,同时CPU运行自己的主程序,而不是等待外设,只有外设准备好并通知CPU后,CPU才暂停现行的工作,转去处理外部事件,待处理完毕后,CPU与外设又分头做各自的工作,这种并行工作可以提高CPU的工作效率。
3)执行中断服务子程序与调用子程序的比较。
执行中断服务子程序与调用子程序尽管都是暂停CPU现行的主程序,转去执行一段子程序,但是二者还是不同的:
a.进入子程序的时机不同。
调用子程序是在主程序中执行调用指令(如8086的CALL指令)时进入子程序的,该指令在主程序中的位置是由程序员预先设定的,是预知的;而在CPU运行主程序的过程中,外部中断请求却是随机的,所以主程序执行到何时会暂停并转去执行中断服务子程序,是由外设提出中断请求的时刻决定的,断电在主程序中的位置是随机的。
但软件中断指令引起的中断是预知的,这一点与调用子程序一致。
b.保护断点的手段不同,虽然二者保护断点都是将断点地址入栈,但调用子程序保护断点是在执行调用指令的指令周期中将返回地址入栈的;而中断返回地址的保护是在中断响应周期(不属于任何指令周期)中将返回地址入栈的。
c.入口地址的形成方法不同。
调用子程序时,子程序的入口地址由调用指令提供;而中断服务子程序的入口地址由硬件电路在中断响应周期根据中断类型号获得,并向CPU提供。
d.返回指令不同。
普通子程序的返回指令仅仅将返回地址出栈给程序计数器(如8086的IP或CS:
IP);而中断返回指令不仅出栈返回地址,还出栈恢复标志寄存器的内容,同时通知中断控制逻辑本次中断结束。
(3)中断响应过程
1)识别中断源。
CPU在执行每条指令的过程中(一般是最后一个时钟周期),都由硬件自动检测是否有中断请求信号,包括可屏蔽中断请求和非屏蔽中断请求。
对于可屏蔽中断,如果有中断请求且CPU处于开中断状态,又没有其他主部件请求总线,对于非屏蔽中断,如果有中断请求而无论CPU是否开中断,CPU都会在当前指令周期结束后予以响应,回应给中断源一个中断响应信号。
但是CPU首先必须识别出是哪一个中断源发出的中断请求,特别是当有多个中断源发出中断请求时,需要进行中断判优,这项工作通常由中断系统中专门的硬件电路来完成。
2)关中断、保护断点、保护现场。
CPU响应中断后,首先关闭中断允许触发器(IF=0),然后保存断点和现场,即完成当前程序计数器(如8086的CS、IP)以及标志寄存器的保护,通常将这些寄存器的内容入栈保存,其目的是保护中断服务子程序执行完毕返回到原程序时能正确执行后续程序,这一步是中断隐操作,由系统硬件自动完成。
另外,在CPU将要执行的中断服务子程序中可能要用到某些寄存器,而这些寄存器也许在原程序被打断时存放着某些有用的内容,为了在返回后不破坏原程序在断点处的状态,也应将这些寄存器的内容入栈保存,通常采用入栈指令(如8086的PUSH指令)实现。
3)开中断。
由于CPU响应中断时自动关闭了中断(IF=0),所以在某些情况下为了能够实现中断嵌套,就需要在适当的位置设置一条开中断指令(如8086的STI指令),使系统处于开中断状态(IF=1),随时可以对优先级更高的中断作出响应和处理。
若在执行本次中断服务子程序过程中,不希望再相应其他的可屏蔽中断请求,则可以不做开中断操作。
4)中断服务。
CPU通过执行一段特定的程序来完成对中断事件的处理。
如输入/输出数据、处理掉电故障、处理各种错误等。
这种中断处理程序构成中断服务子程序的主体。
通过将中断服务子程序的入口地址置入程序计数器CS、IP中,CPU转入中断服务子程序的执行。
中断源不同,要求CPU所做的处理也不同,相应的中断处理程序也就不同,其入口地址不同。
各种不同的微处理器形成中断服务子程序入口地址的方法也不尽相同。
5)关中断。
为安全起见,保证下一步将要进行的恢复断电和现场工作能够顺利进行,不被打断,应在这一步关中断。
若第(3)步没有开中断操作,这里就不必关中断了。
6)恢复现场、恢复断点、开中断,中断返回。
中断处理结束后,就要中断返回了。
但要先恢复现场和断点,以确保正确返回原程序。
转入中断服务子程序时,已经入栈保存的内容(现场),在返回断点之前,一般使用出栈指令将他们还原给相关寄存器,即恢复现场。
中断服务子程序的最后一条指令是中断返回指令(如8086的IRET指令)。
当CPU执行指令时会自动把断点地址从堆栈中弹出到程序计数器CS、IP寄存器中,原来的标志寄存器内容弹回标志寄存器,这样就可以保证被中断的原程序从断点处继续执行。
因为恢复现场是在第(5)步后关中断状态下进行的。
为了使返回断点后,CPU可以响应可屏蔽中断请求,这里需要使用指令开中断。
2.8086(8088)中断系统
Intel8086中断系统具有很强的中断处理能力,而且中断系统简单、灵活,最多可处理256种不同的中断,每个中断源都有相应的中断类型号(0-255)供CPU识别。
每个中断分配给一个中断类型码,在0~255之间,用一字节表示,也称为256种类型中断。
(1)中断的分类
1)硬件中断:
即通过外部的硬件产生的中断,如打印机、键盘等,有时也称为外部中断。
硬件中断又可分为两类:
可屏蔽中断和不可屏蔽中断。
不可屏蔽中断:
由NMI引脚引入,它不受中断允许标志的影响,每个系统中仅允许有一个,都是用来处理紧急情况的,如掉电处理。
这种中断一旦发生,系统会立即响应;
可屏蔽中断:
由INTR引脚引入,它受中断允许标志的影响,也就是说,只有当IF=1时,可屏蔽中断才能进入,反之则不允许进入,可屏蔽中断可有多个,一般是通过优先级排队,从多个中断源中选出一个进行处理。
2)软件中断:
(内部中断):
即根据某条指令或者对标志寄存器中某个标志的设置而产生,它与硬件电路无关,常见的如除数为0,或用INTn指令产生。
(2)中断向量和中断向量表
系统处理中断的方法很多,处理中断的步骤中最主要的一步就是如何根据不同的中断源进入相应的中断服务子程序,目前用的最多的就是向量式中断。
1)中断向量:
把各个中断服务子程序的入口都称为一个中断向量;
2)中断向量表:
将这些中断向量按一定的规律排列成一个表,就是所谓的中断向量表,当中断源发出中断请求时,即可查找该表,找出其中断向量,就可转入相应的中断服务子程序。
3.8259A中断控制器
(1)简介
8259A是可编程的中断控制芯片。
每块芯片可管理8级向量中断,具有8条中断请求输入线IRQ0~IRQ7,1条外中断请求输出线;具有4种主要工作方式,即全嵌套、循环优先级、特定屏蔽和程序查询方式;同时,还有4种从属工作方式,即结束中断、读状态、中断请求触发和数据缓冲方式。
这些工作方式可以通过初始化命令字寄存器来实现。
采用全嵌套方式时,芯片初始化后不必设置操作命令字。
中断请求优先级是固定的:
0级最高7级最低。
接受的8个中断请求信号为边沿触发。
设定0级请求对应中断号为8,直至7级请求中断号为0FH。
单片工作时,实际使用020H和021H两个端口。
经过中断优先级分析器选中的当前请求的中断优先级。
其相应的中断服务寄存器ISR位被置1一直保持到中断服务程序在返回前发中断结束命为止。
在ISR置位期间,禁止同级或较低级的中断响应,开放较高级的中断请求。
根据8086/8088CPU可屏蔽中断INTR的特点,为了使多个外部中断源能共享中断资源,还必须解决几个问题:
CPU芯片上只有一个INTR输入端,多个中断源应如何与INTR连接,各中断源的优先级如何判定等。
8259A就是为了解决上述诸问题设计的。
(2)8259A的工作过程
首先,当系统上电以后,应对8259A进行初始化。
初始化是由CPU执行一段初始化程序实现的,初始化程序向8259A写入若干初始化指令,以规定8259A的工作状态。
当完成初始化后,8259A处于就绪状态。
这时8259A按完全嵌套方式工作(即IR0优先级最高,并依次递减),当出现某一级别的请求时,IRR相应位置位,如果该中断级未被屏蔽,就由PR通过控制逻辑向CPU发出请求信号(INT变为高电平)。
如果此时CPU中的IF=1,则在CPU完成当前指令后进入中断响应过程。
CPU首先将执行两个
总线周期,在每个
总线周期内,都有一个
信号送到8259A。
8259A识别出第一个
负脉冲后即封锁IRR寄存器,并将此状态保持至第二个脉冲结束为止。
当8259A识别出第二个
负脉冲时,8259A将一个8位的指针放入数据总线,然后CPU从数据总线读入该指针。
第二个
负脉冲结束时,8259A使INT信号变为无效。
如果要在8259A工作过程中改变他的操作方式,则必须在主程序或中断服务程序中向8259A发出操作命令字。
(3)8259A的编程
图28259A初始化流程图
1)初始化编程
在8259A进入正常工作之前,必须对系统中的每片8259A进行初始化。
对8259A的初始化编程,就是由CPU向8259A写入2~4个初始化命令字(ICW1~ICW4),其目的是通知8259A在开始正式工作之前进入起始状态。
8259A的初始化次序是严格的,如图2所示。
a.8259A只有奇、偶2个端口地址,初始化时规定ICW1必须写入偶地址,ICW2~ICW3必须写入奇地址。
b.ICW1~ICW4的设置次序是固定的。
当CPU向8259A的偶地址写入一个命令字,且命令字中的D4=1时,则被8259A的内部逻辑识别为ICW1;紧接着向8259A的奇地址端口写入的一个字被8259A识别为ICW2
c.对于每片8259A,ICW1和ICW2是鼻血写入的。
而ICW3和ICW4是否要写入,则视具体情况而定,而且要在ICW1中指明。
若ICW1中的D1=0,表示级联,需要使用ICW3;若ICW1中的D1=1,需要使用ICW4,否则不需要。
d.若为级联方式,那么在ICW2之后下一个写入奇地址的命令字被8259A识别为ICW3,需要注意,分别写向主片和从片的初始化名字格式不同,主片和从片的端口地址也不同。
e.若需要使用ICW4,那么紧接着再写入8259A奇地址端口的命令字被识别为ICW4。
如果根据系统要求确定的ICW4=00H,则不必写入ICW4。
对于8086/8088系统,ICW4总是需要的。
f.在级联方式时,不仅ICW3要分别写入所有的主片、从片,ICW1和ICW2也要分别写入所有的主片、从片。
需要ICW4的话,也要分别写入主片、从片。
g.一旦初始化完成以后,若要改变某个初始化命令字,则必须重新进行初始化编程,不能只写入单独一个初始化命令字。
2)操作方式编程
8259A接收初始化命令字ICW1~ICW4后,进入就绪状态。
操作方式编程是在8259A初始化之后,由CPU向8259A写入操作控制字,从而实现对8259A的动态控制。
操作控制字可以在8259A工作的任何时刻写入,并且写入顺序没有限制。
只要注意OCW1写入奇地址端口,OCW2和OCW3写入偶地址端口;同写入偶地址的OCW2和OCW3,8259A是根据其特征位(D3和D4位)来区别的。
3)中断服务子程序设计
a.设置中断向量表,以便CPU准确调用用户中断服务子程序。
在设置中断向量表之前,应该先保存原中断向量的内容,在CPU响应中断,执行用户中断服务子程序后,再将中断向量表恢复为原状态。
b.设置中断控制器,允许/屏蔽某些外部可屏蔽中断请求。
c.设置CPU的中断允许标志IF,允许/禁止CPU响应其他外部可屏蔽中断。
用户可以通过关中断指令CLI和开中断指令STI将IF的状态设为0或1,从而决定CPU是否可以响应外部可屏蔽中断。
在不能允许CPU响应中断的时候,就必须关中断,以防止不可预测的后果。
而在其他时间则应开中断,以便允许CPU及时响应中断,为外设提供服务。
d.用户中断服务子程序中必须实现的几项任务。
在中断服务子程序中通常要完成保护现场、中断服务、恢复现场、中断返回等任务。
如果用户中断服务子程序为外设中断服务,并且8259A为非自动中断EOI结束方式,那么中断返回指令前还要向8259A发送EOI中断结束命令。
用户编制的中断服务子程序,特别是使用外部可屏蔽中断类型号的用户中断服务子程序,服务时间应尽量短,能放在主程序中完成的任务就不要由中断服务子程序来完成,因为外部中断服务子程序是用来处理外设的紧急事件的,因此这样可以减少干扰其他中断设备的工作。
e.用户中断服务子程序中尽量不要使用DOS系统功能调用,以避免DOS重入。
(3)8259A的应用
在IBMPC/XT系统中8259A的连接情况如图3所示:
图3
从图中可以看出8259A的IR2端是保留端,其余都已被占用。
先假设外设的中断请求信号由IR2端引入,要求编程实现CPU每次想应该中断时屏幕显示字符串“WELCOME!
”。
已知主机启动时8259A中断类型号的高5位已初始化为00001,故IR2的类型号为0AH(00001010B);8259A的中断结束方式初始化为非自动结束,即要在服务程序中发EOI命令;8259A的端口地址为20H和21H。
程序如下:
DATASEGMENT
MESSDB`WELCOME!
`,0AH,0DH,`$`
DATAENDS
CODESEGMENT
ASSUMECS:
CODE,DS:
DATA
START:
MOVAX,SEGINT2
MOVDS,AX
MOVDX,OFFSETINT2
MOVAX,250AH
INT21H
INAL,21H
ANDAL,0FBH
OUT21H,AL
STI
LL:
JMPLL
INT2:
MOVAX,DATA
MOVDS,AX
MOVDX,OFFSETMESS
MOVAH,09
INT21H
MOVAL,20H
OUT20H,AL
INAL,21H
ORAL,04H
OUT21H,AL
STI
MOVAH,4CH
INT21H
IRET
CODEENDS
ENDSTART
4.结论
通过对中断技术的了解以及对8259A中断控制器的基本知识的学习,比如:
中断技术在微机中的作用、特点,8086系统的基本知识,8259A可编程中断控制器的在中断中的应用等相关知识,从而对中断技术知识有了一定的掌握。
参考文献
[1]朱家铿.计算机组成原理[M].沈阳:
东北大学出版社,2001
[2]王向慧,连志春.微型计算机原理与接口技术[M].北京:
中国水利水电出版社,2007
[3]胡蔷.微机原理及应用[M].北京:
机械工业出版社,2007
[4]王忠民,王钰,王晓捷.微型计算机原理[M].西安:
西安电子科技大学出版社,2007
[5]黄道君,刘丹华,杨西惠.微型计算机原理及应用[M].北京:
高等教育出版社,2004
[6]艾德才.微机原理与接口技术.北京:
水利水电出版社[M],2004