CSR 位字段

RISC-V mideleg CSR 寄存器详解

地址 0x303特权级 M模式访问 读写 / MXLENMachine 委托、环境配置与状态使能 CSR

机器中断委托寄存器;在实现 S 模式的 hart 上由 M 模式控制哪些中断委托给 S 模式处理。

字段映射

按 bit 字段理解 mideleg

4 个关键字段
MXLEN-1:0

ID

WARL

中断委托位,布局与 mip 相同;支持的可写位由实现决定,通过写 1 后读回发现。

这个字段控制什么

  • - 中断委托位,布局与 mip 相同;支持的可写位由实现决定,通过写 1 后读回发现。

常见取值

0不委托

对应陷阱不由该委托位转给 S 模式;若发生在低于 M 的特权级且没有其他委托路径,则进入 M 模式陷阱处理。

1委托给 S 模式

对应陷阱在 S 模式或 U 模式发生时委托给 S 模式陷阱处理程序;M 模式发生的陷阱不会向下委托。

1

SSIP

WARL

Supervisor software interrupt 委托位(若实现支持)。

这个字段控制什么

  • - Supervisor software interrupt 委托位(若实现支持)。

常见取值

0不委托

对应陷阱不由该委托位转给 S 模式;若发生在低于 M 的特权级且没有其他委托路径,则进入 M 模式陷阱处理。

1委托给 S 模式

对应陷阱在 S 模式或 U 模式发生时委托给 S 模式陷阱处理程序;M 模式发生的陷阱不会向下委托。

5

STIP

WARL

Supervisor timer interrupt 委托位(若实现支持)。若被委托,STI 不会在 M 模式被接收。

这个字段控制什么

  • - Supervisor timer interrupt 委托位(若实现支持)。若被委托,STI 不会在 M 模式被接收。

常见取值

0不委托

对应陷阱不由该委托位转给 S 模式;若发生在低于 M 的特权级且没有其他委托路径,则进入 M 模式陷阱处理。

1委托给 S 模式

对应陷阱在 S 模式或 U 模式发生时委托给 S 模式陷阱处理程序;M 模式发生的陷阱不会向下委托。

9

SEIP

WARL

Supervisor external interrupt 委托位(若实现支持)。

这个字段控制什么

  • - Supervisor external interrupt 委托位(若实现支持)。

常见取值

0不委托

对应陷阱不由该委托位转给 S 模式;若发生在低于 M 的特权级且没有其他委托路径,则进入 M 模式陷阱处理。

1委托给 S 模式

对应陷阱在 S 模式或 U 模式发生时委托给 S 模式陷阱处理程序;M 模式发生的陷阱不会向下委托。

官方依据与检索要点

mideleg 控制哪些中断委托给 S 模式。位布局与 mip 相同,常见位包括 SSIP、STIP、SEIP。

实现可只支持一部分可委托中断位;写 1 后读回用于发现。
被委托的中断在 M 模式被屏蔽,并转由 S 模式路径处理。
mideleg 的机器级中断位不得固定为只读 1。

读这个 CSR 时先看什么

  • - 实现 S 模式的 hart 必须有 mideleg;没有 S 模式的 hart 不应有 mideleg。
  • - mideleg 是 MXLEN 位读写寄存器,位位置与 mip 匹配。
  • - 支持的中断委托位通过写入全 1 后读回发现。

写入前的风险检查

  • - 不要假设每个 mip 位都可在 mideleg 中写入;实现支持的位可能只是子集。
  • - 对应机器级中断的位不得固定为只读 1;较低级中断位可以是只读 1。
  • - 被委托的中断会在 M 模式被屏蔽;若必须由 M 模式处理,应清除相应委托位。

放回真实流程里理解

1

在机器模式初始化期间写入候选中断委托位。

2

读回 mideleg,发现已实现的中断委托位。

3

把中断委托给 S 模式前,先确认 S 模式中断使能和陷阱向量状态已配置。

常见问题

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

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

写 mideleg 时最容易忽略什么?

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