一种异步中断处理方法及中断控制器与流程

文档序号:12664882阅读:301来源:国知局
一种异步中断处理方法及中断控制器与流程

本发明属于通信技术领域,具体地说,是涉及一种异步中断处理方法及中断控制器。



背景技术:

在微处理器中,中断是一种重要的通信、控制方法之一。对处理器核而言,其本身不产生中断,所有中断都来自于处理器核外,外设通过中断的形式请求处理器核执行对应的程序,处理器核将暂时停止当前处理的程序,转而去响应中断请求,在完成中断服务程序之后,返回继续执行被中断的程序。

因为中断来自核外甚至是处理器外部,所以一般情况下将中断控制器放置于核外。而且因为中断控制器并不需要较高的运行速度,在SoC上,中断控制器往往挂在低速外设总线上,内核与中断控制器之间相隔多个时钟域。在这种情况下,即使内核时钟与中断控制器所用时钟是同源时钟,但也不便于按照同步时钟设计,所以中断控制器与内核之间的部分通信按照异步时钟处理。

在某些中断驱动的应用中,要求内核具有较快的中断响应速度。在现有的中断响应机制下,通常按照以下流程进行:中断控制器采样中断源给出的中断申请信号;向处理器核请求中断;处理器核响应中断申请,并获取中断向量,然后开始执行中断服务程序。其中获取中断向量的方式在不同的设计中具有不同的表现方式,在某些设计中,内核会通过SoC总线结构获取中断控制器中的寄存器信息获取中断向量;某些设计中,内核继续通过与中断控制器之间的直接通信,获取中断向量。

在现有的技术中,异步设计时中断响应速度较慢。其主要原因在于响应一次中断需要内核与中断控制器之间进行多次异步通信,而异步信号至少需要使用双周期采样同步电路,同步电路可保证异步信号的稳定性,但也大大降低了通信效率。



技术实现要素:

本发明为了解决现有异步中断响应时间长,通信效率低的技术问题,提出了一种异步中断处理方法,可以解决上述问题。

为了解决上述技术问题,本发明采用以下技术方案予以实现:

一种异步中断处理方法,包括以下步骤:

(11)、内核判断当前状态是否允许中断,若允许,则发出中断向量请求信号iv_req;

(12)、中断控制器接收到所述中断向量请求信号iv_req,根据当前中断控制器中的状态,作出回应;

(13)、若所述内核检测到所述中断控制器发出的中断向量请求反馈信号,则采样中断向量iv,并将中断向量请求信号iv_req置为无效,并根据内核的当前状态确定执行或者不执行该中断;

(14)、若步骤(13)中所述内核执行中断,当中断返回指令执行完毕后,内核向中断控制器发出中断返回握手信号rti_req,中断控制器接收到该信号之后,返回握手信号rti_ack。

进一步的,步骤(12)中所述中断控制器根据当前中断控制器的状态,作出的回应包括:

(121)、若所述中断控制器中存在有效中断请求,则所述中断控制器记录下中断号int_no,并向内核发出中断向量请求反馈信号iv_ack及其中断向量iv;

(122)、若所述中断控制器中不存在有效中断请求,保持中断向量请求反馈信号iv_ack为无效。

进一步的,步骤(13)中根据内核的当前状态确定执行或者不执行该中断的判断方法为:

(131)、内核检测当前状态,如果仍然允许响应中断,则从所述中断向量所指地址中对中断服务程序获取指令并执行;

(132)、如果内核不允许响应中断,则不对所述中断向量处理。

进一步的,步骤(13)中,中断控制器在所述内核将中断向量请求信号iv_req置为无效后,将中断向量请求反馈信号iv_ack置为无效,内核检测到无效的中断向量请求反馈信号iv_ack之后,返回步骤(11),在再次允许中断或者是允许中断嵌套的情况下,请求下一个中断。

进一步的,内核对中断的首条指令执行完毕的同时,向中断控制器发出中断执行握手信号isr_serving_req,中断控制器接收到该中断执行握手信号isr_serving_req之后,返回握手信号isr_serving_ack,同时根据步骤(22)中所记录的中断号int_no进行标记;

步骤(14)中返回握手信号rti_ack之后,同时将所述标记清除。

进一步的,中断控制器返回握手信号isr_serving_ack之后,根据步骤(121)中所记录的中断号int_no将其所记录的中断申请清除。

基于前面任一项所述的异步中断处理方法,本发明同时提出了一种中断控制器,包括寄存器组、控制状态机、中断采样接口、内核接口、外设总线接口;

