基于RISC-V通用中断控制器的管理中断嵌套的方法与流程

摘要: 本发明属于微处理器中断管理,特别涉及基于risc-v通用中断控制器的管理中断嵌套的方法。背景技术:1、现有技术中,常规的非抢占的中断处理流程如图1所示,在主程序...
基于RISC-V通用中断控制器的管理中断嵌套的方法与流程

本发明属于微处理器中断管理,特别涉及基于risc-v通用中断控制器的管理中断嵌套的方法。

背景技术:

1、现有技术中,常规的非抢占的中断处理流程如图1所示,在主程序的执行过程中,发生了中断,cpu跳转到异常入口进行处理,整个过程中,全局中断处于关闭状态,也就是cpu无法再响应其他的中断请求,如果中断处理的时间过长,会影响整个系统的实时响应效率,也就是无法响应高优先级的中断。

2、非抢占的处理流程主要包含以下几个步骤:

3、保存现场

4、中断服务

5、恢复现场

6、这三个过程中是原子执行的,不允许其他中断进入,其中中断服务执行的时间要比保存现场与恢复现场时间长一些。

7、为了提升特定的中断响应时间,可以让中断服务的程序可以被特定中断打断,所以在中断服务程序中是要打开中断,允许特定中断进入。

8、所以可以控制中断的mask位使特定中断可以响应。

9、有的中断处理方法通常采用固定优先级或简单嵌套机制,存在以下问题:

10、1.响应延迟:低优先级中断服务程序执行时,高优先级中断无法及时抢占,导致响应延迟。

11、2.硬件依赖:部分方案需依赖复杂硬件逻辑(如多级中断控制器)实现优先级管理,增加成本。

12、3.灵活性不足:难以动态调整中断优先级,难以适配不同应用场景。

13、也就是说,现有技术存在的缺陷在于:

14、低优先级中断服务程序执行时,高优先级中断无法及时抢占,导致响应延迟。

技术实现思路

1、为了解决上述问题,本技术的目的在于:

2、1).解决在嵌入式芯片领域,在不需要复杂的硬件中断控制器的情况下,使用方法处理中断嵌套和抢占,使高优先级中断可以打断低优先级的执行,提高中断响应速度。

3、2).简化硬件设计,硬件不需要设计复杂的中断控制器支持,只需要简单的屏蔽(mask)、未决(pending)两个寄存器组,就可以对中断的优先级进行管理。

4、3).灵活性,可以弥补部分硬件设计中固定优先级的设计,从而无法动态的调整中断响应优先级。

5、4).基于查找表的处理方法,优化处理流程,提高通用中断响应的效率,提高系统实时响应能力。

6、具体地,本发明提供基于risc-v通用中断控制器的管理中断嵌套的方法,包括以下步骤:

7、s1,抢占式中断处理流程,包括:

8、在中断发生时,保存当前上下文savecontext,包括寄存器状态,并动态配置中断使能ie和屏蔽mask状态,以允许高优先级中断抢占;

9、打开risc-v的全局中断使能mstatus_mie,执行中断服务程序;

10、中断处理完成后,关闭全局中断使能,恢复被屏蔽的中断源及寄存器状态restorecontext;

11、s2,动态更新irq_mask_table流程,包括:

12、通过中断号irq_number查询irq_priority_table,获取目标中断的优先级prio;若当前处于非中断上下文,直接配置硬件irq_mask寄存器;

13、若处于中断上下文,则更新irq_mask_table中优先级低于或等于prio的掩码位,并通过单条指令将irq_mask_table[prio]同步至irq_mask寄存器;

14、s3,中断优先级判决流程,包括:

15、保存当前中断优先级cur_irq_priority至栈中;

16、遍历irq_pending寄存器,结合irq_mask_table逐级进行逻辑与运算,确定最高有效中断优先级prio;

17、更新cur_irq_priority=prio,并将未处理中断记录至cur_irq_pending[prio]表中;

18、s4,中断处理流程,包括:

19、根据cur_irq_priority从cur_irq_pending表中获取待处理中断号irq_number;调用handle_irq(irq_number)执行中断服务,期间允许更高优先级中断嵌套执行。

20、所述步骤s1进一步包括:

21、s1.1,当发生中断或异常时,进入异常入口,关闭全局中断;

22、s1.2,保存当前寄存器状态,并将当前处理的中断优先级cur_irq_priority压栈保存;

