You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

RISC-V中MTI与STI触发疑问及委托后仍进M模式咨询

RISC-V 时间中断触发问题分析(QEMU 5.0.0 + OpenSBI 默认配置)

STI 触发机制

  • RISC-V 定时器中断分为两个层级:Machine Timer Interrupt (MTI)(M模式专属)和Supervisor Timer Interrupt (STI)(S模式专属)
  • 硬件原生逻辑:当全局计数器mtime的值大于等于当前HART的mtimecmp时,首先触发MTI,这是硬件的默认触发路径
  • 要让STI生效,必须通过M模式配置完成“转发”:
    • 置位mideleg寄存器的STIE位(bit 5),将STI委托给S模式处理
    • 置位sie寄存器的STIE位(bit 5),使能S模式下的定时器中断
    • 确保M模式未单独使能MTI(mie.MTIE位为0),否则MTI会优先触发

触发MTI而非STI的原因

针对你遇到的现象,核心原因如下:

  • OpenSBI 默认配置可能使能了MTI:默认OpenSBI固件中,M模式的mie.MTIE位会被置1,此时即使mideleg.STIE已配置,MTI会因优先级更高(M模式中断优先级高于S模式)被优先触发
  • 委托配置不完整:可能仅设置了mideleg.STIE,但未关闭M模式的MTI使能(mie.MTIE未清零),或未置位S模式的sie.STIE位
  • QEMU 5.0.0 版本特性:早期QEMU搭配的OpenSBI默认未自动完成STI委托,需要手动在M模式(或通过OpenSBI接口)完成完整的寄存器配置

验证与解决步骤

  • 读取mideleg寄存器,确认STIE位(bit 5)为1
  • 读取mie寄存器,确认MTIE位(bit 7)为0,同时STIE位(bit 5)为1
  • 切换到S模式,读取sie寄存器,确认STIE位(bit 5)为1
  • 优先使用OpenSBI提供的SBI_TIMER_SET_COMPARE接口设置定时器,而非直接操作mtimecmp,确保OpenSBI的委托逻辑正确执行

内容的提问来源于stack exchange,提问作者lucky

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.09 13:52:09