微型计算机的中断

🏠 首页 《无线电》杂志 1985年 🔗 第6期 🔗 第6页 分类:应用电子仪器 🔗 焦宝文 🔗, 吴文虎 🔗

微型计算机中的中央处理单元CPU的工作速度较快,受其控制的外部设备(如键盘、打印机等)工作速度较慢,这样在CPU与外部设备交换信息时就要浪费很多时间去等待外部设备,严重地妨碍了主机高速的工作。怎样才能既和外部设备交换信息又不影响主机的工作速度呢?人们在CPU中设置了一个被称之为“中断请求”的控制信号,使微计算机具有所谓中断功能,从而可以做到CPU与外部设备同时工作。当外部设备准备好后,它就通知CPU,让CPU暂时停止,转去与外部设备交换信息。一旦这件事做完,CPU立即继续去做原来的工作。这样做一点也不会浪费CPU的时间,可以提高CPU的利用率,同时还能解决诸如实时控制、故障自动处理、多机连接以及人机联系等许多问题。下面对中断过程做一简单介绍。

一、中断的含义

为了使初学者容易理解“中断”的概念,我们不妨打一个简单的比喻。设想在一间教室里有一位老师正在讲课,全班同学正在听课。在整个上课过程中,学生会不时地向老师提出问题以求回答。假如某一个学生因某一个定理没有听懂,他就举手示意打断老师讲课,此时,如果老师接受他的请求,就可以叫这个学生的名字,请他站起来提问。当老师对提问作出回答之后,再回到正题继续讲课。这种在课堂上发生的情况与微处理机中断系统中的情况非常相似。如果我们把老师比作CPU,则学生好比是输入输出(I/O)设备,传输的媒介是语言。这样,我们就可以借助这个比喻给中断赋予一个较为科学的定义。所谓中断,就是在计算机执行正常程序的过程中,出现了某些异常情况和特殊要求,处理机就尽快地在适当时候暂时停止现行程序的执行,转去执行对异常情况和特殊请求的处理,待处理完毕后,又返回到被暂时停止了的程序继续执行。我们把这个过程称为“中断”。通常中断处理的顺序如图1所示,由于CPU和外围I/O设备的一些操作是并行的,因此当较慢的I/O设备准备自己的数据时,CPU照常执行自己的主程序,只有当设备A、B准备就绪的时候,才去处理设备A、B。显然,这样可使微计算机系统的效率大为提高。

图1
图1 🔍原图 (716×231)

二、中断处理过程

实际的中断过程一般是比较复杂的,但我们可以把它抽象出来用图2所示的流程图表示。从图2中可以看出,整个中断过程要求微处理器做以下动作:(1)在CPU内部有一个中断允许触发器,当其为“1”时称作开中断(申请中断之门打开),这时CPU能够对中断请求信号做出响应;当其为“0”时称作关中断(把申请中断的门关闭了),这时CPU不会对中断请求信号做出响应。一开始假定中断允许触发器已处于“1”状态(这由软件设置),当CPU执行完一条指令之后,它要查一下是否有外设请求中断,如没有,则继续取下一条指令执行。如有,则响应中断,这时CPU发出中断响应信号告诉外界自己已经中止了原来的工作,响应了中断。同时将中断允许触发器置“O”,即关中断。为什么要关中断呢?这是因为在CPU响应某一外设所申请的中断后,防止另外一个外设再来申请中断,这时它只要把申请中断的大门关上就可以了。(2)CPU寻找中断请求设备(即发出中断请求信号的外部设备),将程序计数器(PC)的内容用堆栈保存起来(记住断点以备中断结束后使用)。(3)转移到处理该中断源的中断服务子程序(或称中断处理子程序)。(4)CPU保存处理器状态,处理完中断之后再恢复处理器状态。(5)完成上述动作之后把中断允许触发器置1,表示打开了申请中断之门,又允许外界提出中断申请了。接着返回到原来被中断的主程序的下一条指令。

图2
图2 🔍原图 (872×641)

三、中断的类型