所述寄存器组包括中断采样寄存器、中断服务寄存器和中断向量寄存器文件;

所述中断采样寄存器用于记录中断源的有效中断请求;

所述中断服务寄存器用于记录内核正在处理的中断;

所述中断向量寄存器文件用于记录中断向量;

所述内核接口包含一对中断向量请求信号接口、中断向量接口、一对中断执行握手信号接口,一对中断返回握手信号接口;

所述外设总线接口一端与外设总线连接,一端与所述寄存器组连接,用于读写所述寄存器组;

所述中断采样接口一端与中断源连接,一另外端与所述中断采样寄存器连接,用于采样所述中断源的有效中断请求,并保存于所述中断采样寄存器中;

所述控制状态机通过内核接口与内核进行握手,以及控制内核在中断响应过程中对中断服务寄存器进行改写。

进一步的,所述中断控制器还包括中断屏蔽寄存器,用于屏蔽中断,内核或其他连接在所述外设总线上的主设备通过设置该中断屏蔽寄存器用于屏蔽对应中断的申请。

进一步的,所述中断控制器还包括最高优先级有效中断判断单元,用于使用所述中断采样寄存器、中断屏蔽寄存器、中断服务寄存器中的数据给出当前最高优先级的有效中断,未被中断屏蔽寄存器屏蔽的中断中,若中断采样寄存器中存在比当前中断服务寄存器中标记正在处理的中断优先级更高的中断,则给出其中优先级最高的中断,若不存在正在处理的中断,则直接给出中断采样寄存器中有效的最高优先级中断,否则给出无有效中断信号。

与现有技术相比,本发明的优点和积极效果是:本发明的异步中断处理方法,不再采用中断控制器请求内核的通信方式,而是采用由内核请求中断控制器的通信方式,并且直接请求中断向量的方式,这种中断响应方法省去了现有技术中冗长的互相握手操作,当中断出现时,直接向内核给出中断向量,内核在获得向量之后,无需其他操作,即可对中断服务程序进行取指执行。采用本发明的中断处理方法,极大地加快了异步中断控制器中断的响应速度,同时,本发明还给出了一种使用本发明中断处理方法的中断控制器,该中断控制器完全契合本发明给出的中断处理方法,且具有简洁、灵活等特点。

结合附图阅读本发明实施方式的详细描述后,本发明的其他特点和优点将变得更加清楚。

附图说明

为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。

图1是本发明所提出的异步中断处理方法的一种实施例流程图;

图2是本发明所提出的中断控制器的一种实施例原理方框图。

具体实施方式

下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。

两个异步的模块之间进行通信,使用握手是最简单的通信方式。为了防止出现亚稳态,在握手信号的末端,都需要加入同步器。一个信号从源端传递至目的端,至少需要经过目的端的两个时钟周期,才可被目的端检测到。在目的端检测到之后,还需要返回有效的反馈信息,同样需要经过源端的两个时钟周期之后才可被源端检测到,至此,握手操作才进行一半。所以如果一次通信事件需要在两个异步模块之间进行多次握手通信,通信开销较大。

在现有技术中,通常由中断控制器向内核发起中断请求,在内核确认后,会向中断控制器发出响应,并请求更具体的信息以确定中断服务程序的入口地址。在这种操作异步中断控制器中,至少需要经过两次握手才可完成。而这两次握手中的通信开销,对于需求高速中断响应的处理器中是较为昂贵的。

针对上述问题,本发明提出一种快速的中断处理方法,改中断控制器主动发起请求的传统做法,下面以具体的实施例进行详细说明。

实施例一

本实施例提出了一种异步中断处理方法,如图1所示,包括以下步骤:

S11、内核判断当前状态是否允许中断,若允许,则发出中断向量请求信号iv_req;本步骤中,首先内核主动发起请求,而且内核直接请求中断向量,这样不仅可以免去多次异步握手,极大地加快了异步中断控制器中断的响应速度。

S12、中断控制器接收到所述中断向量请求信号iv_req,根据当前中断控制器中的状态,作出回应;当中断控制器接收到有效中断后,给出对应中断向量,内核接收到中断之后,无需返回任何信息,直接对中断服务程序进行取指,大大加快了中断的响应速度。

S13、若所述内核检测到所述中断控制器发出的中断向量请求反馈信号,则采样中断向量iv,并将中断向量请求信号iv_req置为无效,并根据内核的当前状态确定执行或者不执行该中断;

S14、若步骤S13中所述内核执行中断,当中断返回指令执行完毕后,内核向中断控制器发出中断返回握手信号rti_req,中断控制器接收到该信号之后,返回握手信号rti_ack。

