CN108595256B - 一种基于risc-v架构芯片采用软件实现中断嵌套的方法 - Google Patents
一种基于risc-v架构芯片采用软件实现中断嵌套的方法 Download PDFInfo
- Publication number
- CN108595256B CN108595256B CN201810339587.7A CN201810339587A CN108595256B CN 108595256 B CN108595256 B CN 108595256B CN 201810339587 A CN201810339587 A CN 201810339587A CN 108595256 B CN108595256 B CN 108595256B
- Authority
- CN
- China
- Prior art keywords
- interrupt
- entering
- enable bit
- external
- priority
- 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
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/48—Program initiating; Program switching, e.g. by interrupt
- G06F9/4806—Task transfer initiation or dispatching
- G06F9/4812—Task transfer initiation or dispatching by interrupt, e.g. masked
- G06F9/4831—Task transfer initiation or dispatching by interrupt, e.g. masked with variable priority
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F15/00—Digital computers in general; Data processing equipment in general
- G06F15/76—Architectures of general purpose stored program computers
- G06F15/78—Architectures of general purpose stored program computers comprising a single central processing unit
- G06F15/7867—Architectures of general purpose stored program computers comprising a single central processing unit with reconfigurable architecture
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Software Systems (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Computer Hardware Design (AREA)
- Executing Machine-Instructions (AREA)
Abstract
本发明公开了一种基于RISC‑V架构芯片采用软件实现中断嵌套的方法,进入中断时在堆栈分配空间将相关通用寄存器、记录当前断点位置的寄存器压栈保护。判断中断类型,将相应控制状态寄存器压栈保护;将外部中断中最高优先级的中断设置为在执行时不被任何其他中断嵌套;对外部中断中的非最高优先级的中断通过将PLIC的阈值设置为当前外部中断优先级来实现不同级别外部中断之间的嵌套;通过设置定时器中断使能、软件中断使能以及外部中断使能的组合来实现三种类型中断之间的嵌套优先级,并在执行非最高优先级的外部中断、定时器中断、软件中断时打开全局中断;优先将PLIC阈值出栈实现更快的中断响应;该方法可显著提高RISC‑V架构芯片对于更高优先级中断的响应能力。
Description
技术领域
本发明属于单片机应用技术领域,更具体地,涉及一种基于RISC-V架构芯片采用软件实现中断嵌套的方法。
背景技术
RISC-V是加州大学伯克利分校于2014年正式发布的一种开源指令集架构,该架构芯片具有三种类型的中断:外部中断、定时器中断、软件中断;其中,外部中断优先级最高,软件中断优先级最低,定时器中断优先级居中。优先级最高的外部中断的中断源包括GPIO中断、PWM中断,看门狗中断以及RTC中断;这些外部中断源统一由名为PLIC的中断控制器进行管理,这些外部中断源之间可以通过编程设置7个中断优先级。只有当外部中断源的优先级大于PLIC的阈值时,PLIC才被允许响应该外部中断源。定时器中断和软件中断为独立的中断源,不受PLIC控制,只有分别使能定时器中断、软件中断,再打开全局中断时才能响应。
然而RISC-V架构芯片不具备中断嵌套的能力,即只能等待当前正在执行的中断执行完毕才能响应其它中断,不支持比当前优先级更高的中断将其打断。在比如ARM架构的STM32F103系列单片机中,由于具备中断嵌套的硬件机制NVIM,可以使用硬件实现快速的中断嵌套的功能;对于传统的8051单片机,其本身具有两个中断优先级,可实现二级中断嵌套。对于RISC-V架构芯片,既不具备STM32F103系列单片机的硬件嵌套机制,也不具备8051单片机的二级嵌套功能。因此可以通过软件的方式实现中断嵌套。
在中国专利201210397619.1中公开了一种适用于MIPS32架构处理器移植μCOS-II操作系统后的中断处理方法及装置,该方法的主要操作是:进入中断后,保存上下文,通过读取中断优先级,打开中断,使能中断嵌套,然后执行中断处理程序后,禁止中断,恢复上下文,返回打断的中断处继续执行。但该专利技术主要针对MIPS32架构处理器,虽然包括了常用的压栈、出栈的操作,但同样包括了像SR这样具体的寄存器操作,因此并不适用于RISC-V架构芯片。并且该方案中设置是否允许中断嵌套的方案也不适用于RISC-V架构芯片这样具有三种大类中断的处理器;进入中断后,三种类型中断之间并不是通过读取优先级的方式来设定是否允许嵌套需要人为控制。
在李晓明的论文《8031单片机多级中断嵌套实现》所公开的技术中提出了一种利用软件实现8031单片机多级中断嵌套的方法,由于8031仅支持两级嵌套,当需要实现更多级嵌套时,该论文提出使用RETI指令清除优先级状态触发器的方案:在中断服务函数入口插入以RETI指令结尾的程序块,该程序块的作用是将RETI指令后的第一条指令地址压栈。当第一次执行完RETI后,既清除了优先级状态触发器,从而允许中断嵌套,又能继续执行原来的中断服务函数。该方法适用于简易的中断管理系统,若要实现四级或四级以上的中断嵌套,需要设置更多的软标志,否则容易导致混乱的打断局面,而RISC-V架构芯片并不需要使用RETI类型的指令才能允许中断嵌套,因此该方法并不适用于RISC-V架构芯片。
发明内容
针对现有技术的以上缺陷或改进需求,本发明提供了一种基于RISC-V架构芯片采用软件实现中断嵌套的方法,其目的在于解决了基于RISC-V架构芯片不具备中断嵌套处理能力的技术问题。
为实现上述目的,按照本发明的一个方面,提供了一种基于RISC-V架构芯片采用软件实现中断嵌套的方法,在进入中断时将堆栈指针减去预设的数值以在堆栈中预先分配一定空间;并将相关通用寄存器进行压栈保护,将记录当前断点位置的寄存器值也进行压栈保护;
根据中断类型将相应控制状态寄存器压栈保护,然后修改控制状态寄存器,实现不同情况的中断嵌套;
执行中断时,将外部中断中的最高优先级的中断的优先级设置为在执行时不被其余中断嵌套;对外部中断中的非最高优先级的中断,则通过将PLIC的阈值设置为当前外部中断优先级来实现不同级别外部中断之间的嵌套;
通过设置定时器中断使能、软件中断使能以及外部中断使能的不同组合方式,在软件层面上构成外部中断优先级高于定时器中断、定时器中断优先级高于软件中断,来实现外部中断、定时器中断、软件中断之间的嵌套优先级,并在执行非最高优先级的外部中断、定时器中断、软件中断时打开全局中断;
在中断结束后出栈时将堆栈指针加上减去的数值恢复入栈前的数值以回到中断前的断点处。
优选的,上述基于RISC-V架构芯片采用软件实现中断嵌套的方法,出栈时优先将PLIC阈值出栈,实现更快的中断响应。
优选的,上述基于RISC-V架构芯片采用软件实现中断嵌套的方法,通过调整压栈和出栈操作的执行顺序,使得部分压栈和出栈过程也能被打断,进一步提高中断的响应能力。
优选的,上述基于RISC-V架构芯片采用软件实现中断嵌套的方法,具体包括如下步骤:
(1)在进入中断时,将堆栈指针减去预设的数值以在堆栈中预先分配一定空间;并将相关通用寄存器进行压栈保护,将当前mepc寄存器也进行压栈保护;
(2)判断当前中断是否为外部中断中断,若是外部中断,则进入(3),若不是,则进入步骤(6);
(3)判断当前中断是否为最高优先级,如果是则进入(4),否则进入(5);
(4)执行中断服务程序,中断服务程序结束后按照后进先出的顺序执行出栈操作,回到原程序被打断点继续执行;
(5)将当前PLIC的阈值进行压栈保护,将mie、mstatus寄存器压栈保护;然后将PLIC的阈值设置为当前中断优先级;然后关闭定时器中断使能位,软件中断使能位,打开外部中断使能位,在软件层面上造成外部中断优先级高于定时器中断、软件中断;打开全局中断使能位,然后开始执行该外部中断的中断服务函数,只允许优先级更高的外部中断对正在执行的中断服务函数进行打断;
(6)将mie、mstatus寄存器压栈保护,并进入(7);
(7)判断该中断是否为定时器中断,如果是,则进入(a);否则进入(b);
(a)关闭定时器中断使能位、软件中断使能位,打开外部中断使能位;在软件层面上造成外部中断优先级高于定时器中断,定时器中断优先级高于软件中断;
(b)关闭软件中断使能位,打开外部中断使能位和定时器中断使能位;打开全局中断,开始执行该定时器中断的中断服务函数;只允许外部中断对正在执行的中断服务函数进行打断。
优选地,上述基于RISC-V架构芯片采用软件实现中断嵌套的方法,如果接收的中断是软件中断,关闭软件中断使能位,打开外部中断使能位,打开定时器中断使能位;在软件层面上造成外部中断优先级、定时器中断优先级高于软件中断;打开全局中断,开始执行该软件中断的中断服务函数。允许外部中断、定时器中断对正在执行的中断服务函数进行打断。
优选地,上述基于RISC-V架构芯片采用软件实现中断嵌套的方法,进入中断服务程序后,如果被高优先级中断打断,则进入中断入口后,从步骤(1)开始执行;如果没有被打断,则正常执行完中断服务函数,进行出栈操作,出栈顺序按照后进先出执行,最后返回到被打断点继续执行。
优选地,上述基于RISC-V架构芯片采用软件实现中断嵌套的方法,对于外部中断出栈操作,不必等待寄存器全部出栈,只需要优先将PLIC阈值出栈,由于部分中断优先级小于或等于出栈前设定的PLIC阈值,只能在PLIC上挂起不能执行,此时判断是否有挂起的中断;如果有挂起的中断,就能立即响应该中断。如果没有,则继续执行出栈操作,出栈顺序按照后进先出执行,最后返回到被打断点继续执行。
总体而言,通过本发明所构思的以上技术方案与现有技术相比,能够取得下列有益效果:
(1)本发明提供的基于RISC-V架构芯片采用软件实现中断嵌套的方法,有效的解决了基于RISC-V架构芯片不具备中断嵌套处理能力的问题;由于三种类型外部中断使能位对应的寄存器以及全局中断使能位对应的寄存器可读可写,因此即使随着技术的发展RISC-V架构芯片具备了中断嵌套处理能力,也能通过本发明提供的该方法拓展中断嵌套的级数;
(2)本发明提供的基于RISC-V架构芯片采用软件实现中断嵌套的方法,由于在改变某一个寄存器之前先对其进行保存,最后出栈时都能恢复到被打断之前的状态,因此在堆栈空间足够大的情况下,保存的内容不溢出,可以实现嵌套的级数是没有限制的;可以显著提高RISC-V架构芯片对于更高优先级中断的响应能力,从而提高了该架构芯片的使用范围;
(3)本发明提供的基于RISC-V架构芯片采用软件实现中断嵌套的方法,由于在执行完一次外部处理函数时,将PLIC阈值出栈后,如果有挂起的中断,不用等待其余寄存器全部出栈,就能立即响应该中断,显著提高了外部中断的响应能力。
(4)本发明提供的基于RISC-V架构芯片采用软件实现中断嵌套的方法,由于采用软件方式实现灵活,可以在现有基础上进一步调整寄存器的出栈顺序,使得部分压栈和出栈过程也能被打断,进一步提高了中断的响应能力。
附图说明
图1是本发明提供的基于RISC-V架构芯片采用软件实现中断嵌套的方法的一个实施例的流程示意图;
图2是本发明提供的基于RISC-V架构芯片采用软件实现中断嵌套的方法的另一个实施例的流程示意图。
具体实施方式
为了使本发明的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本发明进行进一步详细说明。应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不用于限定本发明。此外,下面所描述的本发明各个实施方式中所涉及到的技术特征只要彼此之间未构成冲突就可以相互组合。
本发明提供的基于RISC-V架构芯片采用软件实现中断嵌套的方法,结合RISC-V架构的特点提出了实现软件中断嵌套的具体解决方案;可使用汇编与C语言实现。
参照图1,是实施例1提供的基于RISC-V架构芯片采用软件实现中断嵌套的方法的流程示意图;具体包括如下步骤:
101、进入中断入口后,将堆栈指针sp减去38*4,预留38个REGBYTES空间,并进入102;其中REGBYTES是4个字节的空间;
102、将通用寄存器x1~x31这31个寄存器以及当前mepc寄存器进行压栈保护,并进入103;
其中,mepc寄存器为控制状态寄存器,用于记录断点位置,保存的是中断返回地址的信息;保存的内存空间地址由堆栈指针与偏移量组成,每保存一个寄存器,偏移量就加1个REGBYTES,堆栈指针保持不变。
103、判断接收到的当前中断是否为外部中断;若是,则进入104,若否,则进入111;
104、获取上述当前中断优先级,并判断该当前中断的优先级是否为最高优先级7级;若是,则进入105;若否,则进入107;
105、正常执行中断服务程序,进行出栈操作,并进入106;
106、返回原程序打断点继续执行;由于采用的是后进先出的顺序,直到中断处理完成回到原程序打断点继续执行,执行过程不受任何干扰;
107、读取PLIC阈值,将当前PLIC的阈值进行压栈保护,并将mie、mstatus寄存器压栈保护,并进入108;其中,mie寄存器为控制状态寄存器,其MEIE位作为外部中断使能位,MTIE位作为定时器中断使能位,MSIE作为软件中断使能位;mstatus寄存器为控制状态寄存器,其MIE位作为全局中断使能位;
108、将PLIC的阈值设置为当前中断优先级;使得其它高于当前中断优先级的中断才能通过PLIC抢占当前中断,并进入109;
109、在mie寄存器中关闭定时器中断使能位和软件中断使能位,并打开外部中断使能位;由此使得在软件层面上造成外部中断优先级高于定时器中断和软件中断,并进入110;
110、在mstatus寄存器中打开全局中断使能位,允许嵌套,并进入115;
111、将mie、mstatus寄存器压栈保护,进入112;
112、判断当前中断是否为定时器中断,若是,则进入114;若否,则进入113;
113、在mie寄存器中关闭软件中断使能位,打开外部中断使能位以及定时器中断使能位,并进入110;由此在软件层面上造成外部中断优先级、定时器中断优先级高于软件中断;
114、在mie寄存器中关闭软件中断使能位以及定时器中断使能位,打开外部中断使能位,并进入110;由此在软件层面上造成外部中断优先级高于定时器中断,定时器中断优先级高于软件中断,只允许优先级更高的外部中断对正在执行的中断服务函数进行打断;
115、开始执行该外部中断对应的中断服务函数,并进入116;
116、判断是否有更高优先级中断打断,若是,则进入101;若否,则进入117;
117、判断当前中断是否为外部中断,若是,则进入118;若否则进入105;
118、进行PLIC阈值出栈操作,并进入119;而对于外部中断出栈操作则不必等待寄存器全部出栈,只需要优先将PLIC阈值出栈;
119、判断PLIC上是否有外部中断挂起,若是则进入104;若否,则进入120;由于部分中断优先级小于或等于出栈前设定的PLIC阈值,只能在PLIC上挂起不能执行,通过本步骤使得PLIC此时自动判断是否有挂起的中断;如果有挂起的中断,就能立即响应该中断,节约了响应中断的时间;
120、继续执行出栈操作,并进入121;此处选择的是后进先出的顺序;
121、返回到被打断点继续执行。
参照图2,是实施例2提供的基于RISC-V架构芯片采用软件实现中断嵌套的方法的流程示意图,具体如下:
201、进入中断入口后,将堆栈指针sp减去38*4,预留38个REGBYTES空间,并进入202;其中REGBYTES是4个字节的空间;
202、将t0、t1、t2、a0、a1寄存器以及当前mepc值进行压栈保护,并进入203;
203、判断接收到的当前中断是否为外部中断;若是,则进入204,若否,则进入211;
204、获取上述当前中断优先级,并判断该当前中断的优先级是否为最高优先级7级;若是,则进入205;若否,则进入207;
205、正常执行中断服务函数,进行出栈操作,并进入206;
206、返回原程序打断点继续执行;由于采用的是后进先出的顺序,直到中断处理完成回到原程序打断点继续执行,执行过程不受任何干扰;
207、读取PLIC阈值,将当前PLIC的阈值进行压栈保护,并将mie、mstatus寄存器压栈保护,并进入208;
208、将PLIC的阈值设置为当前中断优先级;使得其它高于当前中断优先级的中断才能通过PLIC抢占当前中断,并进入209;
209、在mie寄存器中关闭定时器中断使能位和软件中断使能位,并打开外部中断使能位,并进入210;由此使得在软件层面上造成外部中断优先级高于定时器中断和软件中断;
210、在mstatus寄存器中打开全局中断使能位,允许嵌套,并进入2151;
211、将mie、mstatus寄存器压栈保护,进入212;
212、判断当前中断是否为定时器中断,若是,则进入214;若否,则进入213;
213、在mie寄存器中关闭软件中断使能位,打开外部中断使能位以及定时器中断使能位,并进入210;由此在软件层面上造成外部中断优先级、定时器中断优先级高于软件中断;
214、在mie寄存器中关闭软件中断使能位以及定时器中断使能位,打开外部中断使能位,并进入S210;由此在软件层面上造成外部中断优先级高于定时器中断,定时器中断优先级高于软件中断,只允许优先级更高的外部中断对正在执行的中断服务函数进行打断;
2151、将通用寄存器x1~x31中剩余的26个寄存器进行压栈保护,并进入215;
215、开始执行该外部中断对应的中断服务函数,并进入216;
216、判断是否有更高优先级中断打断,若是,则进入201;若否,则进入217;
217、判断当前中断是否为外部中断,若是,则进入218;若否则进入S205;
218、进行PLIC阈值出栈操作,并进入219;
219、判断PLIC上是否有外部中断挂起,若是则进入204;若否,则进入2191;
2191、将31个寄存器进行出栈操作,并进入220;
220、将mstatus寄存器出栈,关闭嵌套功能;并将剩余控制状态寄存器出栈,并进入221;
221、返回到被打断点继续执行。
与实施例1提供的基于RISC-V架构芯片采用软件实现中断嵌套的方法相比,区别在于实施例2中将压栈和出栈操作的执行顺序作了调整,使得压栈和出栈过程也能被打断,进一步提高了中断的响应能力。
实施例1提供的方法已经可以满足大多数情况下对中断嵌套的需求;由于其操作的压栈和出栈操作是受保护的状态,比如保护了31个寄存器压栈和出栈这个过程,但是耗费了宝贵的时间,实施例2提供的方法通过调整释放这些时间,从而进一步提高嵌套的响应能力。
对于入栈部分,实施例1中是先压栈,后判断中断类型,再打开和关闭相应使能位,然后再去执行中断服务函数,执行中断服务函数时可以被更高优先级打断;实施例2中调整了顺序,先判断中断类型,再打开和关闭相应使能位,再压栈,然后再去执行中断服务函数,执行压栈与中断服务函数时可以被更高优先级打断;由于每次被打断后,进入下一层嵌套后仍会再去执行压栈操作,而之前还未入栈的寄存器的值没有被改变,会被继续压栈,因此该压栈部分能被打断。
由于在判断中断类型与设置相应使能位时,会覆盖几个通用寄存器的值,因此在此之前先压栈所用到的几个通用寄存器,另外还保存几个相关的控制状态寄存器,然后再执行判断中断类型的操作。相比实施例1,实施例2的方法只是调整了程序执行顺序,执行的绝对时间没有发生变化,但在压栈与执行中断服务函数时可以被打断,因此提高了中断的响应能力。
对于出栈部分,实施例1的方法是按照后进先出的顺序执行,首先出栈的是mstatus寄存器,然后再出栈其它控制状态寄存器以及相关通用寄存器,无论在哪一层出栈mstatus寄存器,这意味着关闭了全局中断,也即后面的出栈操作是受到保护的,很显然对像31个通用寄存器这样的出栈操作进行保护,会耗费大量时间;实施例2提供的方法,先执行通用寄存器的出栈操作,再执行控制状态寄存器出栈操作,这个操作中需要优先出栈mstatus寄存器,保护后续其余控制状态寄存器出栈操作;实施例2提供的方法相比于实施例1,只是调整了出栈顺序,执行的绝对时间没有发生变化,但在通用寄存器的出栈操作过程中可以被打断,因此进一步提高了中断的响应能力。
本领域的技术人员容易理解,以上所述仅为本发明的较佳实施例而已,并不用以限制本发明,凡在本发明的精神和原则之内所作的任何修改、等同替换和改进等,均应包含在本发明的保护范围之内。
Claims (9)
1.一种基于RISC-V架构芯片采用软件实现中断嵌套的方法, 其特征在于,
进入中断时,将堆栈指针减去预设的数值以在堆栈中预先分配一定空间,将相关通用寄存器、记录当前断点位置的寄存器进行压栈保护;根据中断类型将相应控制状态寄存器压栈保护然后修改控制状态寄存器;
执行中断时,将外部中断中最高优先级的中断的优先级设置为在执行时不被任何其他中断嵌套;对外部中断中的非最高优先级的中断,则通过将PLIC的阈值设置为当前外部中断优先级来实现不同级别外部中断之间的嵌套;
通过设置定时器中断使能位、软件中断使能位以及外部中断使能位的组合,在软件层面上构成外部中断优先级高于定时器中断优先级、定时器中断优先级高于软件中断优先级来实现外部中断、定时器中断、软件中断之间的嵌套,并在执行非最高优先级的外部中断、定时器中断、软件中断时,打开全局中断使能位;
在中断结束后出栈时将堆栈指针加上减去的数值恢复入栈前的数值以回到中断前的断点处。
2.如权利要求1所述的基于RISC-V架构芯片采用软件实现中断嵌套的方法,其特征在于,出栈时优先将PLIC阈值出栈以实现更快的中断响应。
3.如权利要求2所述的基于RISC-V架构芯片采用软件实现中断嵌套的方法,其特征在于,调整压栈和出栈操作的执行顺序,使得部分压栈和出栈过程也能被打断以进一步提高中断的响应能力。
4.如权利要求1所述的基于RISC-V架构芯片采用软件实现中断嵌套的方法,其特征在于,具体包括如下步骤:
(1)在进入中断时,将堆栈指针减去预设的数值以在堆栈中预先分配一定空间;并将通用寄存器以及当前mepc寄存器进行压栈保护;
(2)判断当前中断是否为外部中断中断,若是外部中断,则进入步骤(3),若不是,则进入步骤(6);
(3)判断当前中断是否为最高优先级的外部中断,如果是则进入步骤(4),否则进入步骤(5);
(4)执行中断服务函数,中断服务函数结束后按照后进先出的顺序执行出栈操作,回到原程序被打断点继续执行;
(5)将当前PLIC的阈值进行压栈保护,将mie、mstatus寄存器压栈保护;将PLIC的阈值设置为当前中断优先级;关闭定时器中断使能位和软件中断使能位,打开外部中断使能位;打开全局中断使能位后开始执行该外部中断的中断服务函数,只允许优先级更高的外部中断对正在执行的中断服务函数进行打断;
(6)将mie、mstatus寄存器压栈保护,并进入步骤(7);
(7)判断该中断是否为定时器中断,如果是,则进入步骤(a);否则进入步骤(b);
(a)关闭定时器中断使能位和软件中断使能位,打开外部中断使能位,执行中断服务函数,中断服务函数结束后按照后进先出的顺序执行出栈操作,回到原程序被打断点继续执行;
(b)关闭软件中断使能位,打开外部中断使能位和定时器中断使能位;打开全局中断使能位,开始执行该定时器中断的中断服务函数;中断服务函数结束后按照后进先出的顺序执行出栈操作,回到原程序被打断点继续执行。
5.如权利要求4所述的基于RISC-V架构芯片采用软件实现中断嵌套的方法,其特征在于,进入中断服务函数后,如果被高优先级中断打断,则进入中断入口后,从步骤(1)开始执行;如果没有被打断,则正常执行完中断服务函数,进行出栈操作,出栈顺序按照后进先出执行,最后返回到被打断点继续执行。
6.如权利要求1或2所述的基于RISC-V架构芯片采用软件实现中断嵌套的方法,其特征在于,若接收的中断是软件中断,关闭软件中断使能位,打开外部中断使能位,打开定时器中断使能位;在软件层面上造成外部中断优先级或定时器中断优先级高于软件中断优先级;打开全局中断使能位,开始执行该软件中断的中断服务函数;允许外部中断、定时器中断对正在执行的中断服务函数进行打断。
7.如权利要求1或2所述的基于RISC-V架构芯片采用软件实现中断嵌套的方法,其特征在于,对于外部中断出栈操作,不必等待寄存器全部出栈,只需优先将PLIC阈值出栈,并判断是否有挂起的中断;如果有挂起的中断,就立即响应该中断;如果没有挂起的中断,则继续执行出栈操作。
8.如权利要求1或2所述的基于RISC-V架构芯片采用软件实现中断嵌套的方法,其特征在于,具体包括如下步骤:
101、进入中断入口后,将堆栈指针sp减去38*4,预留38个REGBYTES空间,并进入102;其中REGBYTES是4个字节的空间;
102、将通用寄存器x1~x31这31个寄存器以及当前mepc寄存器进行压栈保护,并进入103;
103、判断接收到的当前中断是否为外部中断;若是,则进入104,若否,则进入111;
104、获取上述当前中断优先级,并判断该当前中断的优先级是否为最高优先级7级;若是,则进入105;若否,则进入107;
105、正常执行中断服务函数,进行出栈操作,并进入106;
106、返回原程序打断点继续执行;
107、读取PLIC阈值,将当前PLIC的阈值进行压栈保护,并将mie、mstatus寄存器压栈保护,并进入108;
108、将PLIC的阈值设置为当前中断优先级;使得其它高于当前中断优先级的中断能通过PLIC抢占当前中断,并进入109;
109、在mie寄存器中关闭定时器中断使能位和软件中断使能位,并打开外部中断使能位,在软件层面上造成外部中断优先级高于定时器中断优先级和软件中断优先级,并进入110;
110、在mstatus寄存器中打开全局中断使能位,允许嵌套,并进入115;
111、将mie、mstatus寄存器压栈保护,进入112;
112、判断当前中断是否为定时器中断,若是,则进入114;若否,则进入113;
113、在mie寄存器中关闭软件中断使能位,打开外部中断使能位以及定时器中断使能位,并进入110;
114、在mie寄存器中关闭软件中断使能位以及定时器中断使能位,打开外部中断使能位,并进入110;
115、开始执行该外部中断对应的中断服务函数,并进入116;
116、判断是否有更高优先级中断打断,若是,则进入101;若否,则进入117;
117、判断当前中断是否为外部中断,若是,则进入118;若否则进入105;
118、进行PLIC阈值出栈操作,并进入119;而对于外部中断出栈操作则不必等待寄存器全部出栈,只需要优先将PLIC阈值出栈;
119、判断PLIC上是否有外部中断挂起,若是则进入104;若否,则进入120;
120、继续执行出栈操作,并进入121;
121、返回到被打断点继续执行。
9.如权利要求1或2所述的基于RISC-V架构芯片采用软件实现中断嵌套的方法,其特征在于,具体包括如下步骤:
201、进入中断入口后,将堆栈指针sp减去38*4,预留38个REGBYTES空间,并进入202;其中REGBYTES是4个字节的空间;
202、将t0、t1、t2、a0、a1寄存器以及当前mepc寄存器进行压栈保护,并进入203;
203、判断接收到的当前中断是否为外部中断;若是,则进入204,若否,则进入211;
204、获取上述当前中断优先级,并判断该当前中断的优先级是否为最高优先级7级;若是,则进入205;若否,则进入207;
205、正常执行中断服务函数,进行出栈操作,并进入206;
206、返回原程序打断点继续执行;
207、读取PLIC阈值,将当前PLIC的阈值进行压栈保护,并将mie、mstatus寄存器压栈保护,并进入208;
208、将PLIC的阈值设置为当前中断优先级,使得其它高于当前中断优先级的中断能通过PLIC抢占当前中断,并进入209;
209、在mie寄存器中关闭定时器中断使能位和软件中断使能位,并打开外部中断使能位,并进入210;
210、在mstatus寄存器中打开全局中断使能位,允许嵌套,并进入2151;
211、将mie、mstatus寄存器压栈保护,进入212;
212、判断当前中断是否为定时器中断,若是,则进入214;若否,则进入213;
213、在mie寄存器中关闭软件中断使能位,打开外部中断使能位以及定时器中断使能位,并进入210;
214、在mie寄存器中关闭软件中断使能位以及定时器中断使能位,打开外部中断使能位,并进入210;
2151、将通用寄存器x1~x31中剩余的26个寄存器进行压栈保护,并进入215;
215、开始执行该外部中断对应的中断服务函数,并进入216;
216、判断是否有更高优先级中断打断,若是,则进入201;若否,则进入217;
217、判断当前中断是否为外部中断,若是,则进入218;若否则进入205;
218、进行PLIC阈值出栈操作,并进入219;
219、判断PLIC上是否有外部中断挂起,若是则进入204;若否,则进入2191;
2191、将31个寄存器进行出栈操作,并进入220;
220、将mstatus寄存器出栈,关闭嵌套功能;并将剩余控制状态寄存器出栈,并进入221;
221、返回到被打断点继续执行。
Applications Claiming Priority (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201810230685 | 2018-03-20 | ||
CN2018102306857 | 2018-03-20 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN108595256A CN108595256A (zh) | 2018-09-28 |
CN108595256B true CN108595256B (zh) | 2020-12-29 |
Family
ID=63622803
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201810339587.7A Active CN108595256B (zh) | 2018-03-20 | 2018-04-16 | 一种基于risc-v架构芯片采用软件实现中断嵌套的方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN108595256B (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
EP4130987A4 (en) * | 2021-02-22 | 2023-12-27 | Nanjing Qinheng Microelectronics Co., Ltd. | RISC-V BASED INTERRUPTION CONTROL SYSTEM AND METHOD |
Families Citing this family (10)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN109376000B (zh) * | 2018-10-24 | 2022-02-15 | 芯来科技(武汉)有限公司 | 用于risc-v架构的快速中断控制系统及方法 |
CN109710312A (zh) * | 2018-12-13 | 2019-05-03 | 华东计算技术研究所(中国电子科技集团公司第三十二研究所) | 基于risc-v指令集的实时中断处理方法、装置及工控处理器 |
CN109933549B (zh) * | 2019-01-30 | 2022-04-05 | 中山大学 | 一种适用于risc-v处理器的中断控制器 |
CN110007964A (zh) * | 2019-03-15 | 2019-07-12 | 芯来科技(武汉)有限公司 | 用于risc-v架构的中断系统 |
CN109933451B (zh) * | 2019-03-18 | 2022-06-28 | 晶晨半导体(上海)股份有限公司 | 一种基于risc-v架构的异常和中断处理系统及方法 |
CN109947550B (zh) * | 2019-03-18 | 2023-07-28 | 晶晨半导体(上海)股份有限公司 | 一种适用于risc-v架构的非屏蔽中断处理系统及方法 |
CN110059040B (zh) * | 2019-04-17 | 2020-12-29 | 芯来智融半导体科技(上海)有限公司 | 一种基于risc-v架构的可嵌套异常和非屏蔽中断系统及方法 |
CN111831419A (zh) * | 2020-07-17 | 2020-10-27 | 四川长虹电器股份有限公司 | 一种用于risc-v架构的中断控制方法 |
CN114968519A (zh) * | 2022-05-19 | 2022-08-30 | 湖北三江航天红峰控制有限公司 | 基于fmql平台的中断嵌套方法、电子设备及存储介质 |
CN116382856B (zh) * | 2023-06-02 | 2023-09-26 | 麒麟软件有限公司 | 基于虚拟化嵌套增强系统实时性的方法 |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20050177668A1 (en) * | 2004-02-09 | 2005-08-11 | Arm Limited | Interrupt pre-emption and ordering within a data processing system |
US20050177667A1 (en) * | 2004-02-11 | 2005-08-11 | Arm Limited | Interrupt priority control within a nested interrupt system |
CN1963768A (zh) * | 2006-12-05 | 2007-05-16 | 北京中星微电子有限公司 | 中断处理方法及装置 |
CN102012842A (zh) * | 2010-11-09 | 2011-04-13 | 北京神舟航天软件技术有限公司 | 基于独立中断栈的中断退出时抢占调度方法 |
-
2018
- 2018-04-16 CN CN201810339587.7A patent/CN108595256B/zh active Active
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20050177668A1 (en) * | 2004-02-09 | 2005-08-11 | Arm Limited | Interrupt pre-emption and ordering within a data processing system |
US20050177667A1 (en) * | 2004-02-11 | 2005-08-11 | Arm Limited | Interrupt priority control within a nested interrupt system |
CN1963768A (zh) * | 2006-12-05 | 2007-05-16 | 北京中星微电子有限公司 | 中断处理方法及装置 |
CN102012842A (zh) * | 2010-11-09 | 2011-04-13 | 北京神舟航天软件技术有限公司 | 基于独立中断栈的中断退出时抢占调度方法 |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
EP4130987A4 (en) * | 2021-02-22 | 2023-12-27 | Nanjing Qinheng Microelectronics Co., Ltd. | RISC-V BASED INTERRUPTION CONTROL SYSTEM AND METHOD |
Also Published As
Publication number | Publication date |
---|---|
CN108595256A (zh) | 2018-09-28 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN108595256B (zh) | 一种基于risc-v架构芯片采用软件实现中断嵌套的方法 | |
KR100934533B1 (ko) | 연산 처리 시스템, 컴퓨터 시스템 상에서의 태스크 제어 방법, 및 컴퓨터 프로그램을 기록한 컴퓨터 판독 가능한 기록 매체 | |
US20080052716A1 (en) | Method and apparatus to control priority preemption of tasks | |
US10248463B2 (en) | Apparatus and method for managing a plurality of threads in an operating system | |
KR20070097538A (ko) | 운영체제에 친숙한 부트로더 | |
US7590990B2 (en) | Computer system | |
CN107203428B (zh) | 一种基于Xen的VCPU多核实时调度算法 | |
US9122521B2 (en) | Enabling multiple operating systems to run concurrently using barrier task priority | |
CN114168271B (zh) | 一种任务调度方法、电子设备及存储介质 | |
US20170212852A1 (en) | Method and accelerator unit for interrupt handling | |
JP2009282987A (ja) | 割込みスケジューリング方法 | |
US20080098398A1 (en) | Efficient Switching Between Prioritized Tasks | |
EP4130987A1 (en) | Interrupt control system and method based on risc-v | |
JP4610322B2 (ja) | 割込み処理制御の方法と装置 | |
US7206884B2 (en) | Interrupt priority control within a nested interrupt system | |
US9372723B2 (en) | System and method for conditional task switching during ordering scope transitions | |
US20090193168A1 (en) | Interrupt mitigation on multiple network adapters | |
CN115098230A (zh) | 管理线程的方法及装置 | |
CN111930488A (zh) | 一种操作系统任务调度的优先级继承方法及系统 | |
CN118519683B (zh) | 一种支持硬实时的嵌入式混合内核操作方法及系统 | |
CN117251393B (zh) | 处理器的中断响应方法、装置、芯片、计算机设备和介质 | |
CN117931412B (zh) | 一种双内核实时操作系统及任务调度方法 | |
JP4984153B2 (ja) | 実時間タスクにおけるブロック回避方法 | |
JP2010026575A (ja) | スケジューリング方法およびスケジューリング装置並びにマルチプロセッサシステム | |
JP2005190238A (ja) | リアルタイム制御方式 |
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 |