打印
[RISC-V MCU 应用开发]

RISC-V的非向量中断

[复制链接]
1044|9
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
黄昏收获|  楼主 | 2025-6-29 15:53 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
研究了RISC-V的中断,这是与ARM非常不同的一个点。RISC-V的中断的设计更灵活,可以面对不同的应用场景。针对特殊、严苛的环境也能有对应的最优解。

昨天发了帖子聊了聊RISC-V的向量中断(《RISC-V的向量中断》https://bbs.21ic.com/icview-3466050-1-1.html),今天仍将以GD32VF103为例聊聊非向量中断。多说一句,非向量中断仍然是中断。

非向量中断的中断入口是共享制,即入口函数只有一个。具体哪个外设或事件触发了,需要程序设计人员自行遍历查询。之后,再做出响应。这一套中断响应流程下来,肯定要比向量中断要慢——向量中断是直接进入函数。对于Critical的事件是不是有可能就不满足硬件实时性的要求了?

我们再来看看GD32VF103上面实现非向量中断的处理流程:

下面是非向量中断的入口:

/*
* Set ECLIC non-vector entry to be controlled
* by mtvt2 CSR register.
* Intialize ECLIC non-vector interrupt
* base address mtvt2 to irq_entry.
*/
la t0, irq_entry
csrw CSR_MTVT2, t0
csrs CSR_MTVT2, 0x1
其中irq_entry表示了非向量的处理过程。csrs CSR_MTVT2, 0x1该指令的解析如下:

mtvt2[0] = 1 mtvt2[0]为0时,中断入口使用mtvec寄存器,mtvt2[0]为1时,中断入口为mtvt2[31:2]。

从中断处理的原理上来讲,中断处理函数分三部分:

1. 保存当前现场

2. 进入中断处理函数

3. 恢复现场

RISC-V的实现也是如此。不过,这里要特别说明一个特性“中断咬尾”:在所有非向量中断共享的共有代码段中,在踏入中断服务程序的同时,“csrrw ra, CSR_JALMNXTI,ra”指令还会达到 JAL(Jump and Link)的效果。硬件同时更新Link寄存器的值为该指令的PC自身作为函数调用的返回地址。因此,从中断服务程序函数返回后会回到该“csrrw ra, CSR_JALMNXTI,ra”指令重新执行,重新判断是否还有中断在等待(Pending),从而达到中断咬尾的效果。

感觉上也没有啥特殊的啊!

在ARM的Cortex-M3/M4系列中,ARM对中断优先级管理分为中断优先级组与亚优先级,再者共提供4bit位宽的优先级颗粒度。而RISC-V在向量中断也提供了优先级组的概念,似乎中断优先级也是够用的。为什么RISC-V还要推出一个非向量中断的概念与实现中断优先级的策略。百思不得其解?看来需要在日后的工作学习中找到答案了。



使用特权

评论回复

相关帖子

沙发
治愈糖果屋| | 2025-7-9 15:40 | 只看该作者
确实,RISC-V的中断设计在灵活性上有很大的优势,特别是在需要快速响应的场合。非向量中断虽然处理速度慢一些,但在某些应用场景下,它的共享入口设计可以减少代码的复杂性。

使用特权

评论回复
板凳
蚊子的噩梦| | 2025-7-9 22:27 | 只看该作者
确实,RISC-V的非向量中断设计提供了更高的灵活性,尤其是在资源受限的嵌入式系统中,这种设计可以显著减少内存占用。不过,正如你提到的,它在响应速度上可能不如向量中断。

使用特权

评论回复
地板
Labyrinth| | 2025-7-14 13:46 | 只看该作者
ARM:
ARM 中的 NVIC 是一个非常强大且易于使用的中断控制器,但它的灵活性相对较低,通常用于嵌入式系统中的固定优先级和固定处理顺序的中断处理。
RISC-V:
RISC-V 的中断处理设计非常灵活,能够通过外部的中断控制器(如 PLIC)和核心的控制器(如 CLIC)进行高度配置。RISC-V 允许用户在硬件和软件之间进行更加精细的中断控制,因此可以实现复杂的中断调度和管理策略。

使用特权

评论回复
5
穷得掉渣大侠| | 2025-7-16 17:56 | 只看该作者
确实,RISC-V的中断机制与ARM有很大的不同,非向量中断的设计确实增加了灵活性,但同时也带来了额外的处理开销。对于实时性要求高的应用,非向量中断可能不是最佳选择。

使用特权

评论回复
6
EphemeralEchoes| | 2025-7-16 20:16 | 只看该作者
非向量中断的中断入口是共享机制,这是我的个人理解。

使用特权

评论回复
7
脑洞星球居民| | 2025-7-18 11:57 | 只看该作者
确实,RISC-V的中断设计提供了更高的灵活性,这在处理不同应用场景时尤为重要。非向量中断虽然响应速度可能不如向量中断快,但在某些情况下,它的共享入口设计可以简化程序设计,尤其是在资源受限的环境中。

使用特权

评论回复
8
逆鳞风暴| | 2025-7-18 23:29 | 只看该作者
确实,RISC-V的中断设计在灵活性上比ARM要强很多,特别是在处理不同应用场景时。非向量中断虽然处理速度慢一些,但在某些情况下,这种设计可以节省资源,提高效率。

使用特权

评论回复
9
复古留声机| | 2025-7-24 17:58 | 只看该作者
非常同意,RISC-V的中断设计确实比ARM灵活很多。非向量中断虽然处理速度慢一些,但在某些场景下,它的灵活性和共享入口设计还是很有优势的。

使用特权

评论回复
10
脑洞星球居民| | 2025-7-24 21:17 | 只看该作者
非常同意你的观点,RISC-V的非向量中断确实提供了更多的灵活性,尤其是在资源受限的系统中。不过,对于实时性要求高的应用,确实需要权衡其性能影响。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

4

主题

15

帖子

0

粉丝