CSR 位字段

RISC-V mtvec CSR 寄存器详解

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

机器陷阱向量基址寄存器,指向M模式陷阱处理程序的入口地址。

字段映射

按 bit 字段理解 mtvec

2 个关键字段
1:0

MODE

WARL

向量模式选择:0=Direct,1=Vectored;其他标准编码保留,除非扩展另有定义。

这个字段控制什么

  • - 向量模式选择:0=Direct,1=Vectored;其他标准编码保留,除非扩展另有定义。

常见取值

0Direct

所有同步异常和中断都跳转到 BASE。

1Vectored

同步异常跳转到 BASE;中断跳转到 BASE + 4 x cause。

>=2保留

保留编码;可移植软件不应写入或依赖。

XLEN-1:2

BASE

WARL

陷阱入口基址字段;实际 BASE 至少 4 字节对齐,MODE 可施加更严格对齐约束。

这个字段控制什么

  • - 陷阱入口基址字段;实际 BASE 至少 4 字节对齐,MODE 可施加更严格对齐约束。

常见取值

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

官方依据与检索要点

mtvec 是 MXLEN 位 WARL 读写的 Machine trap 向量配置 CSR,包含 BASE 和 MODE;实现可以让它保存只读值。

mtvec 的地址、最低访问特权级和访问属性按官方 CSR 表与 Machine trap-vector 章节核对:0x305,Machine,WARL 读写。
Direct 模式下所有进入 M 模式的 trap 将 pc 设为 BASE;Vectored 模式下同步异常到 BASE,中断到 BASE + 4*cause。
BASE 至少 4 字节对齐;MODE 设置可对 BASE 增加更严格的对齐约束。

读这个 CSR 时先看什么

  • - mtvec 是必须实现的 MXLEN 位 WARL CSR,地址 0x305;实现可以把它固定为只读值。
  • - 读取时将 MODE 与 BASE 一起解释:Direct 模式所有陷阱到 BASE,Vectored 模式的中断到 BASE + 4×cause。
  • - BASE 至少 4 字节对齐,某些 MODE 可能要求更严格的对齐。

写入前的风险检查

  • - 写入前按目标 MODE 对 BASE 对齐;实现可以拒绝不支持的 MODE 或地址组合并返回合法 WARL 值。
  • - 写后回读 mtvec,确认实现实际接受的 BASE 与 MODE;不要把保留 MODE 编码用于可移植软件。

放回真实流程里理解

1

初始化或进入相关特权流程时,软件先读取 mtvec 了解当前状态。

2

根据字段定义只修改目标位,保留其余位的原值。

3

修改后再次读取或通过后续 trap/中断/上下文切换行为验证配置是否生效。

常见问题

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

不能只看 CSR 名称判断。官方 CSR 地址编码和表格给出最低访问特权级;mtvec 当前记录为 M模式,权限不足或未实现时访问会触发非法指令异常。

写 mtvec 时最容易忽略什么?

不要把整个 CSR 当普通整数覆盖。应只修改目标字段,保留未修改位,并按规范处理 WARL、WLRL、WPRI 或保留字段。