简介
中断是指计算机暂时停止正在处理的程序而去执行外界或内部发生的紧急事件,并在处理完成后自动返回原程序继续运行原程序的过程。我们知道,CPU(中央处理器)运行速度非常快,相对于外设一般要快几个数量级。为了解决这个速度匹配问题,发展了中断的概念。良好的中断系统能提高计算机实时处理的能力,实现CPU与外设分时操作和自动处理故障,从而扩大了计算机的应用范围。
中央中断系统即为CPU中断系统,中断由外部或内部中断源产生。中断源可以在需要时向CPU提出中断请求,中断请求一般是一个边沿跳变的信号,CPU在运行过程中会不断进行检测,一旦检测到跳变便自动进入相应的中断向量入口执行中断服务程序,并在执行完成后自动返回到原程序处继续执行,中断服务程序是由用户完成的。
功能进行中断优先级排队一个CPU通常有多个中断源,所以总有可能发生在同一个瞬间有多个中断源同时向CPU申请中断的情况,这就要求程序设计者按轻重缓急给每个中断源的中断请求一个中断优先级。当多个中断源同时向CPU请求中断时,CPU就可以通过中断优先级排队率先响应中断优先级高的中断请求而把中断优先级低的中断请求暂时放下,并记录低中断的信息,等到处理完优先级高的中断请求后再来响应优先低的中断。
实现中断嵌套CPU实现中断嵌套的先决条件是要有可以屏蔽的中断,其次要有能对中断进行控制的指令。中断嵌套功能可以使CPU在响应某一中断请求的同时再去响应更高中断优先级的中断请求,而把原中断服务程序挂起,等处理完这个更高中断优先级的中断请求后再来响应原中断,最后退出所有中断程序。
自动响应中断中断源产生中断是随机发生,无法事先预料的。因此,CPU必须时刻不断地检测中断输入线的电平变化,并且相邻两次检测的时间不宜相隔太长,否则就会影响中断响应的时效性。通常,CPU总是在每条指令的最后阶段对中断请求进行一次检测,因此中断源产生中断请求到被CPU检测到,这个时间不会超过一个指令的时间。CPU在响应中断时通常要自动做三件事:一是自动关闭中断(有的CPU是关闭比当前的中断优先级低的中断,从而防止其它中断源来干扰本次中断)和把当前执行程序的断点地址(即程序计数器PC中的值)压入堆栈,以便中断服务程序最后的中断返回指令RETI将堆栈中的值弹入程序计数器PC中,返回中断前的原程序执行,如果此时有中断的嵌套,则会进入原来被挂起的中断程序中继续执行。
中断源中断源是指引起中断的事件或发出中断请示的来源。
外部设备中断源在微型计算机中,外部设备主要用来输入和输出数据,所以它是最原始和最广泛的中断源。在用做中断源时,通过要求它在输入或输出一组数据时能够自动产生一个“中断请求”信号(一般是一个高到低或低到高的电平跳变),以供CPU检测和响应。例如:我们经常用的键盘鼠标,当你敲下一个键时,实际上,就是向CPU发出一个中断信号,CPU就会响应中断执行相应的命令。
在嵌入式实时控制系统中,外部设备(被控对象)常常作为中断源,用于产生中断请求信号,要求CPU及时采集系统的各种控制参数以及要求发送或接收数据,等等。例如:电压、电流、温度、湿度、加速度都可以作为产生中断的源。
故障中断源故障源是产生故障的源泉,CPU可以通过中断方式快速的对已发生故障进行及时的分析处理,从而保证系统正常的运行。计算机故障源有内部和外部之分:CPU内部故障源引起内部中断;CPU外部故障引起外部中断,如突然掉电等。在掉电时,掉电检测电路通过检测就会自动产生一个掉电中断请求,CPU检测到后便在大滤波电容维持正常供电的几秒内通过执行掉电中断服务程序来保护现场和启用备用电池,以便在市电恢复正常后继续执行掉电前的用户程序。 在嵌入式系统中,被控对象的故障也可用作故障中断源,以便对被控对象进行应急处理,从而可以减少系统在发生故障时的损失。
定时器中断源定时器中断有内部和外部之分。内部定时器中断由CPU内部的定时器∕计数器溢出时自动产生,故又称为内部定时器溢出中断;外部定时器中断通常由外部定时电路(或外部的一个脉冲信号比如光电门)发出的脉冲通过CPU的中断请求输入线引起。不论是内部还是外部定时器的中断都可以使CPU进行计时处理,以便达到时间控制的目的。
中断嵌套和c语言中的子程序类似,中断也是允许嵌套的。中断嵌套是指在同一个瞬间,CPU因响应某一中断源的中断请求而正在执行相应的服务程序时,且此时CPU的中断是开放的,那它必然可以把正在执行的中断服务程序暂停下来转而响应和处理中断优先级更高的中断源的中断请求,待处理完成后再回来继续执行原来的中断服务程序。因此,实现中断嵌套的前提是,在中断服务程序中CPU的中断是开放的(有些处理器需要在中断服务程序开始处设置一条开中断的指令比如Atmel公司的AVR单片机,它的中断优先级是固定的,且进入中断后自动屏蔽CPU的中断)。其次是要存在优先级更高的中断请求。二者缺一不可,都是实现中断嵌套的必要条件。
处理流程中断系统的目标就是实现中断异常的处理对用户透明.从而降低一般计算机用户对计算机硬件知识的要求,使软件编程更容易实现、更容易理解,如弱化中断异常为“消息”。中断与异常处理必须考虑以下几个方面的问题:确定中断源,优先级管理,屏蔽管理,中断嵌套(仅支持高级打断低级),获取中断向量。中断处理的一般流程如下:中断请求、中断响应、中断服务、中断返回。
中断源管理中断源的管理包含硬件和软件两个方面。首先,整体设计需要规划内部事件的数量、系统支持的软中断数量、向用户开放的外部服务数量以及它们的优先级和类型编码。其次,选择合理的硬件实现模式。最后,操作系统的相关部分代码的编写是建立在前面两者之上的。
中断异常服务中断异常服务通常分为系统的服务和一般用户的服务。对于像溢出、除出错、未定义指令等等这些异常.其处理带有普遍性,由系统代码实现。对于外部中断.则其服务系统是无法预先知道的,所以这些服务代码需要用户编写并向系统注册。下图为一个中断异常整体安排实例。
IDT表对于嵌入式系统.通常中断表约定从内存0地址开始。若希望强化管理,使得中断表可以随意定位,则在CPU内就需要设计一个IDTR寄存器来“记住”IDT表的地址。
优势提高CPU的工作效率CPU有了中断功能可以通过分时操作启动多个外设同时工作并能对它们进行统一管理。CPU执行主程序中有关指令(一般是设备驱动程序)令各外设同时工作,而且在任何一个外设的工作完成后(比如:A/D转换器完成了数据的转换)都可以通过中断得到满意的服务(如CPU接收A/D的数据,再一次启动A/D工作)。CPU完成A/D转换器的启动后,就去处理别的事件,直到A/D再一次的完成转换并向CPU提出中断请求,CPU才转而对A/D转换的数据做相应的处理。因此,CPU在和外设交换信息时通过中断就可以避免不必要的长时间的等待和查询,从而大大提高了CPU的工作效率和系统的吞吐能力。
提高处理的时效性.我们知道在实时控制系统中,被控系统的实时参量、越权数据和故障信息都必须被计算机及时的采集、处理和分析判断,以便对系统实施正确调节和控制。比如,在一架飞机上的实时控制系统,如果实时性不好,那么一旦发生紧急事件,就会发生不可挽回的重大事故。因此,可以毫不夸张的说,计算机对实时数据的处理时效常常是被控系统的生命,是影响产品质量和系统安全的关键所在。系统的失常和故障都可以通过中断立刻通知CPU,使它可以迅速获取实时数据和故障信息,并对系统作出应急处理1。