CN110059040B - 一种基于risc-v架构的可嵌套异常和非屏蔽中断系统及方法 - Google Patents
一种基于risc-v架构的可嵌套异常和非屏蔽中断系统及方法 Download PDFInfo
- Publication number
- CN110059040B CN110059040B CN201910309091.XA CN201910309091A CN110059040B CN 110059040 B CN110059040 B CN 110059040B CN 201910309091 A CN201910309091 A CN 201910309091A CN 110059040 B CN110059040 B CN 110059040B
- Authority
- CN
- China
- Prior art keywords
- register
- interrupt
- value
- unmasked
- abnormal
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F13/00—Interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
- G06F13/14—Handling requests for interconnection or transfer
- G06F13/20—Handling requests for interconnection or transfer for access to input/output bus
- G06F13/24—Handling requests for interconnection or transfer for access to input/output bus using interrupt
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Debugging And Monitoring (AREA)
- Executing Machine-Instructions (AREA)
Abstract
本发明公开一种基于RISC‑V架构的可嵌套异常和非屏蔽中断系统,包括mtvec寄存器、mstatus寄存器、mtval寄存器、mcause寄存器和mepc寄存器,还包括msavestatus寄存器、msaveepc1寄存器、msavecause1寄存器和mxstatus寄存器,在发生异常和非屏蔽中断相互嵌套时,由于存在硬件堆栈保护,本发明能将相关通用寄存器以及当前mepc寄存器值进行压栈保护,在退出异常和非屏蔽中断时,将mepc寄存器等关键信息从堆栈种恢复出来,本发明能保证异常和非屏蔽中断嵌套中断是可恢复的。
Description
技术领域
本发明涉及低功耗内核中断及异常处理技术领域,具体涉及一种基于RISC-V架构的可嵌套异常和非屏蔽中断系统及方法。
背景技术
中断机制(Interrupt),即处理器核在顺序执行程序指令流的过程中突然被别的请求打断而中止执行当前的程序,转而去处理别的事情,待其处理完了别的事情,然后重新回到之前程序中断的点继续执行之前的程序指令流。其中,打断处理器执行程序指令流的“别的请求”便称之为中断请求(Interrupt Request),而中断请求的来源则称之为中断源(Interrupt Source),通常情况下,中断源主要来自外围硬件设备。而处理器转去处理“别的事情”便称之为中断服务程序(Interrupt Service Routine,ISR)。
中断处理是一种正常的机制,而非一种错误。处理器收到中断请求之后,需要保护当前程序现场,简称为保护现场。等到处理完中断服务程序之后,处理器需要恢复之前的现场,从而继续执行之前被打断的程序,简称为恢复现场。
异常(Exception)机制,即处理器核在顺序执行程序指令流的过程中突然遇到了异常的事情而中止执行当前的程序,转而去处理该异常。处理器遇到的“异常的事情”称为异常(Exception)。异常是由处理器内部事件或程序执行中的事件引起的,譬如本身硬件故障、程序故障,或者执行特殊的系统服务指令而引起的,简而言之是一种内因。异常发生后,处理器会进入异常服务处理程序。
非屏蔽中断(非屏蔽中断,Non-Maskable Interrupt)是处理器内核的一根特殊的输入信号,往往用于指示系统层面的紧急错误(譬如外部的硬件故障等)。在遇到非屏蔽中断之后,处理器内核会立即中止执行当前的程序,转而去处理该非屏蔽中断错误。
RISC-V架构定义了CSR寄存器mtvec、mcause和mepc。其中,mtvec是机器模式中断和异常处理入口的基地址,mcause是机器模式异常原因寄存器,mepc是机器模式异常PC寄存器。其中,中断、异常和非屏蔽中断的处理会共用mcause和mepc寄存器,异常会使用mtvec作为异常处理的入口,中断和非屏蔽中断的入口地址可根据具体实现而定。如果发生中断,处理器先跳转到中断入口执行(同时mepc的值被硬件自动更新为发生中断时的PC)。如果发生异常,处理器会先跳转到mtvec执行(同时mepc的值被硬件自动更新为发生异常时的PC),然后软件查询mcause来确定异常原因是哪种异常,软件再跳转到相应的异常处理函数中执行。需要注意的是,异常是不可以被屏蔽的,也就是说一旦发生了异常,处理器一定会停止当前操作转而进入异常处理模式。同样,如果发生非屏蔽中断,处理器会先跳转到非屏蔽中断的入口执行非屏蔽中断处理程序(同时mepc的值被硬件自动更新为发生非屏蔽中断时的PC)。同样,非屏蔽中断也是不可以被屏蔽的,也就是说一旦发生了非屏蔽中断,处理器一定会停止当前操作转而进入非屏蔽中断处理模式。
因此,中断在任何时候都可以被异常和非屏蔽中断打断,而异常和非屏蔽中断处理在任何时候也都可以被对方打断,即非屏蔽中断可以打断正在进行的异常处理,异常也可以打断正在进行的非屏蔽中断处理。在实际应用中,如果中断处理程序中出现了异常(即异常嵌套中断),对于RISC-V架构而言,发生中断时硬件自动保存的mepc等信息会在发生异常时被覆盖掉,造成不可恢复(non-recoverable);如果中断处理程序中出现了非屏蔽中断(即非屏蔽中断嵌套中断),对于RISC-V架构而言,发生非屏蔽中断时硬件自动保存的mepc等信息会在发生非屏蔽中断时被覆盖掉,造成不可恢复(non-recoverable);如果非屏蔽中断处理程序中出现了异常(即异常嵌套非屏蔽中断),对于RISC-V架构而言,发生非屏蔽中断时硬件自动保存的mepc等信息会在发生异常时被覆盖掉,造成不可恢复(non-recoverable);如果异常处理程序中出现了新的异常(即异常嵌套异常,Double Fault),对于RISC-V架构而言,发生第一次异常时硬件自动保存的mepc等信息会在发生新的异常时被覆盖掉,造成不可恢复(non-recoverable);如果异常处理程序中出现了非屏蔽中断(即非屏蔽中断嵌套异常),对于RISC-V架构而言,发生异常时硬件自动保存的mepc等信息会在发生非屏蔽中断时被覆盖掉,造成不可恢复(non-recoverable)。
总的来说,RISC-V架构中,存在异常嵌套中断、非屏蔽中断嵌套中断、异常嵌套非屏蔽中断、异常嵌套异常(Double Fault)以及非屏蔽中断嵌套异常时,系统无法恢复的问题。
发明内容
为了解决上述技术问题,本发明提出一种基于RISC-V架构的可嵌套异常和非屏蔽中断系统及方法。所述系统及方法能确保在异常嵌套中断、非屏蔽中断嵌套中断、异常嵌套非屏蔽中断、异常嵌套异常(Double Fault)以及非屏蔽中断嵌套异常时,系统可以恢复。
为了达到上述目的,本发明的技术方案如下:
一种基于RISC-V架构的可嵌套异常和非屏蔽中断系统,包括mtvec寄存器、mstatus寄存器、mtval寄存器、mcause寄存器和mepc寄存器,其特征在于,还包括msavestatus寄存器、msaveepc1寄存器、msavecause1寄存器和mxstatus寄存器,其中:
所述mtvec寄存器,用于存储异常向量的基址;
所述mstatus寄存器,用于存储中断、异常和非屏蔽中断处理模式的状态;
所述mtval寄存器,用于存储引起当前异常的存储器访问地址或者非法指令编码;
所述mcause寄存器,用于存储异常原因;
所述mepc寄存器,用于存储进入中断、异常和非屏蔽中断处理模式之前欲执行指令的地址,作为中断、异常和非屏蔽中断的返回地址;
所述msavestatus寄存器,用于存储进入异常和非屏蔽中断处理模式之前的状态;
所述msaveepc1寄存器,用于存储进入异常和非屏蔽中断处理模式之前所述mepc寄存器的值;
所述msavecause1寄存器,用于存储进入异常和非屏蔽中断处理模式之前所述mcause寄存器的值;
所述mxstatus寄存器,用于存储中断、异常和非屏蔽中断处理模式的扩展状态。
进一步,所述系统还包括:msaveepc2寄存器和msavecause2寄存器,其中:
所述msaveepc2寄存器,在支持2级硬件堆栈保护的情况下,用于存储进入异常和非屏蔽中断处理模式之前所述msaveepc1寄存器的值;
所述msavecause2寄存器,在支持2级硬件堆栈保护的情况下,用于存储进入异常和非屏蔽中断处理模式之前所述msavecause1寄存器的值。
进一步,所述mstatus寄存器包括MIE域、MPIE域、MPP域,其中:
所述MIE域用于控制打开或者关闭全局中断;
所述MPIE域用于自动保存进入中断、异常和非屏蔽中断处理模式之前MIE域的值,在退出中断、异常和非屏蔽中断处理时进行自动恢复,即将MIE域的值恢复为MPIE域的值;
所述MPP域用于自动保存进入中断、异常和非屏蔽中断处理模式之前特权模式的值,在退出中断、异常和非屏蔽中断处理时进行自动恢复,即将特权模式的值恢复为MPP域的值;
进一步,所述mxstatus寄存器包括PTYP域、TYP域,其中:
所述TYP域用于存储当前处理模式;
所述PTYP域用于自动保存进入中断、异常和非屏蔽中断处理之前所述mxstatus寄存器TYP域的值,并在退出中断、异常和非屏蔽中断处理时自动恢复所述mxstatus寄存器TYP域的值;
进一步,所述msavestatus寄存器包括MPIE1域、MPP1域、PTYP1域、MPIE2域、MPP2域和PTYP2域,其中:
所述MPIE1域用于自动保存进入异常和非屏蔽中断处理之前所述mstatus寄存器MPIE域的值,并在退出异常和非屏蔽中断处理模式时自动恢复所述mstatus寄存器MPIE域的值;
所述MPP1域用于自动保存进入异常和非屏蔽中断处理之前所述mstatus寄存器MPP域的值,并在退出异常和非屏蔽中断处理模式时自动恢复所述mstatus寄存器MPP域的值;
所述PTYP1域用于自动保存进入异常和非屏蔽中断处理之前所述mxstatus寄存器PTYP域的值,并在退出异常和非屏蔽中断处理模式时自动恢复所述mxstatus寄存器PTYP域的值;
所述MPIE2域用于在支持2级硬件堆栈保护的情况下,自动保存进入异常和非屏蔽中断处理模式之前MPIE1域的值,并在退出异常和非屏蔽中断处理模式时自动恢复MPIE1域的值;
所述MPP2域用于在支持2级硬件堆栈保护的情况下,自动保存进入异常和非屏蔽中断处理模式之前MPP1域的值,并在退出异常和非屏蔽中断处理模式时自动恢复MPP1域的值;
所述PTYP2域用于在支持2级硬件堆栈保护的情况下,自动保存进入异常和非屏蔽中断处理模式之前PTYP1域的值,并在退出异常和非屏蔽中断处理模式时自动恢复PTYP1域的值。
进一步,所述mxstatus寄存器处理模式的类型,包括:普通模式、中断模式、异常模式和非屏蔽中断模式,其中:所述普通模式的编号为0、所述中断模式的编号为1、所述异常模式的编号为2和所述非屏蔽中断模式的编号为3。
一种基于RISC-V架构的可嵌套异常和非屏蔽中断的方法,包括以下步骤:
S1:处理器内核接受中断请求并响应,停止执行当前程序流;
S2:所述处理器内核在执行中断请求对应的中断处理程序时,若发生了异常或者非屏蔽中断事件,此时所述处理器内核马上响应异常或者非屏蔽中断事件,将中断请求的相关的寄存器以及当前mepc寄存器值进行压栈保护;
S3:所述处理器内核在完成执行异常或者非屏蔽中断事件处理程序前,若有新的异常或者非屏蔽中断事件进入,则转至步骤S4;若无新的异常或者非屏蔽中断事件进入,则转至步骤S7;
S4:所述处理器内核马上响应新的异常或者非屏蔽中断事件,并将原异常或者非屏蔽中断事件的相关通用寄存器以及当前mepc寄存器值进行压栈保护;
S5:所述处理器内核执行新的异常或者非屏蔽中断事件对应的处理程序,执行完成后将会退出新的异常或者非屏蔽中断事件处理程序,重新回到原异常或者非屏蔽中断事件中执行对应的处理程序,并将原异常或者非屏蔽中断事件的相关通用寄存器以及当前mepc寄存器值进行出栈操作,将原异常或者非屏蔽中断事件的相关通用寄存器以及当前mepc寄存器值从堆栈种恢复出来;
S6:所述处理器内核在执行完原异常或者非屏蔽中断事件对应的处理程序后将会退出原异常或者非屏蔽中断事件对应的处理程序,重新回到中断请求事件中执行对应的处理程序,并将中断请求事件的相关通用寄存器以及当前mepc寄存器值进行出栈操作,将中断请求事件的相关通用寄存器以及当前mepc寄存器值从堆栈中恢复出来;
S7:所述处理器内核在执行完中断请求事件对应的中断处理程序后,退出中断请求事件对应的中断处理程序,返回到被打断点继续执行。基于上述技术方案,本发明的有益效果是:
1)与RISC-V架构定义的中断、异常和非屏蔽中断处理相比,本发明在处理器内核中增加了硬件堆栈保护相关CSR寄存器:msavestatus、msaveepc1、msaveepc2、msavecause1和msavecause2寄存器。解决异常嵌套中断、非屏蔽中断嵌套中断、异常嵌套非屏蔽中断、异常嵌套异常(Double Fault)以及非屏蔽中断嵌套异常时,会冲掉mepc等,导致系统无法恢复的问题。
2)如果支持2级硬件堆栈保护,本发明最多可以支持3级异常和非屏蔽中断之间的相互嵌套:即非屏蔽中断-异常-非屏蔽中断或者非屏蔽中断-异常-异常或者异常-非屏蔽中断-异常或者非屏蔽中断-异常-非屏蔽中断或者异常-非屏蔽中断-异常或者异常-异常-非屏蔽中断嵌套,否则,本发明可以支持2级可以恢复的非屏蔽中断和异常之间的嵌套,即异常-非屏蔽中断或者非屏蔽中断-异常嵌套;
3)硬件堆栈保护(不管是1级还是2级),可以支持异常嵌套中断,或者非屏蔽中断嵌套中断;
4)增加CSR寄存器mxstatus,用于存储处理模式,方便用户debug程序。
附图说明
图1为本发明实施例1公开的基于RISC-V架构的可嵌套异常和非屏蔽中断系统新增的寄存器;
图2为本发明实施例1公开的异常和非屏蔽中断嵌套中断的流程图;
图3为本发明实施例1公开的异常和非屏蔽中断相互嵌套的流程图;
图4为本发明实施例1公开的CSR寄存器更新流程1示意图;
图5为本发明实施例1公开的CSR寄存器更新流程2示意图;
图6为本发明实施例1公开的CSR寄存器更新流程3示意图;
图7为本发明实施例1公开的CSR寄存器更新流程4示意图;
图8为本发明实施例2公开的基于RISC-V架构的可嵌套异常和非屏蔽中断系统新增的寄存器;
图9为本发明实施例2公开的异常和非屏蔽中断嵌套中断的流程图;
图10为本发明实施例2公开的异常和非屏蔽中断相互嵌套的流程图;
图11为本发明实施例2公开的CSR寄存器更新流程5示意图;
图12为本发明实施例2公开的CSR寄存器更新流程6示意图;
图13为本发明实施例2公开的CSR寄存器更新流程7示意图;
图14为本发明实施例3公开的CSR寄存器更新流程8示意图。
具体实施方式
下面结合具体实施方式对本发明作进一步详细的说明。
所述mtvec寄存器和所述mepc寄存器为CSR寄存器,机器模式下可读可写。
所述mstatus寄存器为CSR寄存器,机器模式下其MIE域(bit:3)、MPIE域(bit:7)、MPP域(bit:12-11)。所述mstatus寄存器的MPIE域和MPP域分别用于自动保存进入中断、异常和非屏蔽中断处理之前MIE域和特权模式(Privilege Mode)的值,用于在退出中断、异常和非屏蔽中断处理时进行自动恢复。
所述msavestatus寄存器为CSR寄存器,机器模式下其MPIE1域(bit:0)、MPP1域(bit:2-1)、PTYP1域(bit:7-6)、MPIE2域(bit:8)、MPP2域(bit:10-9)和PTYP2域(bit:15-14)可读可写。所述msavestatus寄存器的MPIE1域和MPP1域分别用于自动保存进入异常和非屏蔽中断处理之前mstatus寄存器MPIE域和MPP域的值,并用于在退出异常和非屏蔽中断处理时自动恢复mstatus寄存器MPIE域和MPP域的值。所述msavestatus寄存器的PTYP1域用于自动保存进入异常和非屏蔽中断处理之前mxstatus寄存器PTYP域的值,并用于在退出异常和非屏蔽中断处理时自动恢复mxstatus寄存器PTYP域的值。
如果支持2级硬件堆栈保护,所述msavestatus寄存器,机器模式下其MPIE2域(bit:8)、MPP2域(bit:10-9)和PTYP2域(bit:15-14)可读可写。所述msavestatus寄存器的MPIE2域、MPP2域和PTYP2域分别用于自动保存进入异常和非屏蔽中断处理之前MPIE1域、MPP1域和PTYP1域的值,并用于在退出异常和非屏蔽中断处理时自动恢复MPIE1域、MPP1域和PTYP1域的值;
所述msaveepc1寄存器为CSR寄存器,机器模式下可读可写,用于自动保存进入异常和非屏蔽中断处理之前mepc寄存器的值,并用于在退出异常和非屏蔽中断处理时自动恢复mepc寄存器的值;
所述msaveepc2寄存器为CSR寄存器,如果支持2级硬件堆栈保护,则机器模式下可读可写,用于自动保存进入异常和非屏蔽中断处理之前msaveepc1寄存器的值,并用于在退出异常和非屏蔽中断处理时自动恢复msaveepc1寄存器的值;
所述msavecause1寄存器为CSR寄存器,机器模式下可读可写。所述msavecause1寄存器用于自动保存进入异常和非屏蔽中断处理之前mcause寄存器的值,并用于在退出异常和非屏蔽中断处理时自动恢复mcause寄存器的值;
所述msavecause2寄存器为CSR寄存器,如果支持2级硬件堆栈保护,则机器模式下可读可写。所述msavecause2寄存器用于自动保存进入异常和非屏蔽中断处理之前msavecause1寄存器的值,并用于在退出异常和非屏蔽中断处理时自动恢复msavecause1寄存器的值;
所述mxstatus寄存器为CSR寄存器,机器模式下可读可写。所述mxstatus寄存器的TYP域用于存储当前处理模式。所述mxstatus寄存器的PTYP域用于自动保存进入中断、异常和非屏蔽中断处理之前mxstatus寄存器TYP域的值,并用于在退出中断、异常和非屏蔽中断处理时自动恢复mxstatus寄存器TYP域的值。
所述mxstatus寄存器能方便用户debug程序。
本发明提供2种实施例,分别对应支持2级硬件堆栈保护和支持1级硬件堆栈保护的应用场景。
实施例一:
如图1所示,一种基于RISC-V架构的可嵌套异常和非屏蔽中断机制,所述机制相比RISC-V定义的架构,除了保留原有的mtvec寄存器、mstatus寄存器、mtval寄存器、mcause寄存器和mepc寄存器等CSR寄存器之外,还增加了msavestatus寄存器、msaveepc1寄存器、msaveepc2寄存器、msavecause1寄存器、msavecause2寄存器和mxstatus寄存器这6个CSR寄存器,其中msavestatus寄存器、msaveepc1寄存器、msaveepc2寄存器、msavecause1寄存器和msavecause2寄存器为硬件堆栈保护相关CSR寄存器。实施例1支持2级硬件堆栈保护。
所述mtvec寄存器,用于存储异常向量的基址;
所述mstatus寄存器,用于存储中断、异常和非屏蔽中断处理模式的状态;
所述mtval寄存器,用于存储引起当前异常的存储器访问地址或者非法指令编码;
所述mepc寄存器,用于存储进入中断、异常和非屏蔽中断处理模式之前指令的PC值,作为中断、异常和非屏蔽中断的返回地址;
所述mcause寄存器,用于存储异常原因。
所述msavestatus寄存器,用于存储进入异常和非屏蔽中断处理模式之前的状态;
所述msaveepc1寄存器,用于存储进入异常和非屏蔽中断处理模式之前mepc的值;
所述msaveepc2寄存器,可用于存储进入异常和非屏蔽中断处理模式之前msaveepc1的值;
所述msavecause1寄存器,用于存储进入异常和非屏蔽中断处理模式之前mcause的值;
所述msavecause2寄存器,可用于存储进入异常和非屏蔽中断处理模式之前msavecause1的值;
所述mxstatus寄存器,用于存储处理器当前的处理模式类型,包括:普通模式(0)、中断模式(1)、异常模式(2)和非屏蔽中断模式(3);
图2为本发明实施例1公开的异常和非屏蔽中断嵌套中断的流程图:
step1:处理器内核响应中断请求,按照图4中的CSR寄存器更新流程1(CSR updateflow 1)在同一时刻更新相应的寄存器:mstatus.MIE域的值被更新为0,mstatus.MPIE域的值被更新为mstatus.MIE域的值;当前的处理模式被更新为中断处理模式,mstatus.MPP域的值被更新为当前的特权模式;当前的PC被更新为中断处理入口地址(即跳转到中断处理入口),mepc的值被更新为当前的PC;mcause的值被更新为当前中断对应的编号;mxstatus.TYP域的值被更新为中断对应的处理模式编号(中断处理模式的编号1),mxstatus.PTYP域的值被更新为mxstatus.TYP域的值。
step2:处理器内核在执行中断请求对应的中断处理程序中间,发生了异常或者非屏蔽中断(EXCP_OR_NMI 1),此时处理器内核马上响应异常或者非屏蔽中断(EXCP_OR_NMI1),并按照图5中CSR寄存器更新流程2(CSR update flow 2)在同一时刻更新相应的寄存器:mstatus.MIE域的值被更新为0,mstatus.MPIE域的值被更新为mstatus.MIE域的值,msavestatus.MPIE1域的值被更新为mstatus.MPIE域的值,msavestatus.MPIE2域的值被更新为msavestatus.MPIE1域的值;当前的处理模式被更新为异常或者非屏蔽中断处理模式,mstatus.MPP域的值被更新为当前的特权模式,msavestatus.MPP1域的值被更新为mstatus.MPP域的值,msavestatus.MPP2域的值被更新为msavestatus.MPP1域的值;当前的PC值被更新为异常处理入口地址或者非屏蔽中断处理入口地址(即跳转到异常处理入口或者非屏蔽中断处理入口),mepc的值被更新为当前的PC值,msaveepc1的值被更新为mepc的值,msaveepc2的值被更新为msaveepc1的值;mcause的值被更新为异常或者非屏蔽中断对应的编号,msavecause1的值被更新为mcause的值,msavecause2的值被更新为msavecause1的值;mxstatus.TYP域的值被更新为异常或者非屏蔽中断对应的处理模式编号(异常处理模式的编号为2,非屏蔽中断处理模式的编号为3),mxstatus.PTYP域的值被更新为mxstatus.TYP域的值,msavestatus.PTYP1域的值被更新为mxstatus.PTYP域的值,msavestatus.PTYP2域的值被更新为msavestatus.PTYP1域的值;如果当前发生的是异常,mtval还会被更新成出错指令的编码值或者存储器访问的地址。
step3:处理器内核在执行完异常或者非屏蔽中断(EXCP_OR_NMI 1)处理程序后,将会退出异常或者非屏蔽中断(EXCP_OR_NMI 1)处理程序,重新回到中断请求对应的中断处理程序中执行,并按照图6中CSR寄存器更新流程3(CSR update flow 3)在同一时刻更新相应的寄存器:mstatus.MIE域的值被更新为mstatus.MPIE域的值,mstatus.MPIE域的值被更新为msavestatus.MPIE1域的值,msavestatus.MPIE1域的值被更新为msavestatus.MPIE2域的值;当前的特权模式被更新为mstatus.MPP域中特权的模式,mstatus.MPP域的值被更新为msavestatus.MPP2域的值,msavestatus.MPP1域的值被更新为msavestatus.MPP1域的值;当前的PC被更新为mepc的值,mepc的值被更新为msaveepc1的值,msaveepc1的值被更新为msaveepc2的值;mcause的值被更新为msavecause1的值,msavecause1的值被更新为msavecause2的值;mxstatus.TYP域的值被更新为mxstatus.PTYP域的值,mxstatus.PTYP域的值被更新为msavestatus.PTYP1域的值,msavestatus.PTYP1域的值被更新为msavestatus.PTYP2域的值。
step4:处理器内核在执行完中断请求对应的中断处理程序后,退出中断请求对应的中断处理程序,并按照图7中CSR寄存器更新流程4(CSR update flow 4)在同一时刻更新相应的寄存器:mstatus.MIE域的值被更新为mstatus.MPIE域的值;当前的特权模式被更新为mstatus.MPP域中对应的模式;当前的PC被更新为mepc的值;mxstatus.TYP域的值被更新为mxstatus.PTYP域的值。
可以看出,在发生异常和非屏蔽中断嵌套中断时,由于存在硬件堆栈保护,本发明能将mepc等关键信息推入堆栈,在退出异常和非屏蔽中断时,将mepc等关键信息从堆栈种恢复出来,从而保证异常和非屏蔽中断嵌套中断是可恢复的。
图3为本发明实施例1公开的异常和非屏蔽中断相互嵌套的流程图(图3中把异常和非屏蔽中断处理都抽象成同一类型异常或者非屏蔽中断,便于描述),主要涉及异常嵌套非屏蔽中断、非屏蔽中断嵌套异常和异常嵌套异常这几种情况,其流程简述如下:
step1:处理器内核响应异常或者非屏蔽中断(EXCP_OR_NMI1)程序,按照图5中的CSR寄存器更新流程2(CSR update flow2)在同一时刻更新相应的寄存器:mstatus.MIE域的值被更新为0,mstatus.MPIE域的值被更新为mstatus.MIE域的值,msavestatus.MPIE1域的值被更新为mstatus.MPIE域的值,msavestatus.MPIE1域的值被更新为msavestatus.MPIE2域的值;当前的处理模式被更新为异常或者非屏蔽中断处理模式,mstatus.MPP域的值被更新为当前的特权模式,msavestatus.MPP1域的值被更新为mstatus.MPP域的值,msavestatus.MPP2域的值被更新为msavestatus.MPP1域的值;当前的PC值被更新为异常处理入口地址或者非屏蔽中断处理入口地址(即跳转到异常处理入口或者非屏蔽中断处理入口),mepc的值被更新为当前的PC值,msaveepc1的值被更新为mepc的值,msaveepc2的值被更新为msaveepc1的值;mcause的值被更新为异常或者非屏蔽中断对应的编号,msavecause1的值被更新为mcause的值,msavecause2的值被更新为msavecause1的值;mxstatus.TYP域的值被更新为异常或者非屏蔽中断对应的处理模式编号(异常处理模式的编号为2,非屏蔽中断处理模式的编号为3),mxstatus.PTYP域的值被更新为mxstatus.TYP域的值,msavestatus.PTYP1域的值被更新为mxstatus.PTYP域的值,msavestatus.PTYP2域的值被更新为msavestatus.PTYP1域的值;如果当前发生的是异常,mtval还会被更新成出错指令的编码值或者存储器访问的地址。
step2:处理器内核在执行异常或不可屏蔽中断(EXCP_OR_NMI 1)对应的处理程序中间,发生了新的异常或不可屏蔽中断(EXCP_OR_NMI 2),此时处理器内核马上响应新的异常或不可屏蔽中断,并按照图5中CSR寄存器更新流程2(CSR update flow 2)在同一时刻更新相应的寄存器:mstatus.MIE域的值被更新为0,mstatus.MPIE域的值被更新为mstatus.MIE域的值,msavestatus.MPIE1域的值被更新为mstatus.MPIE域的值,msavestatus.MPIE1域的值被更新为msavestatus.MPIE2域的值;当前的处理模式被更新为异常或者非屏蔽中断处理模式,mstatus.MPP域的值被更新为当前的特权模式,msavestatus.MPP1域的值被更新为mstatus.MPP域的值,msavestatus.MPP2域的值被更新为msavestatus.MPP1域的值;当前的PC值被更新为异常处理入口地址或者非屏蔽中断处理入口地址(即跳转到异常处理入口或者非屏蔽中断处理入口),mepc的值被更新为当前的PC值,msaveepc1的值被更新为mepc的值,msaveepc2的值被更新为msaveepc1的值;mcause的值被更新为异常或者非屏蔽中断对应的编号,msavecause1的值被更新为mcause的值,msavecause2的值被更新为msavecause1的值;mxstatus.TYP域的值被更新为异常或者非屏蔽中断对应的处理模式编号(异常处理模式的编号为2,非屏蔽中断处理模式的编号为3),mxstatus.PTYP域的值被更新为mxstatus.TYP域的值,msavestatus.PTYP1域的值被更新为mxstatus.PTYP域的值,msavestatus.PTYP2域的值被更新为msavestatus.PTYP1域的值;如果当前发生的是异常,mtval还会被更新成出错指令的编码值或者存储器访问的地址。
step3:处理器内核在执行完新的异常或不可屏蔽中断(EXCP_OR_NMI 2)对应的处理程序后,将会退出新的异常或不可屏蔽中断(EXCP_OR_NMI 2)处理程序,重新回到原异常或不可屏蔽中断(EXCP_OR_NMI 1)对应的处理程序中执行,并按照图6中CSR寄存器更新流程3(CSR update flow 3)在同一时刻更新相应的寄存器:mstatus.MIE域的值被更新为mstatus.MPIE域的值,mstatus.MPIE域的值被更新为msavestatus.MPIE1域的值,msavestatus.MPIE1域的值被更新为msavestatus.MPIE2域的值;当前的特权模式被更新为mstatus.MPP域中对应的模式,mstatus.MPP域的值被更新为msavestatus.MPP1域的值,msavestatus.MPP2域的值被更新为msavestatus.MPP1域的值;当前的PC被更新为mepc的值,mepc的值被更新为msaveepc1的值,msaveepc1的值被更新为msaveepc2的值;mcause的值被更新为msavecause1的值,msavecause1的值被更新为msavecause2的值;mxstatus.TYP域的值被更新为mxstatus.PTYP域的值,mxstatus.PTYP域的值被更新为msavestatus.PTYP1域的值,msavestatus.PTYP1域的值被更新为msavestatus.PTYP2域的值。
step4:处理器内核在执行完原异常或不可屏蔽中断(EXCP_OR_NMI 1)对应的处理程序后,将会退出原异常或不可屏蔽中断(EXCP_OR_NMI 1)对应的处理程序,并按照图6中CSR寄存器更新流程3(CSR update flow 3)在同一时刻更新相应的寄存器:mstatus.MIE域的值被更新为mstatus.MPIE域的值,mstatus.MPIE域的值被更新为msavestatus.MPIE1域的值,msavestatus.MPIE1域的值被更新为msavestatus.MPIE2域的值;当前的特权模式被更新为mstatus.MPP域中对应的模式,mstatus.MPP域的值被更新为msavestatus.MPP1域的值,msavestatus.MPP2域的值被更新为msavestatus.MPP1域的值;当前的PC被更新为mepc的值,mepc的值被更新为msaveepc1的值,msaveepc1的值被更新为msaveepc2的值;mcause的值被更新为msavecause1的值,msavecause1的值被更新为msavecause2的值;mxstatus.TYP域的值被更新为mxstatus.PTYP域的值,mxstatus.PTYP域的值被更新为msavestatus.PTYP1域的值,msavestatus.PTYP1域的值被更新为msavestatus.PTYP2域的值。
可以看出,在发生异常和非屏蔽中断相互嵌套时,由于存在硬件堆栈保护,本发明能将mepc等关键信息推入堆栈,在退出异常和非屏蔽中断时,将mepc等关键信息从堆栈种恢复出来,从而保证异常和非屏蔽中断嵌套中断是可恢复的。另外,可以推理出,当连续发生4级异常和非屏蔽中断相互嵌套时,由于第3次异常和非屏蔽中断发生时,msavestatus.MPIE2域、msavestatus.MPP2域、msaveepc2、msavecause2和msavestatus.PTYP2域中已经保存了有效的信息,之后第3次发生异常和非屏蔽中断会将msavestatus.MPIE2域、msavestatus.MPP2域、msaveepc2、msavecause2和msavestatus.PTYP2域中保存的有效信息冲掉,造成不开恢复,因此,2级硬件堆栈保护能最多支持3级异常和非屏蔽中断相互嵌套。
实施例2
如图8所示,一种基于RISC-V架构的可嵌套异常和非屏蔽中断机制,所述机制相比RISC-V定义的架构,除了保留原有的mtvec寄存器、mstatus寄存器、mtval寄存器、mcause寄存器和mepc寄存器等CSR寄存器之外,还增加了msavestatus寄存器、msaveepc1寄存器、msavecause1寄存器和mxstatus寄存器这6个CSR寄存器,其中msavestatus寄存器、msaveepc1寄存器和msavecause1寄存器为硬件堆栈保护相关CSR寄存器。实施例2支持1级硬件堆栈保护。
所述mtvec寄存器,用于存储异常向量的基址;
所述mstatus寄存器,用于存储中断、异常和非屏蔽中断处理模式的状态;
所述mtval寄存器,用于存储引起当前异常的存储器访问地址或者非法指令编码;
所述mepc寄存器,用于存储进入中断、异常和非屏蔽中断处理模式之前指令的PC值,作为中断、异常和非屏蔽中断的返回地址;
所述mcause寄存器,用于存储异常原因。
所述msavestatus寄存器,用于存储进入异常和非屏蔽中断处理模式之前的状态;
所述msaveepc1寄存器,用于存储进入异常和非屏蔽中断处理模式之前mepc的值;
所述msavecause1寄存器,用于存储进入异常和非屏蔽中断处理模式之前mcause的值;
所述mxstatus寄存器,用于存储处理器当前的处理模式类型,包括:普通模式(0)、中断模式(1)、异常模式(2)和非屏蔽中断模式(3)。
图9为本发明实施例2公开的异常和非屏蔽中断嵌套中断的流程图:
step1:处理器内核响应中断请求,按照图11中的CSR寄存器更新流程5(CSRupdate flow 5)在同一时刻更新相应的寄存器:mstatus.MIE域的值被更新为0,mstatus.MPIE域的值被更新为mstatus.MIE域的值;当前的处理模式被更新为中断处理模式,mstatus.MPP域的值被更新为当前的特权模式;当前的PC被更新为中断处理入口地址(即跳转到中断处理入口),mepc的值被更新为当前的PC;mcause的值被更新为当前中断对应的编号;mxstatus.TYP域的值被更新为中断对应的处理模式编号(中断处理模式的编号1),mxstatus.PTYP域的值被更新为mxstatus.TYP域的值。
step2:处理器内核在执行中断请求对应的中断处理程序中间,发生了异常或者非屏蔽中断(EXCP_OR_NMI 3),此时处理器内核马上响应异常或者非屏蔽中断(EXCP_OR_NMI3),并按照图12中CSR寄存器更新流程6(CSR update flow 6)在同一时刻更新相应的寄存器:mstatus.MIE域的值被更新为0,mstatus.MPIE域的值被更新为mstatus.MIE域的值,msavestatus.MPIE1域的值被更新为mstatus.MPIE域的值;当前的处理模式被更新为异常或者非屏蔽中断处理模式,mstatus.MPP域的值被更新为当前的特权模式,msavestatus.MPP1的值被更新为mstatus.MPP域的值;当前的PC值被更新为异常处理入口地址或者非屏蔽中断处理入口地址(即跳转到异常处理入口或者非屏蔽中断处理入口),mepc的值被更新为当前的PC值,msaveepc1的值被更新为mepc的值;mcause的值被更新为当前异常或者非屏蔽中断对应的编号,msavecause1的值被更新为mcause的值;mxstatus.TYP域的值被更新为异常或者非屏蔽中断对应的处理模式编号(异常处理模式的编号为2,非屏蔽中断处理模式的编号为3),mxstatus.PTYP域的值被更新为mxstatus.TYP域的值,msavestatus.PTYP1的值被更新为mxstatus.PTYP域的值;如果当前发生的是异常,mtval还会被更新成出错指令的编码值或者存储器访问的地址。
step3:处理器内核在执行完异常或者非屏蔽中断(EXCP_OR_NMI 3)处理程序后,将会退出异常或者非屏蔽中断(EXCP_OR_NMI 3)处理程序,重新回到中断请求对应的中断处理程序中执行,并按照图13中CSR寄存器更新流程7(CSR update flow 7)在同一时刻更新相应的寄存器:mstatus.MIE域的值被更新为mstatus.MPIE域的值,mstatus.MPIE域的值被更新为msavestatus.MPIE1域的值;当前的特权模式被更新为mstatus.MPP域中对应的特权模式,mstatus.MPP域的值被更新为msavestatus.MPP1域的值;当前的PC被更新为mepc的值,mepc的值被更新为msaveepc1的值;mcause的值被更新为msavecause1的值;mxstatus.TYP域的值被更新为mxstatus.PTYP域的值,mxstatus.PTYP域的值被更新为msavestatus.PTYP1域的值。
step4:处理器内核在执行完中断请求对应的中断处理程序后,退出中断请求对应的中断处理程序,并按照图14中CSR寄存器更新流程8(CSR update flow 8)在同一时刻更新相应的寄存器:mstatus.MIE域的值被更新为mstatus.MPIE域的值;当前的特权模式被更新为mstatus.MPP域中对应的模式;当前的PC被更新为mepc的值;mxstatus.TYP域的值被更新为mxstatus.PTYP域的值。
可以看出,在发生异常和非屏蔽中断嵌套中断时,由于存在硬件堆栈保护,本发明能将mepc等关键信息推入堆栈,在退出异常和非屏蔽中断时,将mepc等关键信息从堆栈种恢复出来,从而保证异常和非屏蔽中断嵌套中断是可恢复的。
图10为本发明实施例2公开的异常和非屏蔽中断相互嵌套的流程图(图10中把异常和非屏蔽中断处理都抽象成同一类型异常或者非屏蔽中断,便于描述),主要涉及异常嵌套非屏蔽中断、非屏蔽中断嵌套异常和异常嵌套异常这几种情况,其流程简述如下:
step1:处理器内核响应异常或不可屏蔽中断(EXCP_OR_NMI 3),按照图12中的CSR寄存器更新流程6(CSR update flow 6)在同一时刻更新相应的寄存器:mstatus.MIE域的值被更新为0,mstatus.MPIE域的值被更新为mstatus.MIE域的值,msavestatus.MPIE1域的值被更新为mstatus.MPIE域的值;当前的处理模式被更新为异常或者非屏蔽中断处理模式,mstatus.MPP域的值被更新为当前的特权模式,msavestatus.MPP1域的值被更新为mstatus.MPP域的值;当前的PC值被更新为异常处理入口地址或者非屏蔽中断处理入口地址(即跳转到异常处理入口或者非屏蔽中断处理入口),mepc的值被更新为当前的PC值,msaveepc1的值被更新为mepc的值;mcause的值被更新为异常或者非屏蔽中断对应的编号,msavecause1的值被更新为mcause的值;mxstatus.TYP域的值被更新为异常或者非屏蔽中断对应的处理模式编号(异常处理模式的编号为2,非屏蔽中断处理模式的编号为3),mxstatus.PTYP域的值被更新为mxstatus.TYP域的值,msavestatus.PTYP1域的值被更新为mxstatus.PTYP域的值;如果当前发生的是异常,mtval还会被更新成出错指令的编码值或者存储器访问的地址。
step2:处理器内核在执行异常或不可屏蔽中断(EXCP_OR_NMI 3)对应的处理程序中间,发生了新的异常或不可屏蔽中断(EXCP_OR_NMI 4),此时处理器内核马上响应新的异常或不可屏蔽中断(EXCP_OR_NMI 4)程序,并按照图12中CSR寄存器更新流程6(CSR updateflow 6)在同一时刻更新相应的寄存器:mstatus.MIE域的值被更新为0,mstatus.MPIE域的值被更新为mstatus.MIE域的值,msavestatus.MPIE1域的值被更新为mstatus.MPIE域的值;当前的处理模式被更新为异常或者非屏蔽中断处理模式,mstatus.MPP域的值被更新为当前的特权模式,msavestatus.MPP1域的值被更新为mstatus.MPP域的值;当前的PC值被更新为异常处理入口地址或者非屏蔽中断处理入口地址(即跳转到异常处理入口或者非屏蔽中断处理入口),mepc的值被更新为当前的PC值,msaveepc1的值被更新为mepc的值;mcause的值被更新为异常或者非屏蔽中断对应的值,msavecause1的值被更新为mcause的值;mxstatus.TYP域的值被更新为异常或者非屏蔽中断对应的处理模式编号(异常处理模式的编号为2,非屏蔽中断处理模式的编号为3),mxstatus.PTYP域的值被更新为mxstatus.TYP域的值,msavestatus.PTYP1域的值被更新为mxstatus.PTYP域的值;如果当前发生的是异常,mtval还会被更新成出错指令的编码值或者存储器访问的地址。
step3:处理器内核在执行完新的异常或不可屏蔽中断(EXCP_OR_NMI 4)对应的处理程序后,将会退出新的异常或不可屏蔽中断(EXCP_OR_NMI 4)处理程序,重新回到原异常或不可屏蔽中断(EXCP_OR_NMI 3)对应的处理程序中执行,并按照图13中CSR寄存器更新流程7(CSR update flow 7)在同一时刻更新相应的寄存器:mstatus.MIE域的值被更新为mstatus.MPIE域的值,mstatus.MPIE域的值被更新为msavestatus.MPIE1域的值;当前的特权模式被更新为mstatus.MPP域中对应的模式,mstatus.MPP域的值被更新为msavestatus.MPP1域的值;当前的PC被更新为mepc的值,mepc的值被更新为msaveepc1的值;mcause的值被更新为msavecause1的值;mxstatus.TYP域的值被更新为mxstatus.PTYP域的值,mxstatus.PTYP域的值被更新为msavestatus.PTYP1域的值。
step4:处理器内核在执行完原异常或不可屏蔽中断对应(EXCP_OR_NMI 3)的处理程序后,将会退出原异常或不可屏蔽中断(EXCP_OR_NMI 3)对应的处理程序,并按照图13中CSR寄存器更新流程7(CSR update flow 7)在同一时刻更新相应的寄存器:mstatus.MIE域的值被更新为mstatus.MPIE域的值,mstatus.MPIE域的值被更新为msavestatus.MPIE1域的值;当前的特权模式被更新为mstatus.MPP域中对应的模式,mstatus.MPP域的值被更新为msavestatus.MPP1域的值;当前的PC被更新为mepc的值,mepc的值被更新为msaveepc1的值;mcause的值被更新为msavecause1的值;mxstatus.TYP域的值被更新为mxstatus.PTYP域的值,mxstatus.PTYP域的值被更新为msavestatus.PTYP1域的值。
可以看出,在发生异常和非屏蔽中断相互嵌套时,由于存在硬件堆栈保护,本发明能将mepc等关键信息推入堆栈,在退出异常和非屏蔽中断时,将mepc等关键信息从堆栈种恢复出来,从而保证异常和非屏蔽中断嵌套中断是可恢复的。另外,可以推理出,当连续发生3级异常和非屏蔽中断相互嵌套时,由于第2次异常和非屏蔽中断发生时,msavestatus.MPIE2域、msavestatus.MPP2域、msaveepc2、msavecause2和msavestatus.PTYP2域中已经保存了有效的信息,之后第3次发生异常和非屏蔽中断会将msavestatus.MPIE2域、msavestatus.MPP2域、msaveepc2、msavecause2和msavestatus.PTYP2域中保存的有效信息冲掉,造成不可恢复,因此,1级硬件堆栈保护能最多支持2级异常和非屏蔽中断相互嵌套。
以上所述仅为本发明的实施例,并非因此限制本发明的专利范围,凡是利用本发明说明书内容所作的等效结构或等效流程变换,或直接或间接运用在其它相关的技术领域,均同理包括在本发明的专利保护范围内。
Claims (6)
1.一种基于RISC-V架构的可嵌套异常和非屏蔽中断系统,包括mtvec寄存器、mstatus寄存器、mtval寄存器、mcause寄存器和mepc寄存器,其特征在于,在处理器内核中还增加了硬件堆栈保护相关CSR寄存器:msavestatus寄存器、msaveepc1寄存器、msavecause1寄存器和mxstatus寄存器,其中:
所述mtvec寄存器,用于存储异常向量的基址;
所述mstatus寄存器,用于存储中断、异常和非屏蔽中断处理模式的状态;
所述mtval寄存器,用于存储引起当前异常的存储器访问地址或者非法指令编码;
所述mcause寄存器,用于存储异常原因;
所述mepc寄存器,用于存储进入中断、异常和非屏蔽中断处理模式之前欲执行指令的地址,作为中断、异常和非屏蔽中断的返回地址;
所述msavestatus寄存器,用于存储进入异常和非屏蔽中断处理模式之前的状态;
所述msaveepc1寄存器,用于存储进入异常和非屏蔽中断处理模式之前所述mepc寄存器的值;
所述msavecause1寄存器,用于存储进入异常和非屏蔽中断处理模式之前所述mcause寄存器的值;
所述mxstatus寄存器,用于存储中断、异常和非屏蔽中断处理模式的扩展状态。
2.根据权利要求1所述的一种基于RISC-V架构的可嵌套异常和非屏蔽中断系统,其特征在于,所述系统还包括:msaveepc2寄存器和msavecause2寄存器,其中:
所述msaveepc2寄存器,在支持2级硬件堆栈保护的情况下,用于存储进入异常和非屏蔽中断处理模式之前所述msaveepc1寄存器的值;
所述msavecause2寄存器,在支持2级硬件堆栈保护的情况下,用于存储进入异常和非屏蔽中断处理模式之前所述msavecause1寄存器的值。
3.根据权利要求1所述的一种基于RISC-V架构的可嵌套异常和非屏蔽中断系统,其特征在于,所述mxstatus寄存器处理模式的类型,包括:普通模式、中断模式、异常模式和非屏蔽中断模式。
4.根据权利要求3所述的一种基于RISC-V架构的可嵌套异常和非屏蔽中断系统,其特征在于,所述普通模式的编号为0、所述中断模式的编号为1、所述异常模式的编号为2和所述非屏蔽中断模式的编号为3。
5.根据权利要求1所述的一种基于RISC-V架构的可嵌套异常和非屏蔽中断系统,其特征在于,
所述mstatus寄存器包括MIE域、MPIE域、MPP域,其中:
所述MIE域用于控制打开或者关闭全局中断;
所述MPIE域用于自动保存进入中断、异常和非屏蔽中断处理模式之前MIE域的值,在退出中断、异常和非屏蔽中断处理时进行自动恢复MIE的值;
所述MPP域用于自动保存进入中断、异常和非屏蔽中断处理模式之前特权模式的值,在退出中断、异常和非屏蔽中断处理时进行自动恢复特权模式的值;
所述mxstatus寄存器包括PTYP域、TYP域,其中:
所述TYP域用于存储当前处理模式;
所述PTYP域用于自动保存进入中断、异常和非屏蔽中断处理之前所述mxstatus寄存器TYP域的值,并在退出中断、异常和非屏蔽中断处理时自动恢复所述mxstatus寄存器TYP域的值;
所述msavestatus寄存器包括MPIE1域、MPP1域、PTYP1域、MPIE2域、MPP2域和PTYP2域,其中:
所述MPIE1域用于自动保存进入异常和非屏蔽中断处理之前所述mstatus寄存器MPIE域的值,并在退出异常和非屏蔽中断处理模式时自动恢复所述mstatus寄存器MPIE域的值;
所述MPP1域用于自动保存进入异常和非屏蔽中断处理之前所述mstatus寄存器MPP域的值,并在退出异常和非屏蔽中断处理模式时自动恢复所述mstatus寄存器MPP域的值;
所述PTYP1域用于自动保存进入异常和非屏蔽中断处理之前所述mxstatus寄存器PTYP域的值,并在退出异常和非屏蔽中断处理模式时自动恢复所述mxstatus寄存器PTYP域的值;
所述MPIE2域用于在支持2级硬件堆栈保护的情况下,自动保存进入异常和非屏蔽中断处理模式之前MPIE1域的值,并在退出异常和非屏蔽中断处理模式时自动恢复MPIE1域的值;
所述MPP2域用于在支持2级硬件堆栈保护的情况下,自动保存进入异常和非屏蔽中断处理模式之前MPP1域的值,并在退出异常和非屏蔽中断处理模式时自动恢复MPP1域的值;
所述PTYP2域用于在支持2级硬件堆栈保护的情况下,自动保存进入异常和非屏蔽中断处理模式之前PTYP1域的值,并在退出异常和非屏蔽中断处理模式时自动恢复PTYP1域的值。
6.一种基于RISC-V架构的可嵌套异常和非屏蔽中断的方法,其特征在于,包括以下步骤:
S1:处理器内核接受中断请求并响应,停止执行当前程序流;
S2:所述处理器内核在执行中断请求对应的中断处理程序时,若发生了异常或者非屏蔽中断事件,此时所述处理器内核马上响应异常或者非屏蔽中断事件,将中断请求的相关寄存器以及当前mepc寄存器值通过硬件的方式进行压栈保护;
S3:所述处理器内核在完成执行异常或者非屏蔽中断事件处理程序前,若有新的异常或者非屏蔽中断事件进入,则转至步骤S4;若无新的异常或者非屏蔽中断事件进入,则转至步骤S7;
S4:所述处理器内核马上响应新的异常或者非屏蔽中断事件,并将原异常或者非屏蔽中断事件的相关寄存器以及当前mepc寄存器值通过硬件的方式进行压栈保护;
S5:所述处理器内核执行新的异常或者非屏蔽中断事件对应的处理程序,执行完成后将会退出新的异常或者非屏蔽中断事件处理程序,重新回到原异常或者非屏蔽中断事件中执行对应的处理程序,并将原异常或者非屏蔽中断事件的相关寄存器以及当前mepc寄存器值通过硬件的方式进行出栈操作,将原异常或者非屏蔽中断事件的相关寄存器以及当前mepc寄存器值从堆栈种恢复出来;
S6:所述处理器内核在执行完原异常或者非屏蔽中断事件对应的处理程序后将会退出原异常或者非屏蔽中断事件对应的处理程序,重新回到中断请求事件中执行对应的处理程序,并将中断请求事件的相关寄存器以及当前mepc寄存器值通过硬件的方式进行出栈操作,将中断请求事件的相关通用寄存器以及当前mepc寄存器值从堆栈中恢复出来;
S7:所述处理器内核在执行完中断请求事件对应的中断处理程序后,退出中断请求事件对应的中断处理程序,返回到被打断点继续执行。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910309091.XA CN110059040B (zh) | 2019-04-17 | 2019-04-17 | 一种基于risc-v架构的可嵌套异常和非屏蔽中断系统及方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910309091.XA CN110059040B (zh) | 2019-04-17 | 2019-04-17 | 一种基于risc-v架构的可嵌套异常和非屏蔽中断系统及方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN110059040A CN110059040A (zh) | 2019-07-26 |
CN110059040B true CN110059040B (zh) | 2020-12-29 |
Family
ID=67319360
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201910309091.XA Active CN110059040B (zh) | 2019-04-17 | 2019-04-17 | 一种基于risc-v架构的可嵌套异常和非屏蔽中断系统及方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN110059040B (zh) |
Families Citing this family (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN117272412B (zh) * | 2023-11-21 | 2024-03-15 | 芯来智融半导体科技(上海)有限公司 | 中断控制寄存器保护方法、装置、计算机设备及存储介质 |
Family Cites Families (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
KR100317237B1 (ko) * | 1999-10-01 | 2001-12-22 | 윤종용 | 유사 벡터 방식의 인터럽트 컨트롤러 및 그것의 인터럽트 처리 방법 |
CN1516001A (zh) * | 2003-01-08 | 2004-07-28 | 上海海尔集成电路有限公司 | 一种新型risc流水线微控制器构架及其操作方法 |
CN101819539B (zh) * | 2010-04-28 | 2012-09-26 | 中国航天科技集团公司第五研究院第五一三研究所 | 一种μCOS-Ⅱ移植到ARM7的中断嵌套方法 |
CN108595256B (zh) * | 2018-03-20 | 2020-12-29 | 武汉市聚芯微电子有限责任公司 | 一种基于risc-v架构芯片采用软件实现中断嵌套的方法 |
-
2019
- 2019-04-17 CN CN201910309091.XA patent/CN110059040B/zh active Active
Also Published As
Publication number | Publication date |
---|---|
CN110059040A (zh) | 2019-07-26 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN109933451B (zh) | 一种基于risc-v架构的异常和中断处理系统及方法 | |
US10360162B2 (en) | Processing systems and methods for transitioning between privilege states based on an address of a next instruction to be fetched | |
US6694457B2 (en) | System and method for monitoring execution of privileged instructions | |
US7600100B2 (en) | Instruction encoding for system register bit set and clear | |
US8713371B2 (en) | Controlling generation of debug exceptions | |
JP5841199B2 (ja) | 安全保護方法およびプロセッサ | |
CN110059040B (zh) | 一种基于risc-v架构的可嵌套异常和非屏蔽中断系统及方法 | |
CN107526622B (zh) | Linux的快速异常处理方法及装置 | |
KR100313939B1 (ko) | 인터럽트제어기 | |
CN114003365A (zh) | 用于risc-v架构的快速中断系统 | |
US8909835B2 (en) | Computer system and method of controlling computer system | |
US20040049621A1 (en) | Self-nesting interrupts | |
CN115858020B (zh) | 中断处理方法、装置、设备及处理器 | |
JP5215655B2 (ja) | データ処理装置及びデータ処理装置におけるバスアクセス制御方法 | |
CN110083473B (zh) | 基于risc-v架构总线访问错误的改进系统及方法 | |
CN109947550B (zh) | 一种适用于risc-v架构的非屏蔽中断处理系统及方法 | |
JP2004530966A (ja) | イベント処理 | |
US6772372B2 (en) | System and method for monitoring unaligned memory accesses | |
JPH0895798A (ja) | データ処理装置 | |
JP2009230479A (ja) | マイクロプロセッサ | |
JP2013109652A (ja) | コンパイラ、そのコンパイラによって作成されたプログラムモジュールの制御方法、及び、その制御方法を実現する制御装置 | |
KR20170105394A (ko) | 비결정적인 하드웨어 인터럽트에 대한 요청을 처리하는 에뮬레이션 방법 및 장치 | |
KR20020054519A (ko) | 인터럽트를 이용한 응용 프로그램의 에러검출장치 및 방법. | |
TW201734821A (zh) | 暫存器存取控制 | |
CN114282275A (zh) | 模式切换方法、装置、嵌入式系统和存储介质 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |