本发明涉及低功耗内核中断处理技术领域,具体涉及一种用于risc-v架构的快速中断控制系统及方法。
背景技术:
中断机制(interrupt),即处理器核在顺序执行程序指令流的过程中突然被别的请求打断而中止执行当前的程序,转而去处理别的事情,待其处理完了别的事情,然后重新回到之前程序中断的点继续执行之前的程序指令流。其中,打断处理器执行程序指令流的“别的请求”便称之为中断请求(interruptrequest),而中断请求的来源则称之为中断源(interruptsource),通常情况下,中断源主要来自外围硬件设备。而处理器转去处理“别的事情”便称之为中断服务程序(interruptserviceroutine,isr)。
中断处理是一种正常的机制,而非一种错误。处理器收到中断请求之后,需要保护当前程序现场,简称为保护现场。等到处理完中断服务程序之后,处理器需要恢复之前的现场,从而继续执行之前被打断的程序,简称为恢复现场。
可能存在多个中断源同时向处理器发起请求的情形,因此需要对这些中断源进行仲裁,从而选择哪个中断源被优先处理,这种情况称之为中断仲裁,同时可以给不同的中断分配优先级以便于仲裁,因此中断中存在仲裁优先级。当处理器已经在处理某个中断过程,而此时有一个优先级更高的新中断请求到来,如果处理器不响应新的中断请求,而是继续执行当前正在处理的中断服务程序,待到彻底完成后才响应新的中断请求,这种情况称处理器“不支持中断嵌套”。另一种情况是处理器终止当前的中断服务程序,转而开始响应新的中断请求,并执行其中断服务程序,则称处理器“支持中断嵌套”,并且中断嵌套可以有很多层次。若新的中断请求优先级比正在处理的中断优先级低或者相同,则不管处理是否支持中断嵌套,处理器对新的中断请求不响应,直到处理完当前的中断才响应新的中断。
risc-v架构定义的中断分为:外部中断(externalinterrupt),是指来自处理器核外的中断,譬如外部设备uart、gpio等产生的中断;计时器中断(timerinterrupt),是指来自计时器的中断;软件中断(softwareinterrupt),是指软件自己触发的中断。
如果三种中断同时发生,其响应的优先级顺序如下:外部中断优先级最高、软件中断次之,计时器中断最低。多个中断理论上上可能存在中断嵌套的情况,然而对于risc-v架构而言,一旦响应中断进入异常模式之后,中断被全局关闭再也无法响应新的中断,因此risc-v架构定义的硬件机制默认无法支持硬件中断嵌套行为。如果一定要支持中断嵌套,可使用软件嵌套的技术方案实现,除此之外,risc-v架构也允许用户实现自定义的中断控制器实现硬件中断嵌套机制功能。
arm架构的stm32f103系列单片机中,由于具备中断嵌套的硬件机制nvic,可以使用硬件实现快速的中断嵌套的功能。在张幼麟《单片机终端控制系统》的论文中指出,8051单片机的中断控制系统纯支持中断嵌套,但只支持2级嵌套。其中中断优先级的设定由特殊功能寄存器ip来进行管理,每个中断源在ip寄存器中对应一个控制位,这个控制位只有0、1两种可能,所以8051单片机只支持2级中断,其中1的优先级比0的高。但是由于risc-v架构的默认硬件机制,故而在risc-v架构的处理器中,既不具备arm架构的硬件嵌套机制,也不具备8051的二级中断嵌套的机制,因此无法通过arm架构和8051单片机的技术方案实现risc-v架构中断嵌套机制问题,而且中断效率差。
技术实现要素:
为解决上述技术问题,本发明提出了一种用于risc-v架构的快速中断控制系统及方法,以达到解决在risc-v架构中实现中断嵌套机制问题,提高中断处理的效率的目的。
为达到上述目的,本发明的技术方案如下:
一种用于risc-v架构的快速中断控制系统,所述系统包括:匣口、中断源优先级寄存器、中断等待寄存器、优先级阈值寄存器、优先级判断模块、中断使能寄存器、中断响应寄存器、中断完成寄存器和eip寄存器,所述系统为每个中断源分配一个匣口和编号,所述每个中断源对应一个中断源优先级寄存器,所述一个匣口对应一个中断等待寄存器;
所述匣口,用于在中断请求经过匣口时控制中断源的中断请求单一发送;
所述中断源优先级寄存器,用于存储系统为中断源设置的优先级;
所述中断等待寄存器,用于存储表示中断等待状态的数值;
所述优先级阈值寄存器,用于存储根据中断目标的优先级设置的优先级阈值;
所述优先级判断模块,用于对比中断源的优先级和优先级阈值寄存器中的优先级阈值;
所述中断使能寄存器用于存储表示对应中断源的屏蔽状态数值;
所述中断响应寄存器,用于向处理器内核返回当前仲裁出的优先级最高的中断id;
所述中断完成寄存器,用于存储中断程序完成后写回的中断id;
所述eip寄存器,用于指示当前有通过仲裁的中断正在发送给处理器内核。
进一步地,所述匣口在接收中断请求后将不同类型的外部中断请求转换成统一的内部中断请求。
进一步地,所述中断等待寄存器为只读寄存器,所述优先级阈值寄存器和所述中断使能寄存器均为存储器地址映射的可读可写寄存器,所述中断响应寄存器和所述中断完成寄存器在存储空间中映射为同一地址,该地址可读可写,中断响应时,处理器内核读此寄存器返回当前仲裁出的优先级最高的中断id,中断完成时,处理器内核向此地址写回相应的中断id。
进一步地,所述中断源优先级寄存器、中断等待寄存器、优先级阈值寄存器、中断使能寄存器和中断完成寄存器均为32位。
进一步地,所述中断源优先级寄存器的有效位数根据实际情况进行配置。
进一步地,所述中断等待寄存器中置0或1,其中0表示中断未等待,1表示中断等待;所述中断使能寄存器中置0或1,其中0表示不屏蔽,1表示屏蔽。
进一步地,所述eip寄存器为只读寄存器,有效位为最低位,为0表示当前没有通过仲裁的中断,为1表示当前有通过仲裁的中断
一种用于risc-v架构的快速中断控制方法,所述方法步骤如下:
step1:中断源经过相应的匣口后被转换成统一的内部中断请求,同时硬件自动屏蔽对应闸口的中断源,并自动将相应中断源的中断等待寄存器置高;
step2:所有的内部中断请求经过硬件仲裁,选出优先级最高的中断请求,如果此中断请求的优先级高于中断目标当前的优先级阈值寄存器,系统向处理器内核发送中断通知;
step3:处理器内核收到中断通知,进入中断处理模式,并使用软件向所述系统发起中断响应读操作,作为响应反馈,所述系统返回该中断源的中断id,同时所述系统硬件自动:将对应的中断等待寄存器清零;将优先级阈值寄存器的值存入硬件堆栈;将优先级阈值寄存器的值更新为该中断源的优先级;
step4:处理器内核根据收到的中断id进入对应的中断服务程序中进行处理;
step5:在中断服务程序中,如果希望此中断能被更高优先级的中断打断而嵌套,则软件强行打开全局中断,全局中断打开后,处理器能再次响应中断,如有新的中断到来,所述系统将保证只有优先级更高的中断才会通过硬件仲裁和优先级阈值寄存器的比较而被发送给处理器内核,处理器内核接收到中断后会暂停当前的中断服务程序,转而响应新的中断,从而发生中断嵌套,若无新的中断请求,或者中断请求的优先级低于优先级阈值寄存器的值,则不会发生嵌套;
step6:待彻底完成了中断处理之后,处理器内核使用软件向所述系统发起中断完成的写操作,写入要完成的中断id,同时,所处系统的硬件自动:将对应中断源的闸口解除屏蔽,允许其能够发起下一次新的中断请求;将优先级阈值寄存器的值从硬件堆栈中恢复出来;
step7:处理器内核使用软件发起中断完成后,继续使用软件查询所述eip寄存器,判断是否有发生中断咬尾,如果有发生中断咬尾,使用软件向所述系统发起中断响应的读操作,作为响应反馈,所述系统返回该中断源的中断id;同时,所述系统硬件自动:将优先级阈值寄存器的值存入硬件堆栈;将优先级阈值寄存器的值更新为该中断源的优先级,然后继续step4以及之后的步骤,如果没有发生中断咬尾,处理器内核使用软件退出中断。
进一步地,所述中断嵌套具体为:在中断响应阶段,处理器内核接收中断通知并对其响应,则向系统发送中断响应消息,作为反馈,所述系统将当前仲裁出的中断源对应的中断id返回给处理器内核,与此同时,所述系统的硬件自动将当前的优先级阈值寄存器的值保存进至硬件堆栈中,并且将当前的优先级阈值寄存器的值更改成为当前响应返回中断id对应的优先级;在中断完成阶段,处理器内核如果彻底完成了某个中断源的中断处理操作,则需要向所述系统发送中断完成消息,与此同时,所述系统的硬件自动将当前的优先级阈值寄存器的值重新从硬件堆栈中恢复回来。
进一步地,所述中断咬尾具体为,处理器内核向所述系统发送中断完成消息后,需要紧接着查询eip寄存器。如果查询结果为1,表明还有新的中断正在发送给处理器内核,软件停止恢复上下文,并立即对该新的中断进行响应,如果查询结果为0,表明此时没有新的中断正在发送给处理器内核,软件可以开始恢复上下文并退出中断。
本发明具有如下优点:
(1).本发明通过在中断源与中断目标之间设置快速中断控制系统,在risc-v架构中实现中断嵌套机制问题,同时通过增加处理器内核可读的eip寄存器实现了中断咬尾等机制,提高中断处理的效率。
(2).本发明将risc-v架构定义的软中断和定时中断放在了系统和外部中断统一管理,这样能加快中断响应速度,简化处理器中断控制逻辑,同时软件还可以动态的分配这两类中断的优先级,增加了它们使用的灵活性。
附图说明
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍。
图1为本发明实施例公开的快速中断控制系统逻辑结构示意图;
图2为本发明实施例公开的中断完整流程图;
图3为本发明实施例公开的中断结构关系图。
具体实施方式
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述。
本发明提供了一种用于risc-v架构的快速中断控制系统及方法,其工作原理是通过在中断源与中断目标之间设置快速中断控制(pic:privateinterruptcontroller)系统,控制中断请求的发送,同时通过增加处理器内核可读的eip寄存器实现了中断咬尾等机制,以达到解决在risc-v架构中实现中断嵌套机制问题,提高中断处理的效率的目的。
下面结合实施例和具体实施方式对本发明作进一步详细的说明。
如图1所示,一种用于risc-v架构的快速中断控制系统,所述快速中断控制系统(pic:privateinterruptcontroller)包括:匣口(gateway)、中断源优先级寄存器、中断等待(interruptpending,ip)寄存器、优先级阈值寄存器、优先级判断模块、中断使能(interruptenable,ie)寄存器、中断响应寄存器、中断完成寄存器和eip寄存器,所述系统为每个中断源分配一个匣口和编号(id),所述每个中断源对应一个中断源优先级寄存器,所述一个匣口对应一个中断等待寄存器;
所述匣口,用于在中断请求(interruptrequest)经过匣口时控制中断源的中断请求单一发送;
所述中断源优先级寄存器,用于存储系统为中断源设置的优先级(priority);
所述中断等待寄存器,用于存储表示中断等待状态的数值;
所述优先级阈值寄存器,用于存储根据中断目标的优先级设置的优先级阈值(threshold);
所述优先级判断模块,用于对比中断源的优先级和优先级阈值寄存器中的优先级阈值;
所述中断使能寄存器,用于存储表示对应中断源的屏蔽状态数值;
所述中断响应寄存器,用于中断响应时(interruptclaim)向处理器内核返回当前仲裁出的优先级最高的中断id;
所述中断完成寄存器,用于存储中断完成(interruptcompletion)后写回的中断id;
所述eip寄存器,用于指示当前有通过仲裁的中断正在发送给处理器内核。
其中,所述匣口在接收中断请求后将不同类型的外部中断请求转换成统一的内部中断请求。
其中,每个中断源可以是不同触发类型,譬如电平触发(level-triggered)或者边沿触发(edge-triggered)等。
其中,所述中断等待寄存器为只读寄存器,所述优先级阈值寄存器和所述中断使能寄存器均为存储器地址映射的(memoryaddressmapped)可读可写寄存器,所述中断响应寄存器和所述中断完成寄存器在存储空间中映射为同一地址,该地址可读可写,中断响应时,处理器内核读此寄存器返回当前仲裁出的优先级最高的中断id,中断完成时,处理器内核向此地址写回相应的中断id。
其中,所述中断源优先级寄存器、中断等待寄存器、优先级阈值寄存器、中断使能寄存器和中断完成寄存器均为32位。
本发明中pic硬件可支持1024个id,也就是说最多支持1024个中断源发送中断请求,为每个中断源编号为0-1023,其中中断等待寄存器和中断使能寄存器的个数为32个。
其中,所述中断源优先级寄存器的有效位数为低8位,中断源优先级的值有0至255共256个数,其中0表示屏蔽中断,1至255从低到高表示优先级的高低。
其中,所述中断等待寄存器中置0或1,其中0表示中断未等待(允许中断请求经过并将中断请求发送给中断目标),1表示中断等待(拒绝中断请求经过);所述中断使能寄存器中置0或1,其中0表示不屏蔽(接收中断请求),1表示屏蔽(不接收中断请求)。
如图2所示,一种用于risc-v架构的快速中断控制方法,所述方法步骤如下:
step1:中断源经过相应的匣口后被转换成统一的内部中断请求,同时硬件自动屏蔽对应闸口的中断源,并自动将相应中断源的中断等待寄存器置高;
step2:所有的内部中断请求经过硬件仲裁,选出优先级最高的中断请求,如果此中断请求的优先级高于中断目标当前的优先级阈值寄存器,系统向处理器内核发送中断通知;
step3:处理器内核收到中断通知,进入中断处理模式,并使用软件向所述系统发起中断响应读操作,作为响应反馈,所述系统返回该中断源的中断id,同时所述系统硬件自动:将对应的中断等待寄存器清零;将优先级阈值寄存器的值存入硬件堆栈;将优先级阈值寄存器的值更新为该中断源的优先级;
step4:处理器内核根据收到的中断id进入对应的中断服务程序中进行处理;
step5:在中断服务程序中,如果希望此中断能被更高优先级的中断打断而嵌套,则软件强行打开全局中断,全局中断打开后,处理器能再次响应中断,如有新的中断到来,所述系统将保证只有优先级更高的中断才会通过硬件仲裁和优先级阈值寄存器的比较而被发送给处理器内核,处理器内核接收到中断后会暂停当前的中断服务程序,转而响应新的中断,从而发生中断嵌套,若无新的中断请求,或者中断请求的优先级低于优先级阈值寄存器的值,则不会发生嵌套;
step6:待彻底完成了中断处理之后,处理器内核使用软件向所述系统发起中断完成的写操作,写入要完成的中断id,同时,所处系统的硬件自动:将对应中断源的闸口解除屏蔽,允许其能够发起下一次新的中断请求;将优先级阈值寄存器的值从硬件堆栈中恢复出来;
step7:处理器内核使用软件发起中断完成后,继续使用软件查询所述eip寄存器,判断是否有发生中断咬尾,如果有发生中断咬尾,使用软件向所述系统发起中断响应的读操作,作为响应反馈,所述系统返回该中断源的中断id;同时,所述系统硬件自动:将优先级阈值寄存器的值存入硬件堆栈;将优先级阈值寄存器的值更新为该中断源的优先级,然后继续step4以及之后的步骤,如果没有发生中断咬尾,处理器内核使用软件退出中断。
其中,所述中断嵌套具体为:在中断响应阶段,处理器内核接收中断通知并对其响应,则向系统发送中断响应消息,作为反馈,所述系统将当前仲裁出的中断源对应的中断id返回给处理器内核,与此同时,所述系统的硬件自动将当前的优先级阈值寄存器的值保存进至硬件堆栈中,并且将当前的优先级阈值寄存器的值更改成为当前响应返回中断id对应的优先级;在中断完成阶段,处理器内核如果彻底完成了某个中断源的中断处理操作,则需要向所述系统发送中断完成消息,与此同时,所述系统的硬件自动将当前的优先级阈值寄存器的值重新从硬件堆栈中恢复回来。
其中,所述中断咬尾具体为,处理器内核向所述系统发送中断完成消息后,需要紧接着查询eip寄存器。如果查询结果为1,表明还有新的中断正在发送给处理器内核,软件停止恢复上下文,并立即对该新的中断进行响应,如果查询结果为0,表明此时没有新的中断正在发送给处理器内核,软件可以开始恢复上下文并退出中断。
本发明在risc-v架构中实现中断嵌套机制的同时还实现了中断咬尾、软中断和计时器中断等中断问题。
其中,实现中断嵌套式对处理器内核而言,如果收到了中断通知,且其决定对该中断进行响应,则需要向所述系统发送中断响应消息。作为反馈,所述系统将“当前仲裁出的中断源对应的中断id”返回给处理器内核,这个中断id称为“当前响应返回中断id”。与此同时,所述系统的硬件自动将“当前的优先级阈值寄存器的值”保存进入一个“专用的硬件堆栈”中,并且将“当前的优先级阈值寄存器的值”更改成为“当前响应返回中断id对应的优先级”。通过此机制可以保证该中断被响应之后,只有优先级比其更高的新中断才会通过优先级阈值寄存器的比较,而将新中断发送给处理器内核,对于处理器内核而言,如果彻底完成了某个中断源的中断处理操作,则需要向所述系统发送中断完成消息。与此同时,所述系统的硬件自动将“当前的优先级阈值寄存器的值”重新从“专用的硬件堆栈”恢复回来。通过此机制可以保证中断完成之后,将优先级阈值寄存器的值恢复回来以保证功能的正确性。所述系统的硬件堆栈深度为所述系统所支持的优先级级数,因此可以保证此堆栈不会溢出(因为只有高优先级能够打断低优先级中断,中断嵌套的级数最多即为所述系统的所支持的优先级级数)。
其中,实现中断咬尾是在pic中增加一个只读寄存器eip,,用于指示当前有通过仲裁的中断,正在发送给处理器内核;对于处理器内核而言,如果彻底完成了某个中断源的中断处理操作,则需要向pic发送中断完成(interruptcompletion)消息。与此同时,pic的硬件自动将“当前的优先级阈值寄存器的值(threshold)”重新从“专用的硬件堆栈”恢复回来。通过此机制可以保证中断完成completion之后,将优先级阈值寄存器的值恢复回来以保证功能的正确性。处理器内核向pic发送中断完成(interruptcompletion)消息后,需要紧接着查询eip寄存器。如果查询结果为1,表明还有新的中断正在发送给处理器内核,软件停止恢复上下文,并立即对该新的中断进行响应。如果查询结果为0,表明此时没有新的中断正在发送给处理器内核,软件可以开始恢复上下文并退出中断,从而实现了中断咬尾,大大提高了中断处理效率。
其中,将risvc-v架构定义的软件中断和计时器中断放在所述pic中和其他外部中断一起统一管理,从而加快中断响应速度,简化处理器内核的中断控制逻辑,同时软件还可以动态的给者两类中断分配优先级,增加了这两类中断使用的灵活性。
如图3所示,公开了pic系统与处理器内核之间的交互。
以上所述的仅是本发明所公开的一种用于risc-v架构的快速中断控制系统及方法的优选实施方式,应当指出,对于本领域的普通技术人员来说,在不脱离本发明创造构思的前提下,还可以做出若干变形和改进,这些都属于本发明的保护范围。