中断方法 【技术领域】
本发明涉及硬件处理技术,特别是中断方法。
背景技术
中断是单片机实时地处理内部或外部事件的一种内部机制。当某种内部或外部事件发生时,单片机的中断系统将迫使处理器暂停正在执行的程序,转而去进行中断的处理。中断处理完毕后,处理器重新返回被暂停的程序处,继续执行下去。
中断过程包括中断请求过程以及中断响应过程。处理器接收中断源所发出的中断请求指令,对其进行响应,进入中断响应过程。其中,所述中断源也就是发出中断请求指令的设备或者服务。现有技术中,对中断进行响应的过程一般可包括:首先处理器进入中断入口;接着,执行关中断,或者开中断的操作;接着,处理器对进入中断时的现场进行保护以及对中断源进行判断,并且当确定了中断源之后,对其所请求的中断进行处理;当中断处理完成之后,处理器执行清中断操作。然后,处理器进行现场恢复,退出中断。在不同的情况下,上述步骤的顺序还可根据实际情况进行调整;例如,在处理某个具体的中断时,处理器先保护现场,然后执行关中断,或者在执行关中断之后,先执行清中断操作,然后再处理所述中断。
上述所提到的清中断,具体来说,通常是指清除中断标识的操作。在单片机中,一般地,常以寄存器的某一位作为中断标识位,并以该中断标识位为高电平或低电平来标识单片机是否处于中断状态。举个例子,若以所述中断标识位为高电平作为处于中断状态的标识,当中断操作完成之后,在清中断操作中,处理器通过向寄存器发出清中断指令,将该中断所对应的中断标识位清零,或置为低电平,从而完成该中断操作,使单片机处于非中断状态。
在实际实现中,清中断操作不仅包括软件实现部分,即通过发出清中断指令使中断标识位发生改变,还包括硬件执行部分,即使软件实现的改变通过中断寄存器中与所述中断标识位对应的引脚上的电位表现出来。此外,通常处理器通过读取中断寄存器的引脚以获得中断标识位的电位,中断寄存器无法自动向外部发出信号,并且一般来说,中断标识位采用“读-清”的中断记录方式,即当读取了中断标识位的当前状态后,中断标识位将自动清零,这种记录方式使得反复多次地读取会造成紊乱。
由于软件指令在缓存中执行速度很快,而硬件执行相对比较慢,两者之间的时间差异会使得清中断操作出错,从而导致单片机系统出现不稳定或使处理器进行不必要的延时。具体来说,在程序设计上,当处理器执行完毕清中断操作的相关指令之后,处理器即认为已执行了清中断的操作,或者说清中断操作已完成,但硬件执行较慢或硬件执行出现问题,尽管中断标识位的电位已经发生改变,但是中断寄存器对应的引脚上仍保持原先的电位。在这种情况下,当处理器将错误地认为仍处于中断状态,于是将一直处于等待状态且不对后续的中断请求进行响应,从而造成不必要的再次中断,或者造成单片机系统的紊乱。
【发明内容】
本发明解决的问题是中断过程中,由于软硬件处理速度的差异而造成中断已被清除的假象,从而对系统的后续运行造成隐患。
为解决上述问题,本发明提供了一种中断方法,至少包括中断入口步骤,中断处理步骤,清中断步骤和退出步骤,所述清中断步骤包括执行清中断指令;所述清中断步骤还包括:在执行清中断指令后,根据硬件清中断的时间,进行延时。
可选的,所述延时的时间在处理器对同样类型的中断执行清中断指令时获得,包括:测量清中断操作指令完成与硬件完成的时间差。
可选的,所述延时的时间在所述处理器对同样类型的中断执行清中断指令时获得,包括:分别测量清中断操作指令完成的时间以及清中断操作硬件完成的时间;计算清中断操作指令完成与硬件完成的时间差。
可选的,通过示波器分别测量清中断操作指令完成的时间与硬件完成的时间。
可选的,所述通过示波器分别测量清中断操作指令完成的时间与硬件完成的时间,包括:在处理器执行清除中断指令之后,通过所述示波器的第一通道记录处理器引脚所输出的第一指示信号的电平变化,获得起始时间点;当硬件完成清中断操作之后,通过所述示波器的第二通道记录处理器中断引脚上中断指示信号的电平变化,获得结束时间点;计算所述起始时间点与所述结束时间点的差值,获得清中断操作指令完成与硬件完成的时间差。
可选的,所述起始时间点为所述第一指示信号由高电平变为低电平时所述第一指示信号为低电平的时间,且所述结束时间点为所述中断指示信号由低电平变为高电平时所述中断指示信号为高电平的时间;或者所述起始时间点为所述第一指示信号由低电平变为高电平时所述第一指示信号为高电平的时间,且所述结束时间点为所述中断指示信号由高电平变为低电平时所述中断指示信号为低电平的时间。
可选地,所述获得起始时间点和获得结束时间点包括:当所述第一指示信号处于上升沿的30%至70%范围内,记录所述起始时间点,且当所述中断指示信号处于下降沿的30%至70%范围内,记录所述结束时间点;或者当所述第一指示信号处于下降沿的30%至70%范围内,记录所述起始时间点,且当所述中断指示信号处于上升沿的30%至70%范围内,记录所述结束时间点。
可选的,所述根据硬件清中断的时间,进行延时还可包括:根据第一预定时间,再次进行延时。
与现有技术相比,本发明具有以下优点:通过在处理器执行清除中断标识的操作之后,先根据硬件清中断的时间进行延时,然后才退出中断,使得系统能够在执行下一步操作之前完全退出中断,避免了后续操作受到未退出的中断的影响,保证了系统的稳定性。
【附图说明】
图1是本发明中断方法实施方式的流程示意图;
图2是获得本发明中断方法步骤S302中延时时间的一种实施方式的流程示意图;
图3是图2中步骤D1实施方式的流程示意图;
图4是本发明中断方法具体实施例中通过示波器所获得第一指示信号与中断指示信号的信号示意图。
【具体实施方式】
发明人正是发现由于软件实现清中断指令与处理器芯片中断引脚的硬件执行之间存在着时间差异,在清中断的操作过程中,会对系统的后续运行造成隐患,因此,提供了本发明中断方法。在本发明中断方法的实施方式中,当处理器执行清除中断标识的指令之后,根据硬件执行清中断的时间进行延时,然后才执行退出步骤,退出中断。
参考图1,本发明中断方法实施方式中,至少包括中断入口步骤S100,中断处理步骤S200、清中断步骤S300和退出步骤S400,其中,清中断步骤至少包括:步骤S301,执行清中断指令,即执行清除中断标识的指令,步骤S302,根据硬件执行清中断的时间,进行延时。
其中,中断入口步骤S100,即当接收到中断请求信号之后,开始对所述中断请求信号进行响应,具体来说,可包括:步骤S101,确定中断源;步骤S102;关中断或者开中断;步骤S103,对中断现场进行保护。其中,可根据中断的具体情况,调换中断入口步骤S100中各步骤的顺序,使步骤S101、步骤S102和步骤S103符合待执行中断的要求。所述调换并不对本发明造成影响。
响应了中断请求之后,接下来,处理器执行中断处理步骤S200,完成中断操作的具体指令。中断操作的内容可根据实际情况以及中断源的不同属性,由中断指令而确定,其中,所述中断操作的内容并不对本发明中断方法的实施方式造成影响。
完成中断处理步骤S200之后,处理器进行清中断步骤S300,并且在确保硬件已经完成了清中断操作之后,执行退出步骤S400。其中,退出步骤S400具体可包括恢复中断现场;例如在8086处理器中,当所述中断处理完毕后,处理器将CS和IP以及其他寄存器的数值恢复到和中断执行前的一样,以便主程序的继续执行。
在清中断步骤S300中,首先执行步骤S301,具体来说,即完成清中断操作的指令,对中断标识位重新赋值。由于程序在缓存中执行速度很快,往往指令的运行在硬件完成相应操作之前便可完成,因此在执行步骤S301即清除中断标识的指令之后,先执行步骤S302,即进行预定时间的延时,等待相关硬件完成相应的操作,然后再执行退出步骤S400,退出中断。
在一种具体实施方式中,参考图2,步骤S302中所延长的时间可当该处理器对同样类型的中断执行清中断指令时,通过以下步骤进行测量和计算而获得,具体来说可包括:步骤D1,分别测量清中断操作指令完成的时间以及清中断操作硬件完成的时间;步骤D2,计算清中断操作指令完成与硬件完成的时间差。所述时间差即为步骤S302中,当该处理器对同样类型的中断进行清中断操作时,在执行完清中断指令后所需要延长的时间。
参考图3和图4,在一个具体的实施例中,可通过示波器对清中断操作指令完成与硬件完成的时间差进行测量。
首先,连接示波器与处理器芯片。具体地,将示波器的第一通道与处理器芯片通用输入输出(GPIO)接口的引脚相连接,用于接收处理器执行清中断指令之后所产生的第一指示信号;并且,将示波器的第二通道与处理器芯片中断引脚相连接,用于接收该中断引脚所反馈的中断指示信号。
接着,执行步骤D201,在处理器执行清除中断指令之后,获得起始时间点。具体地,在处理器执行清除中断指令之后,通过GPIO接口与所述示波器相连接的引脚输出高电平的第一指示信号。示波器记录该引脚所述第一指示信号波形变化,获得所述第一指示信号出现高电平的时间,并将所述时间作为起始时间点T1。在实际情况中,起始时间点T1可在所述第一指示信号处于上升沿时进行记录。在具体实施例中,可当所述第一指示信号的值为该高电平的30%至70%范围内时,记录起始时间点T1,例如,所记录的起始时间点T1为所述第一指示信号上升沿的60%。
然后,执行步骤D202,当硬件完成清中断操作之后,获得结束时间点。具体地,当硬件执行清中断操作之后,中断请求寄存器中与中断标识位相连接的中断引脚也被重新赋值,该引脚上的所述中断指示信号变为低电平。所述示波器通过其第二通道对所述中断指示信号的波形变化进行记录,并获得所述中断指示信号出现低电平的时间,以及将所述时间作为结束时间点T2。在实际情况中,结束时间点T2可在所述中断指示信号处于下降沿时进行记录。在具体实施例中,可当所述中断指示信号的值为该低电平的30%至70%范围内时,记录结束时间点T2,例如,所记录的结束时间点T2为所述中断指示信号下降沿的40%。
最后,执行步骤D203,计算清中断操作指令完成与硬件完成的时间差,所述时间差ΔT可通过计算结束时间点与起始时间点之间的时间间隔而获得,即ΔT=T2-T1。
通过测量,获得清中断操作指令完成与硬件完成的时间差之后,使处理器从指令完成的时刻起,即从所记录的开始时间点T1开始,延时所述时间后,再进行下一步指令操作。
在上述实施方式中,所述第一指示信号可由低电平变为高电平,也可由高电平变为低电平,同样地,所述中断指示信号可由高电平变为低电平,也可由低电平变为高电平,其设置仅于具体中断以及处理器的设计有关,不影响本发明构思。
在其它实施方式中,还可将所述测量和计算的步骤反复多次进行,计算多次所获得的所述时间差的平均值并将所述平均值作为步骤S302中所延长的时间。
此外,获得步骤S302中所延长的时间的测量和计算步骤还可用于对处理器执行清中断指令后的等待状态进行检测。由于硬件差异以及设计要求,清中断指令完成的时间以及硬件完成的时间之间可允许有极小的时间差异存在,即允许误差值。当处理器开始清中断操作时,通过所述测量和计算步骤获得清中断操作指令完成与硬件完成的时间差,并将所述时间差与所述允许误差值进行比较,如果所述时间差大于允许误差值,则所述等待状态为异常,反之则为正常。一旦检测出处理器处于异常等待时,需要尽快使处理器退出异常等待,以免造成单片机系统紊乱。
在另一种具体实施方式中,步骤S302中所延长的时间还可当该处理器对同样类型的中断执行清中断指令时,直接测量清中断操作指令完成与硬件完成的时间差而获得。
在本发明中断方法的另一种实施方式中,当对处理器的处理速度要求不高时,步骤S302还可包括:根据第一预定时间,再次进行延时。为确保硬件已完成清中断的操作,可适当地增大延长的时间,例如在计算获得所述清中断操作指令完成与硬件完成的时间差之后,可再延长所述第一预定时间,其中,所述第一预定时间不对处理器的数据处理造成影响。
在中断入口步骤S100中,所述中断请求信号可由中断源发出。所述中断源,也就是请求中断的服务或者设备,向处理器发出中断请求信号,使所述处理器暂时中断当前程序的执行而转去执行所请求的处理程序。所述发出中断请求信号,可包括通过使中断请求寄存器的一位或几位中断标识位处于有效状态,向处理器发出请求。
在步骤S101中,确定中断源还可包括对所述中断请求信号进行管理,具体来说,处理器可通过中断屏蔽寄存器对所述中断请求信号进行管理。单片机系统可具有多级中断,每级中断可以对应一个中断源,也可以对应多个中断源,一般来说,多级中断之间可以进行嵌套,但是同级之中对应于不同中断源的各个中断则不可以进行嵌套,也就是说,在同等优先级的不同中断源所产生的中断中,只有处理完了前一个中断,才能对后一个中断进行处理。例如,处理器正在处理中断源A所发出的中断请求,此时中断源B发出新的中断请求信号,中断源B和中断源A属于同等优先级,则中断屏蔽寄存器将中断源B所发出的中断请求信号屏蔽,直到处理完中断源A所发出的中断请求信号,才解除屏蔽,将中断源B所发出的中断请求信号发送给处理器。
在步骤S102中,关中断也就是处理器每次仅处理单个中断操作,即处理器先对当前正在处理的中断进行处理,等当前中断处理结束之后再响应其它的中断;而开中断与关中断正好相反,即处理器允许多个中断嵌套操作,也就是说,在当前中断未处理结束之前,处理器先对其它中断进行响应和处理。
在步骤S103中,对中断现场进行保护是指保存进入中断时的系统参数以及返回端口等在中断返回时可继续使用所述中断现场的内容。具体来说,可包括,保护断点,即保护主程序的指令位置,也就是说,保护在没有中断的情况下,处理器按照正常顺序应执行的下一条指令的地址。具体的,在8086处理器中,当对中断现场进行保护时,将主程序的指令位置(CS和IP)保存至堆栈;必要时,还需要保存所有通用寄存器的数值。
其中,对中断现场进行保护的操作,可以发生在处理器在不同优先级的中断源所发出的中断请求之间进行切换的时候,也可以发生在处理器由执行其它程序进入到中断处理的时候。
具体来说,处理器在处理优先级低的中断源所请求的中断时,接收到优先级高的中断源所发出的中断,接下来,处理器首先对当前所处理的中断现场进行保护,然后对优先级高的中断源所发出的中断请求进行处理,等其处理结束后,再返回处理优先级低的中断源所请求的中断。例如,当中断源B的优先级高于中断源A的优先级时,系统将先保存对中断源A的中断请求进行处理时的各个系统参数,即中断现场;然后,处理中断源B所请求的中断;当中断源B所请求的中断处理结束之后,返回所保存的中断现场,继续处理中断源A所发出的中断请求。
在其它实施方式中,对中断现场进行保护也可以是当处理器在执行其它程序时,接收到中断请求后,处理器首先对当前所处理的现场进行保护,然后才开始对中断源所发出的中断请求进行处理。
本发明实施方式通过在处理器执行清除中断标识的操作之后,先根据硬件清中断的时间进行延时,然后才退出中断,避免了由于软硬件的不同步,导致系统在退出中断时会出现紊乱,使得系统能够在执行下一步操作之前完全退出中断,避免了后续操作受到未退出的中断的影响,保证了系统的稳定性。并且,本发明实施简便,应用成本低,能较精确的估计出进行延时,不影响处理器主程序的运行顺序。
虽然本发明已通过较佳实施例说明如上,但这些较佳实施例并非用以限定本发明。本领域的技术人员,在不脱离本发明的精神和范围内,应有能力对该较佳实施例做出各种改正和补充,因此,本发明的保护范围以权利要求书的范围为准。