打印
[单片机芯片]

RISC-V 如何实现 __disable_irq()?

[复制链接]
989|16
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
本帖最后由 XIVN1987 于 2024-4-16 13:45 编辑

之前一直以为 mstatus.MIE 可以用作中断的全局总开关,,仔细看了 spec 才发现并不能

根据下面这说法,,如果程序正在用户模式执行,,然后来了中断,,即使 mstatus.MIE == 0,也会切换到机器模式去执行中断处理函数。。



所以 RISC-V spec 里面并没有一个全局关闭中断的方法,,

下面这段也来自 spec,,描述更加清晰

虽然 spec 是这样规定的,,但是可能很多 RSIC-V MCU 设计中会直接用 mstatus.MIE 作为中断全局总开关,,这虽然没有严格遵守 spec,,但也不影响 MCU 的正常功能


使用特权

评论回复
沙发
xhackerustc| | 2024-4-14 16:57 | 只看该作者
软件分层,对于S和M只需要disable自己那一级别的中断,如果S要disable M-mode的中断说明软件分层没做好。这个不仅仅riscv有,armv8 A也有类似的情形:比如normal world即使关中断也不能阻止secure world中断

使用特权

评论回复
板凳
XIVN1987|  楼主 | 2024-4-15 09:22 | 只看该作者
xhackerustc 发表于 2024-4-14 16:57
软件分层,对于S和M只需要disable自己那一级别的中断,如果S要disable M-mode的中断说明软件分层没做好。这 ...


这里说的单片机,,

使用特权

评论回复
地板
Dick Hou| | 2024-4-15 11:33 | 只看该作者
MIE和SIE的实现,依赖于处理器的设计厂商。
例如芯来,某些处理器中,没有SIE。因此,MIE=0就是关全局中断。

如果既有MIE,也有SIE,那就是在不同模式的全局中断,在不同模式管理。如果要所有中断都关闭,MIE、SIE都设为0即可。

使用特权

评论回复
5
XIVN1987|  楼主 | 2024-4-15 11:37 | 只看该作者
Dick Hou 发表于 2024-4-15 11:33
MIE和SIE的实现,依赖于处理器的设计厂商。
例如芯来,某些处理器中,没有SIE。因此,MIE=0就是关全局中断 ...


如果芯片有M、U两个模式,,程序在U模式下运行产生了中断,,MIE==0,,此时会执行ISR跑去M模式吗?

你仔细对比下我一楼截图里圈出来的部分考虑下。。

使用特权

评论回复
6
e_007| | 2024-4-15 13:23 | 只看该作者
本帖最后由 e_007 于 2024-4-15 13:40 编辑

...

使用特权

评论回复
7
Dick Hou| | 2024-4-15 13:27 | 只看该作者
XIVN1987 发表于 2024-4-15 11:37
如果芯片有M、U两个模式,,程序在U模式下运行产生了中断,,MIE==0,,此时会执行ISR跑去M模式吗?

你 ...

规则确实是这样定义的,但要看你的risc-v核具体是怎样实现的。

像芯来的N307,如果没有配置TEE的话,根本就没有SIE这个位,所以不存在这种情况。

使用特权

评论回复
8
XIVN1987|  楼主 | 2024-4-15 13:37 | 只看该作者
Dick Hou 发表于 2024-4-15 13:27
规则确实是这样定义的,但要看你的risc-v核具体是怎样实现的。

像芯来的N307,如果没有配置TEE的话,根 ...


从始至终我都没提过SIE,,

我一直都是说的单片机上最常见的M、U两种模式

使用特权

评论回复
9
Dick Hou| | 2024-4-15 17:56 | 只看该作者
XIVN1987 发表于 2024-4-15 13:37
从始至终我都没提过SIE,,

我一直都是说的单片机上最常见的M、U两种模式 ...

M、U两种模式,对应的只有MIE,根本没有其它IE,至少芯来是这样的。

使用特权

评论回复
10
Dick Hou| | 2024-4-15 18:28 | 只看该作者
本帖最后由 Dick Hou 于 2024-4-15 18:30 编辑

用户模式并不能处理中断,它只能响应中断!中断、异常等被响应时,会自动切换到机器模式。LZ位也是这样描述的。因此,MIE=0后,没有中断能够再响应了。

使用特权

评论回复
11
XIVN1987|  楼主 | 2024-4-15 18:56 | 只看该作者
Dick Hou 发表于 2024-4-15 18:28
用户模式并不能处理中断,它只能响应中断!中断、异常等被响应时,会自动切换到机器模式。LZ位也是这样描述 ...



下面这段描述够清晰了吧,,


使用特权

评论回复
12
xhackerustc| | 2024-4-15 19:45 | 只看该作者
XIVN1987 发表于 2024-4-15 09:22
这里说的单片机,,

提armv8 A是为了说明riscv这样设计要求软件做好分层

PS: 即使只说单片机可不仅仅A profile有rsecure world和normal world哦,mcu也有比如cm33

使用特权

评论回复
13
Dick Hou| | 2024-4-16 16:36 | 只看该作者
XIVN1987 发表于 2024-4-15 18:56
下面这段描述够清晰了吧,,

你楼主位已经加了红字了,实际上,risc-v规范,和IP的实现,是两码事。risc-v就是太自由了,不一定是好事。

回到问题本身,讨论risc-v规范,和讨论某个IP的实现,不是一回事。我的回复中,都有针对性的提到,芯来的实现方法。

使用特权

评论回复
14
Dick Hou| | 2024-4-16 16:38 | 只看该作者
再举个例子,risc-v规范,要求实现一个基本的定时器mtime,只要求能够自加1。但实际上,仅仅自加1,不是很好用。因此,某些IP厂,mtime增加了自装载功能。

使用特权

评论回复
15
Dick Hou| | 2024-4-16 16:40 | 只看该作者
又例如,risc-v的中断控制器,像屎一样,于是乎,每个IP厂家又不得不做自己的中断控制器。而这个risc-v规范之外的中断控制器,又是各个IP厂商自由发挥了。

使用特权

评论回复
16
奇点未来| | 2024-4-16 17:33 | 只看该作者
有做过CH582私有协议组网的工程师吗,联系我1345294131

使用特权

评论回复
17
XIVN1987|  楼主 | 2024-4-16 17:41 | 只看该作者
Dick Hou 发表于 2024-4-16 16:36
你楼主位已经加了红字了,实际上,risc-v规范,和IP的实现,是两码事。risc-v就是太自由了,不一定是好事 ...


对的,,我后来回看才发现,,我在说 spec,,你在说具体公司的实现,,咱俩观点都是对的,,只是不在同一个频道上

使用特权

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

本版积分规则

48

主题

325

帖子

17

粉丝