CSR 位字段

RISC-V mnstatus CSR 寄存器详解

地址 0x744特权级 M模式访问 读写 / MXLEN/XLEN保留、自定义或未分类 CSR

RNMI 状态寄存器,保存被 RNMI 中断上下文的特权、虚拟化和 RNMI 使能状态。

位作用速览
bit 3 = 只有第 3 位;bits 12..11 = 第 12 到第 11 位
高位 MSB低位 LSB
保留63:13保留2:0
字段映射

按 bit 字段理解 mnstatus

4 个关键字段
12:11

MNPP

读写受限/硬件更新

RNMI 进入时保存被中断上下文的前一特权模式,编码方式同 mstatus.MPP。

这个字段控制什么

  • - RNMI 进入时保存被中断上下文的前一特权模式,编码方式同 mstatus.MPP。

常见取值

mnstatus.MNPP
0User

RNMI 进入时被中断上下文的前一特权模式为 User。

1Supervisor

RNMI 进入时被中断上下文的前一特权模式为 Supervisor。

2保留

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

3Machine

RNMI 进入时被中断上下文的前一特权模式为 Machine。

9

MNPELP

读写/硬件更新

若实现 Zicfilp,保存 RNMI 进入前的 ELP 状态;否则为保留位。

这个字段控制什么

  • - 若实现 Zicfilp,保存 RNMI 进入前的 ELP 状态;否则为保留位。

常见取值

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

7

MNPV

读写受限/硬件更新

RNMI 进入时保存被中断上下文的虚拟化模式,编码方式同 mstatus.MPV。

这个字段控制什么

  • - RNMI 进入时保存被中断上下文的虚拟化模式,编码方式同 mstatus.MPV。

常见取值

mnstatus.MNPV
0非虚拟化

RNMI 进入时被中断上下文不在虚拟化 guest 模式。

1虚拟化

RNMI 进入时被中断上下文在虚拟化 guest 模式。

3

NMIE

读/置位

RNMI 全局使能位;复位为 0,软件可置 1,尝试清 0 无效,RNMI 进入时硬件清 0,MNRET 置 1。

这个字段控制什么

  • - RNMI 全局使能位;复位为 0,软件可置 1,尝试清 0 无效,RNMI 进入时硬件清 0,MNRET 置 1。

常见取值

mnstatus.NMIE
0RNMI 禁止

RNMI 全局使能关闭;RNMI 入口会硬件清 0。软件尝试清 0 无效。

1RNMI 使能

RNMI 全局使能开启;软件可置 1,MNRET 也会置 1。

读这个 CSR 时先看什么

  • - 先确认当前 hart 是否实现 mnstatus,未实现或权限不足的访问会触发非法指令异常。
  • - 结合地址 0x744 和最低访问特权级(Machine 模式)判断软件是否可以直接读取。
  • - 读取保留位或 WARL/WLRL 位时不要假设固定值,应按规范和实现返回值解释。

写入前的风险检查

  • - 写入前保留未修改的位,避免把保留位或实现定义位写成非规范值。
  • - 优先使用 CSRRS/CSRRC 做局部置位或清位,避免 CSRRW 覆盖并发更新的状态位。

放回真实流程里理解

1

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

2

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

3

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