基于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).优化的中断抢占处理逻辑,通过查找表的方式,加快中断响应速度。
版权声明:本站专利文献数据主要来源于国家知识产权局等公开渠道,由 技术新讯 进行整理汇编。页面设计及数据汇编的著作权归本站所有。全部内容仅供个人学习、科研评估与技术交流参考,严禁用于任何商业用途(包括但不限于直接生产制造、技术转让、倒卖数据等)。
免责条款:专利技术具有时效性,本站不对资料的绝对准确性、完整性和可实施性提供任何明示或暗示的担保。因参考本站内容造成的直接或间接损失,本站不承担相关法律责任。若您认为本站内容有侵权问题,请及时提供权属证明与我们联系,本站将在核实后依法处理。反馈意见:yyfuon@163.com