CSR 位字段

RISC-V mscratch CSR 寄存器详解

地址 0x340特权级 M模式访问 读写 / MXLENMachine 状态、trap 与中断 CSR

机器模式 scratch 寄存器,是供 M 模式软件使用的 MXLEN 位读写 CSR。

字段映射

按 bit 字段理解 mscratch

1 个关键字段
MXLEN-1:0

VALUE

读写

供 M 模式使用的完整 scratch 值;特权架构不为该值定义内部位字段。

这个字段控制什么

  • - 供 M 模式使用的完整 scratch 值;特权架构不为该值定义内部位字段。

常见取值

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

官方依据与检索要点

mscratch 是地址 0x340 的 MXLEN 位 M 模式读写 scratch CSR。它通常保存 hart-local 上下文指针;具体内容由 M 模式软件约定,而不是由硬件位字段定义。

官方手册将 mscratch 定义为 MXLEN 位读写寄存器,专供机器模式使用。
典型用法是在进入 M 模式陷阱处理程序时与用户寄存器交换,取得机器模式 hart-local 上下文空间指针。
mscratch 没有标准化内部位字段;页面中的 VALUE 表示完整软件管理值。

读这个 CSR 时先看什么

  • - mscratch 是 MXLEN 位 M 模式读写 CSR,地址 0x340。
  • - 读取值的含义由 M 模式软件约定决定;硬件不会为普通陷阱自动解释其内容。
  • - 权限不足或访问未实现 CSR 时会触发非法指令异常。

写入前的风险检查

  • - 写入 mscratch 会改变 M 模式陷阱入口软件可能依赖的 scratch 值。
  • - 若把它用作 hart-local 上下文指针,应在陷阱入口、嵌套陷阱和返回路径中保持同一软件约定。

放回真实流程里理解

1

M 模式初始化代码为每个 hart 写入约定的 scratch 值。

2

陷阱入口用 CSR 读写指令与通用寄存器交换或读取 mscratch。

3

陷阱处理和返回路径按同一 M 模式软件约定恢复或更新该值。

常见问题

mscratch 可以在任意特权级访问吗?

不能只看 CSR 名称判断。官方 CSR 地址表给出最低访问特权级;mscratch 位于 0x340,最低访问级为 M 模式。权限不足或访问未实现 CSR 时会触发非法指令异常。

写 mscratch 时最容易忽略什么?

不要把 mscratch 当成硬件定义的位字段寄存器。写入值的含义由 M 模式陷阱软件约定决定,错误覆盖可能破坏陷阱入口使用的上下文指针或临时值。