步骤S14是在内核执行所请求中断的情况下做出的,当中断执行完毕后,内核与中断控制器之间进行一次握手通信,确保本次中断执行的正确性。

只要内核允许中断,就会如步骤S11所记载,向中断控制器给出中断向量请求信号,然后在步骤S12中等待中断。所以一旦中断源所在设备向中断控制器发出中断,中断控制器采样后直接给出中断向量,内核得到中断向量之后立即对中断服务程序进行取指,整个响应过程没有任何迟滞或冗余的通信,极大地提高了中断响应速度。

本方法由中断控制器完全控制中断的相关操作,内核只负责执行中断服务程序,并通知中断控制器中断服务程序的执行情况(开始执行、执行完毕)。这也就要求内核与中断控制器之间的信息是同步的,即内核响应的中断与中断控制器认为内核正在响应的中断是同一个。所以在步骤S11中,要求一旦中断控制器给出中断向量请求之后,就无法撤销,这也是也是握手的基本要求:握手信号一旦发出,在接收端确认收到该信号之前,不可改变已经发出的握手信号。

在步骤S12中,中断控制器根据当前中断控制器的状态,作出的回应包括:

S121、若所述中断控制器中存在有效中断请求,则所述中断控制器记录下中断号int_no,并向内核发出中断向量请求反馈信号iv_ack及其中断向量iv;

S122、若所述中断控制器中不存在有效中断请求,保持中断向量请求反馈信号iv_ack为无效。

也就是说,内核在步骤S11中向中断控制器给出中断向量请求信号之后,即进行等待,中断控制器在步骤S12中检查当前是否具有来自于中断源的中断请求,若有,则采样后直接向内核发送中断向量,若没有,则不发送中断向量,由于步骤S11中内核发出的中断向量请求信号iv_req一旦发出就不能撤,因此, 中断控制器在步骤S12中若当前不存在有效中断请求,则会周期性的检查,直至出现来自于中断源的中断请求,则按照步骤S121中所记载的,直接向内核发出中断向量请求反馈信号iv_ack及其中断向量iv。

在使用异步中断控制器的系统中,由于内核与中断控制器的状态随时在变化,这就使得握手操作出现了一定的不确定性。在内核中,随时可能因为配置寄存器的改写、出现异常例外等操作而屏蔽所有外部中断,而在中断控制器侧,随时有可能出现更高优先级的中断、或者电平触发中断撤销请求。

而内核运行速度将远高于中断控制器,若允许内核握手随意发出握手信号,很有可能出现内核第二次握手信号与中断控制器第一次握手信号进行了握手,但是中断控制器却记录了第二次握手给出的中断,这就容易导致两侧信息不同步,最终造成错误。

为了防止上述错误的发生,内核在步骤S13中根据当前状态确定是否执行该中断。

作为一个优选的实施例,步骤S13中根据内核的当前状态确定执行或者不执行该中断的判断方法为:

S131、内核检测当前状态,如果仍然允许响应中断,则从所述中断向量所指地址中对中断服务程序获取指令并执行;

S132、如果内核不允许响应中断,则不对所述中断向量处理。该操作视为撤销中断向量申请,目的是确保后续的中断请求与响应的步骤正确有序进行,本步骤是放在步骤S12之后,也就是说,必须在中断控制器响应中断之后才可执行撤销。

在步骤S13中,无论内核是否准备对中断服务程序进行取指,都需要完成握手并回到S11开始下一次中断响应。这既为中断嵌套提供了条件,也加快了中断嵌套的响应速度。

步骤S13中,中断控制器在所述内核将中断向量请求信号iv_req置为无效后,将中断向量请求反馈信号iv_ack置为无效,内核检测到无效的中断向量请求反馈信号iv_ack之后,返回步骤S11,在再次允许中断或者是允许中断嵌套的情况下,请求下一个中断。

在步骤S14中,内核对中断的首条指令执行完毕的同时,向中断控制器发出中断执行握手信号isr_serving_req,中断控制器接收到该中断执行握手信号isr_serving_req之后,返回握手信号isr_serving_ack,同时根据步骤S22中所记录的中断号int_no进行标记;该标记用于防止中断重复申请与中断嵌套的优先级判断。

步骤S14中返回握手信号rti_ack之后,同时将所述标记清除。

为了防止中断重复申请,中断控制器返回握手信号isr_serving_ack之后,根据步骤S121中所记录的中断号int_no将其所记录的中断申请清除。中断控制器返回握手信号isr_serving_ack之后说明该中断已经执行完毕,因此,及时将其从中断控制器中清除,防止再次执行。

