)
块结构中断有序化处理方法
摘要
本发明涉及一种处理微控制器多中断系统的方法,其中断方法执行如下步骤:通过判断中断请求的类型,查询中断向量表,获取该中断请求对应的中断向量,并执行该中断向量所对应的中断服务程序。特别地,本发明是在确定系统所需要的中断源类型和数目以后,合理的安排各个中断的开启时间,即设置中断之间的延时机制,使得系统能够在执行下一步操作之前完全退出中断,避免后续操作受到未退出中断的影响,保证系统的稳定性。这种方法更好的优化了处理多个中断的方式,使得CPU可以“并行”的处理多项任务,能够在工业控制方面很好的发挥中断系统的资源。
权利要求书
1、一种处理微控制器多中断系统的实现方法,其特征在于,包括如下步骤:
列出系统所需要的中断源类型和数目;
根据这些中断设置中断向量,编写各自的中断服务子程序;
合理安排中断的开启时间,即延时机制,避免同一时刻两个以上的中断同时到来,由于优先级高低而导致有的中断不能即刻执行。
2、如权利要求1所述的方法,其特征在于:所述的中断源的类型包括事件触发型中断请求和状态中断请求。
3、如权利要求2所述的方法,其特征在于:所述的事件触发型中断请求包括内部的定时器计数溢出中断请求、捕获/比较/脉宽调制中断请求、通信端口发送接收完成中断或模数转换中断请求等
4、如权利要求2所述的方法,其特征在于:所述的状态中断请求包括外部端口电平变化以及端口沿(上升沿或下降沿)触发中断请求等。
5、如权利要求1-4所述的方法,其特征在于:根据系统所需要的中断数目设置中断向量,依据中断向量表对中断类型分类。
6、如权利要求1所述的方法,其特征在于:依据系统的需要,编写的中断子程序应该尽可能的简短,从而便于及时退出,返回主程序。
7、如权利要求1所述的方法,其特征在于:不使用系统原有的中断优先级安排,采用软件延时的方法,避免避免同一时刻多个中断同时产生。
8、如权利要求6和7所述的方法,其特征在于:在不同的时刻相继开启所需要的中断,其间隔的延时时间,是根据在线实时仿真估算中断服务子程序的执行时间,或者对汇编代码估算得来的。
9、如权利要求1所述的方法,其特征在于:系统进入中断子程序后会自动保护断点,进行PC压栈,执行完毕,退出中断时,将恢复现场,自动进行PC退栈,实现CPU的“并行”处理。
技术领域
本发明设计中断控制技术领域,特别涉及一种处理微控制器多中断系统的实现方法。
背景技术
随着深亚微米CMOS集成电路生产工艺的不断进步,出现了很多功能强大而且便宜的微控制器,使得系统的集成度不断提高,大大增强了微处理器数据处理及流程控制能力。在微控制器组成的系统中,中断系统扮演着越来越重要的角色,中断系统是处理器在运行软件的标准流程中,插入其他的处理子程序,这些子程序在流程控制中拥有较高的优先级。
中断过程包括中断请求过程以及中断响应过程。处理器接受中断源发出的中断请求指令,对其进行响应,进入中断响应过程。其中所述的中断源也就是发出中断请求的设备或者服务,即处理器的寄存器的某位发生变化。现有技术中,对中断进行的响应过程一般包括:首先处理器进入中断入口;接着,执行开或者关中断的操作;接着处理器进入中断时的现场进行保护以及对中断源进行判断,并且当确定了中断源以后,再对其所请求的中断进行处理,执行中断服务程序;当中断处理完成之后,处理器执行清除中断操作,恢复现场,退出中断。
近年来,微控制器的中断系统的设计获得了广泛的普及,很多公司如Microchip、Motorola、Atmel、TI 等。这些公司生产的微控制器芯片都携带有丰富的中断资源,但是这些中断的处理方式比较单一,一般都是仅仅有个优先级而已。某一时刻两个以上的中断到来时,仅靠优先级的方式去处理多个中断,会造成有的中断不能快速及时执行,使系统的可靠性和实时性得不到保证,以至于在工业方面不能很好发挥中断资源的作用。
发明内容
本发明的目的在于提供一种处理微控制器多中断系统的实现方法,可以清楚的判断中断源的类型,根据中断请求的类型执行相应的中断服务程序,克服了以前的完全依靠优先级处理多个中断的单一方式,优化多中断系统的机构,保证系统的可靠性和实时性,使得在工业控制等方面可以最佳发挥中断系统的资源。
本发明提供的处理多中断系统的方法,主要包括:
确定实际中的某个系统所需要的中断源类型和数目;
根据上述中断,设置中断向量,编写各自的中断服务程序;
合理安排各个中断的开启时间,即采用延时机制,避免两个以上的中断同一时刻到来,却由于中断优先级的高低导致有的中断不能即刻执行。
本发明提到的中断源基本上分为两种类型:一类是事件触发型中断,另一类是状态中断。
对于事件触法型中断(如定时器计数溢出、比较,通信收发完成等),一旦事件产生,硬件就会将相应的中断标志位置位,申请中断处理。MCU响应中断时,程序计数器PC将自动指向该中断的中断向量,由中断向量处开始执行相应的中断服务程序,同时硬件自动清除对应的中断标志。这些标志位也可以有软件通过写1来清除(不是写0)。当一个符合要求的中断触发置位了中断标志位,但相应的中断允许为是0时,这个中断标志将刮起为1,一直保持到中断被响应或者中断标志被软件清为0。同样,当一个或多个符合条件的中断触发置为了中断标志位,但全局中断允许为0时,这些中断标志将刮起保持为1,直到全局中断允许置1。当全局中断允许位为1时,如有多个中断申请存在,MCU将依据中断的优先级先后响应中断。
对于一些状态中断(如外部电平中断)来讲,是不需要中断标志的。一旦中断状态成立(如低电平申请中断),将一直不断地向MCU申请中断。如果在中断允许响应前,中断状态成立消失(如低电平变为高电平),该中断申请即宣告终止。
本发明依据实际系统中需要的中断数目,设置中断向量,并由中断向量对中断类型进行分类,对每个中断编写自己的中断服务程序。系统进入中断后,会自动保护断点,进行PC压栈,当退出中断时,恢复现场,PC退栈,实现CPU的“并行”处理。
综上所述,本发明所述的多中断系统的实现方法,同样包括中断允许、中断请求、中断响应、中断退出四步操作,可以清楚的判断中断源的类型。且本发明的中断系统是依据实际的微控制器的功能模块设计的,有两种基本的中断类型,即事件触发型中断和状态中断,充分利用了微控制器携带的丰富中断资源。在本发明中通过对微控制器寄存器的设置可以选择中断源的数目和中断向量表,采用软件延时的方法处理多个中断的优先级,使得编写程序结构化、清晰化。本发明中的中断源数目、类型都可以扩展,理论上采用软件延时的方法可以处理无穷多个中断,实现系统的高效率高性能扩展。
附图说明
图1 为本发明处理多中断系统方法的实施流程图;
图2 为本发明所述的两类基本中断资源类型示意图;
图3 为所述的定时器的中断实施流程示意图;
图4 为所述的一个典型的中断服务子程序的编写流程图;
图5 为应用本发明的一个实际方案的具体实施流程图。
具体实施方式
本发明所述的处理多中断系统的方法,其核心思想包括:依据实际系统中所需要的中断源的数目和类型,设置中断向量,编写各自的中断服务程序;采用软件延时的方法,合理安排各个中断的开启时间,从而避免多个中断在同一时刻到来,由于优先级的高低有的中断不能即刻执行;采用这种方法,在某一个确定的时间段内,系统只有一个中断在产生,多中断而不竞争。
现结合附图,对本发明的具体实施方法做详细的说明。
本发明的整体框架如图1所示,系统上电复位后,程序总是从main函数处开始执行,在main函数的开头开启全局中断允许,然后设置一个死循环,在这个循环里,设置各个中断的先后开启顺序,中断之间采用延时机制。其中,中断的开启只是执行一次,程序就会永久的中断允许。所有的中断子程序设置不同的标志位,都放在main函数之外,而且中断子程序尽可能的短暂,具体要实施的内容用标志位拿到main函数的循环里面执行。各个中断开启先后之间的延时时间,用在线调试或者对汇编代码的估算得出,即在延时的时间里,中断就会到来,然后跳出main函数的主循环,转到相应的中断服务程序出。从整体上看,系统有很多的中断组成,但实际在某一个特定的时刻,只是一个中断在产生,只其一个在占用着CPU的资源。
本发明的图示1上所述的中断资源类型,如图2所示,基本上分为事件触发型中断和状态中断两类。事件触发型中断包括定时器计数溢出中断,捕捉/比较/脉宽调制中断,通信端口收发完成中断,ADC转换中断等。这些中断一旦事件产生,硬件就会将相应的中断标志位置位,申请中断处理。MCU响应中断时,程序计数器PC将自动指向该中断的中断向量,由中断向量处开始执行相应的中断服务程序,同时硬件自动清除对应的中断标志。
作为事件触发型中断的一个例子,图3所示的是定时器中断示意图。首先设置定时器的工作方式,对其初始化,然后装载计算后的计数初值,定时器开始计数,当计数值达到最大值,下一个计数脉冲到来时恢复为0,同时置位溢出标志位TOVn为1,即一个中断请求信号。由于预先设置了定时器中断允许使能,该中断请求转换成有效的中断响应,程序依据中断向量执行中断处理程序,TOVn由硬件自动清零,此时装载计数器的初值,其继续向上计数,等到溢出后会申请另一个中断。
对于一些状态中断,包括复位中断,外部电平变换中断等。他们是不需要中断标志的,只要设置了端口电平变化或端口沿变化中断使能,一旦中断状态成立(如低电平申请中断),将一直不断地向MCU申请中断。如果在中断允许响应前,中断状态成立消失(如低电平变为高电平),该中断申请即宣告终止。
本发明所述的多中断系统实现方法,有中断允许(使能)、中断请求、中断响应、中断退出四步操作组成。其中中断使能是通过设置微控制器响应的寄存器位有效来实现的,当中断源的中断标志位置为1后产生中断请求,系统响应中断,进入中断子程序,自动保护断点,进行PC压栈,当退出中断时,恢复现场,PC退栈,实现CPU的“并行”处理。
一个典型的中断服务子程序的流程如图4所示,一般有保护现场、中断服务、恢复现场三个环节组成,在编写中断服务子程序时应注意:(1)用户应首先保护现场数据免受破坏,还应注意要先关闭中断,然后再保护现场或恢复现场,然后再开中断,保证保护现场或恢复现场数据时不被其它中断请求破坏,保证中断返回时能恢复现场,使微控制器能继续正确执行中断前的工作;(2)所编写的中断程序应尽可能的短暂,在中断子程序和主程序中用标志位切换,将实际中要大段处理的程序用标志位拉入main函数的循环中,便于计算延时和排布不同的中断。
下面结合实际项目中的一个案例,如图5所示,具体细说该多中断系统的实现方法。项目中用到了五个中断:串口1用于主控制器与模拟量输入输出模块、数字量输入输出模块之间的通信;串口2用于放置在现场的显示装置,如触摸屏、平板机与主控制器的通信;串口3用于连接到生产现场的中控室去,即实现远程的数据传输,三个串口都是用到了接受中断;定时器1用来产生1秒的采样间隔,根据采集的数据实时的调整控制算法;定时器3的比较中断用来产生周期一定频率变化的波形,用于控制算法的DAC输出,控制现场中的仪器仪表。
系统上电复位后,首先寻找main函数的入口地址,main函数完成系统的一切初始化等工作后,进入死循环。在循环中,首先开启串口1,以实现主控制器与模拟量、数字量模块的通信,然后延迟一段时间等待串口1的接受中断处理完从子模块中上传来的数据;然后开启串口2,当显示装置给主控制器发送指令后,延迟的时间正是要等待串口2的接受中断处理完这些代码,然后根据显示装置发送的命令执行下面的程序;最后要开启的串口3,其延时的时间也是有远程中控室传来的指令在串口3的接受中断子程序执行的时间,执行完返回到主程序后,将数据传输到中控室;在循环的结尾处,相继开启定时器1的计数和定时器3的比较中断,然后根据上面循环代码的执行时间,加入一个总的延时,用此凑足1秒的时间,实现定时器1的采集中断。
整个系统看上去是有五个中断组成的,而且中断的类型不一,但每个中断都不能缺少。采用本发明的多中断处理方法后,在一个特定的延时阶段,相应的中断请求就会发生,然后转入对应的中断子程序,延时结束后中断程序执行完毕返回主程序,避免后续操作收到未退出中断的影响。这种逐一处理各个中断的方式,相比以前的单纯依靠中断的优先级高低处理方式,可以避免不同的中断相同时刻到来,导致优先级较低的中断不能即刻执行。
最后应当说明的是:上述实例仅用以说明本发明的一个技术方案,而不是对其限制;尽管参照上述实例对本发明方法进行了详细的说明,本领域的普通人员对其理解后,可以对上述所提及的技术方法进行修改,或者对其中部分技术特征进行必要的等同代换;而这些修改或者代换,并不能使相应技术方案的本质脱离本发明所述的实例技术方案的内涵和范围。
说明书附图
图 1图 2
图 3
图 4
图 5