23、s1.3,查找并更新当前中断的优先级cur_irq_priority为新的优先级pr0;s1.4,屏蔽所有优先级小于或等于cur_irq_priority的中断源;

24、s1.5,打开全局中断,执行中断处理例程;

25、s1.6,中断处理完成后,关闭全局中断,从栈中恢复之前保存的cur_irq_priority;

26、s1.7,恢复被屏蔽的中断源,并恢复寄存器状态;

27、s1.8,执行异常返回,继续处理原任务或响应更高优先级中断,所述更高优先级中断可嵌套处理,其步骤与前置异常处理流程相同,实现优先级动态切换与嵌套响应。

28、所述步骤s1中还包括:

29、通过查找表irq_mask_table动态配置中断屏蔽状态,允许高优先级中断打断低优先级中断;

30、所述irq_mask_table为数组结构,其成员值与中断优先级一一对应,每个成员值的比特位表示该优先级下是否允许响应中断。

31、所述步骤s2中irq_mask_table更新流程,包括:

32、s2.1,在系统调用enable_irq或disable_irq时,通过irq_number索引查询irq_priority_table,获取目标中断的优先级prio;

33、s2.2,若当前未处于中断处理状态,则根据优先级prio更新irq_mask_table中的对应位;

34、s2.3,将更新后的irq_mask_table内容写入irq_mask寄存器,动态调整中断屏蔽状态;

35、通过上述步骤实现中断源的优先级化屏蔽或使能,确保高优先级中断不被低优先级中断阻塞;支持动态优先级配置,通过修改irq_priority_table中的优先级值,实时影响后续中断屏蔽逻辑。

36、所述步骤s2中还包括:

37、通过将低于prio的irq_mask_table对应比特位置位或清零,快速屏蔽当前及更低优先级中断;

38、仅需一条指令将irq_mask_table[prio]的值复制到irq_mask寄存器,实现高效中断屏蔽。

39、所述步骤s3进一步包括:

40、s3.1,保存当前处理的中断优先级cur_irq_priority到栈中,即*sp=cur_irq_priority;

41、s3.2,初始化优先级查找变量prto=0,并通过irq_pending寄存器获取待处理中断状态;遍历优先级掩码表irq_mask_table,依次执行以下操作:s3.2.1,从irq_mask_table中获取当前优先级prto对应的掩码irq_mask;s3.2.2,将irq_mask与irq_pending寄存器的值进行逻辑与运算,得到有效中断结果result;

42、s3.2.3,若result!=0,则更新当前处理的优先级cur_irq_priority=prto,并终止遍历;

43、s3.2.4,否则递增prto,继续检查下一优先级;

44、s3.3,屏蔽所有优先级小于或等于cur_irq_priority的中断源;

45、s3.4,根据最终确定的cur_irq_priority,更新中断处理状态即cur_irq_pending表;

46、其中,支持多优先级轮询,通过遍历irq_mask_table动态确定最高有效中断优先级,确保实时响应。

47、所述步骤s3中还包括:

48、支持多优先级轮询,通过动态遍历irq_mask_table确定最高有效中断优先级;

49、使用cur_irq_pending表记录未处理的中断状态,确保实时响应。

50、所述步骤s4进一步包括:

51、根据cur_irq_priority查询cur_irq_pending表,确定待处理的中断号irq_number;

52、调用对应的中断处理函数handle_irq(irq_number),执行具体中断服务逻辑;通过优先级与中断号的动态匹配,确保高优先级中断的服务程序优先执行。

53、所述irq_mask_table为多维数组,其每个元素对应一个优先级的中断掩码,且与硬件irq_mask寄存器位一一映射,支持通过enable_irq和disable_irq动态调整中断响应策略。

54、所述方法通过软硬件协同机制,中断控制器的情况下,实现优先级嵌套与动态屏蔽,提升系统实时性;在不依赖复杂硬件中断控制器的情况下实现中断抢占和嵌套,支持动态优先级配置,并通过查找表优化中断响应速度和屏蔽效率。

55、由此,本方案的优势在于:

56、1).可以在没有复杂硬件中断控制器的cpu上可以支持中断抢占和中断嵌套。

57、2).可以灵活的设置中断优先级。

58、3).使用irq_mask_table的方式,能够加快中断优先级的确定。

59、4).使用irq_mask_table的方式,能够快速屏蔽低优先级的中断,只需要一条指令即可实现。

60、5).优化的中断抢占处理逻辑,通过查找表的方式,加快中断响应速度。