实施例二

基于实施例一中所记载的异步中断处理方法,本实施例提出了一种中断控制器,本中断控制器用于响应实施例一中所记载的步骤,因此,上述步骤在实施例一中已经详细说明,在本实施例中不再赘述,本实施例对该中断控制器的组成及功能部分详细说明。如图2所示,该中断控制器包括寄存器组、控制状态机、中断采样接口、内核接口、外设总线接口;

寄存器组包括中断采样寄存器、中断服务寄存器和中断向量寄存器文件;

所述中断采样寄存器用于记录中断源的有效中断请求;

所述中断服务寄存器用于记录内核正在处理的中断;

所述中断向量寄存器文件用于记录中断向量;

首先中断控制器中的主要信息由寄存器组给出,在某个中断使用前,内核需要通过总线对中断控制器进行设置,需要设置的信息包括对应中断是否使能(通过中断屏蔽寄存器设置)以及该中断的中断向量(通过中断向量寄存器文件设置)。中断控制器作为外设中断的从设备,可以被总线上任何主设备读写,所以处理器外部的设备,比如主机,可以通过响应的接口对该中断控制器进行配置,这种方式是一种常用的处理器Boot方式。

所述内核接口包含一对中断向量请求信号接口、中断向量接口、一对中断执行握手信号接口,一对中断返回握手信号接口;其中,中断向量请求握手信号接口应用于步骤S11-S14中,用于传输中断向量请求信号iv_req和中断向量请求反馈信号iv_ack,中断向量接口应用于步骤S12中,用于传输中断向量,中断执行握手信号接口应用于步骤S131中的中断执行握手信号isr_serving_req和返回握手信号isr_serving_ack,中断返回握手信号用于S6中,用于传输步骤S14中的中断返回握手信号rti_req和返回握手信号rti_ack。

外设总线接口一端与外设总线连接,一端与所述寄存器组连接,用于读写所述寄存器组;步骤S11中,内核或总线上的其他设备通过所述外设总线接口配置中断控制器,配置对象主要是需要使用中断的中断屏蔽寄存器及其中断向量。

所述中断采样接口一端与中断源连接,一另外端与所述中断采样寄存器连接,用于采样所述中断源的有效中断请求,并保存于所述中断采样寄存器中;

所述控制状态机通过内核接口与内核进行握手,以及控制内核在中断响应过程中对中断服务寄存器进行改写。在步骤S12中,控制状态机在内核给出的有效中断向量请求信号下转换状态,根据所述最高优先级有效中断判断单元的判断结果,给出响应信号,记录中断号,同时从所述中断向量寄存器文件中给出中断向量,并根据握手信号完成本次握手。在S131中,控制状态机在内核给出有效中断执行握手信号的情况下转换状态,根据记录的中断号,清除所述中断采样寄存器中的对应申请,在中断服务寄存器中对对应中断进行标记,根据握手信号完成本次握手。在S14中,控制状态机在内核给出中断返回握手信号的情况下转换状态,清除中断服务寄存器中的对应位,并根据握手信号完成握手。

中断控制器还包括中断屏蔽寄存器和最高优先级有效中断判断单元,中断屏蔽寄存器用于屏蔽中断,内核或其他连接在所述外设总线上的主设备通过设置该中断屏蔽寄存器用于屏蔽对应中断的申请。

最高优先级有效中断判断单元用于使用所述中断采样寄存器、中断屏蔽寄存器、中断服务寄存器中的数据给出当前最高优先级的有效中断,未被中断屏蔽寄存器屏蔽的中断中,若中断采样寄存器中存在比当前中断服务寄存器中标记正在处理的中断优先级更高的中断,则给出其中优先级最高的中断,若不存在正在处理的中断,则直接给出中断采样寄存器中有效的最高优先级中断,否则给出无有效中断信号。

本实施例的中断控制器基于实施例一中的异步中断处理方法,不再采用中断控制器请求内核的通信方式,而是采用由内核请求中断控制器的通信方式,并且直接请求中断向量的方式,这种中断响应方法省去了现有技术中冗长的互相握手操作,当中断出现时,直接向内核给出中断向量,内核在获得向量之后,无需其他操作,即可对中断服务程序进行取指执行。本实施例的中断控制器,该中断控制器完全契合实施例一中的中断处理方法,且具有简洁、灵活等特点。

当然,上述说明并非是对本发明的限制,本发明也并不仅限于上述举例,本技术领域的普通技术人员在本发明的实质范围内所做出的变化、改型、添加或替换,也应属于本发明的保护范围。

当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1