CSR 位字段

RISC-V stimecmp CSR 寄存器详解

地址 0x14D特权级 Supervisor 模式访问 读写 / 64Supervisor AIA、定时器与间接中断 CSR

stimecmp(0x14D)是 Sstc 定义的 64 位 Supervisor timer compare CSR;当 time 大于等于 stimecmp 时,S 模式定时器中断 STIP 变为挂起。

字段映射

按 bit 字段理解 stimecmp

1 个关键字段
63:0

TIME_COMPARE

读写

64 位 supervisor timer compare 值;在 RV32 中低 32 位通过 stimecmp 访问,高 32 位通过 stimecmph 访问。

这个字段控制什么

  • - 64 位 supervisor timer compare 值;在 RV32 中低 32 位通过 stimecmp 访问,高 32 位通过 stimecmph 访问。

常见取值

这个字段更适合结合上下文字段解释,不用按固定枚举背诵。

打开官方手册
官方依据与检索要点

stimecmp 是 Sstc 提供的 S 模式定时器比较值。比较条件基于 time >= stimecmp;STIP 的更新最终可见但可能不是立即可见。

官方定义 stimecmp 为 64 位,RV32 使用 stimecmp/stimecmph 分别访问低/高 32 位。
STIP 反映 stimecmp 与 time 的比较结果,并按标准中断使能与委托规则进入 handler。
handler 更新 stimecmp 后仍要允许偶发 spurious timer interrupt。

读这个 CSR 时先看什么

  • - 先确认当前 hart 实现 stimecmp 所属扩展;未实现或权限不足的 CSR 访问会触发非法指令异常。
  • - 结合地址 0x14D、最低访问特权级和官方访问类判断软件是否可以直接访问。
  • - 读取保留、WPRI、WARL 或 WLRL 字段时不要假设固定值,应按官方规范和实现返回值解释。

写入前的风险检查

  • - 写入小于或等于当前 time 的值会使 STIP 挂起;写入大于当前 time 的值会清除该 timer interrupt 条件。
  • - 更新 stimecmp 后 STIP 的变化最终可见但不保证立即可见,handler 返回后可能遇到偶发 spurious timer interrupt。

放回真实流程里理解

1

读取 time 或由调度器决定下一次 S 模式 tick。

2

写入 stimecmp(RV32 同时维护 stimecmph 高半)设置下一次比较点。

3

按标准中断使能和委托规则处理 STIP;不要假设 STIP 立即下降。

常见问题

stimecmp 是 XLEN 宽吗?

不是。官方 Sstc 文本定义它是 64 位;RV32 通过 stimecmp 和 stimecmph 分半访问。

写 stimecmp 会立即清除 STIP 吗?

写入大于 time 的值会清除比较条件,但 STIP 变化只保证最终反映,不保证立即反映。