中断可分为单中断和多中断两种。所谓单中断,即只有一个中断源向CPU请求中断。这是最简单的情况。在实际应用中,一般都有多个中断源向CPU请求中断服务,这样就要求识别哪一个中断源在要求中断服务。由中断处理过程可知,所有的中断最后都要转向中断服务子程序,而不同类型的中断之间的区别就在于它们各自使用不同的方式把中断服务子程序的首地址送入程序计数器。

微处理器识别中断的方式基本上有两种:查询式和向量式。

查询式确定中断源的方法主要是用软件实现的,也就是用软件来产生装入程序计数器的地址向量的(所谓向量,就是一个指示地址,即一个软件的入口地址,不同的地址向量对应不同的入口地址)。所谓查询通常是指逐个询问一组正在工作的I/O端口,以便确定其是否需要给予服务。我们还是用上面老师上课,学生不时地进行提问的例子来进行类比。假如教室安装了电子设备,学生提问时不必举手,而只需按自己课桌上的按钮,不管是谁只要有一个按钮按下去立即就可点亮讲台上的一个指示灯,从而让老师知道有一个学生请求中断(讲课)。接着老师就要逐个查问是谁按的电钮,查到之后再与他进行对话。显然,上述过程可谓之为典型的查询法。不难发现此种中断系统有着明显的缺点,如果有几个学生都按了电钮,老师从一个指示灯亮看不出来究竟有多少人要求提问。为了克服这个缺点,可以将每个学生课桌上的按钮编号,在老师讲台上的显示器可以显示这些编号,谁按了按钮显示器就会显示谁的编号,这样老师就不必再逐个询问每个学生,而是立刻根据座位编号作出响应。这种情况与向量式确定中断源的方法极为相似。

向量式确定中断源的方法主要是用硬件实现的。这种方法要为每一个中断源设置一个中断向量。所谓中断向量一般是指该中断源的中断服务程序的入口地址(有的还包括中断后的处理机的状态字)。在内存区专门开辟一个区域来存放这些中断向量,相应的内存单元地址(存中断向量的地址)就称为中断向量地址。当CPU响应中断时,在关中断和保护部分现场(除断点外还包括处理机的状态字等)之后,通过硬件将优先权高的中断源(下面将要讲到)的中断向量地址送给CPU,CPU就从按这个地址找到存有中断向量的内存单元,取出中断服务程序的入口地址装入程序计数器PC,从而使CPU的控制转向中断服务程序。

在实际应用中,由于CPU引脚的限制,它的中断请求线的数量是有限的,例如8080只有一条中断请求线。Motorola6800和Mos Technology6502有两根中断输入线。假如中断源数目超过中断输入线的数目,那么,当中断信号产生时,仍有一个要识别中断源的问题。在多中断的情况下,一根中断输入线可采用图3的连接方法,而多根输入线可采用图4的连接方法。

图3
图3 🔍原图 (509×196)
图4
图4 🔍原图 (502×252)

四、中断优先权

在多中断请求源的情况下,假如有若干个设备在同一时间内请求中断,那么,这不仅要解决识别中断请求源的问题,而且还要决定哪个中断请求源是有较高的优先权。例如电源出故障,就需要最优先处理。又如,快速外围设备要比慢速外围设备优先处理。因此,在实际使用中是要把多个中断源按优先权高低级别排列的。而大部分制造厂都为其生产的器件提供了一种安排中断优先权的方法,这种安排既有在器件内的,也有在器件外的。

有的微处理机只有一根中断线,如图3所示,用户可以把所有的中断系统以“或”的方式连接起来。然后,必须研制一个软件查询例行程序来确定是哪一个设备发出了中断请求。这样,软件查询例行程序的查询顺序就规定了设备的优先权。即最先查询的设备优先权最高,最后查询的设备优先权最低。

在多数中断系统中,优先权是由制造厂在研制微处理机时规定好的。由于多数中断的输入也可以是向量化的,因此,可以产生自动转移操作,从而转向预定的存贮单元。(吴文虎 焦宝文)