CSR 位字段

RISC-V sip CSR 寄存器详解

地址 0x144特权级 S模式访问 读写 / SXLENSupervisor 状态、trap 与中断 CSR

监管者中断挂起寄存器,提供 mip 中已委托给 S 模式的中断挂起位视图。

字段映射

按 bit 字段理解 sip

16 个关键字段
0

Reserved

只读 0

标准中断区中的固定零位,读为 0。

这个字段控制什么

  • - 标准中断区中的固定零位,读为 0。

常见取值

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

1

SSIP

读写

Supervisor 软件中断挂起位。若 SSIP 委托给 S 模式,S 模式可通过 sip 读写该位。

这个字段控制什么

  • - Supervisor 软件中断挂起位。若 SSIP 委托给 S 模式,S 模式可通过 sip 读写该位。

常见取值

0未挂起

SSIP 对应中断未挂起。

1挂起

SSIP 对应中断挂起;是否递送还取决于 sie 和 sstatus.SIE。

2

Reserved

只读 0

标准中断区中的固定零位,读为 0。

这个字段控制什么

  • - 标准中断区中的固定零位,读为 0。

常见取值

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

3

MSIP

委派时只读,否则只读 0

Machine 软件中断挂起位的受限视图。只有当 mideleg[3] 可写且置 1 时才在 sip 中可见;否则读为 0。其底层 mip.MSIP 为只读。

这个字段控制什么

  • - Machine 软件中断挂起位的受限视图。只有当 mideleg[3] 可写且置 1 时才在 sip 中可见;否则读为 0。其底层 mip.MSIP 为只读。

常见取值

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

4

Reserved

只读 0

标准中断区中的保留位,读为 0。

这个字段控制什么

  • - 标准中断区中的保留位,读为 0。

常见取值

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

5

STIP

只读

Supervisor 定时器中断挂起位。若 STIP 实现并委托给 S 模式,该位在 sip 中只读;由执行环境设置/清除,或在实现 Sstc 时反映 stimecmp 比较结果。

这个字段控制什么

  • - Supervisor 定时器中断挂起位。若 STIP 实现并委托给 S 模式,该位在 sip 中只读;由执行环境设置/清除,或在实现 Sstc 时反映 stimecmp 比较结果。

常见取值

0未挂起

STIP 对应中断未挂起。

1挂起

STIP 对应中断挂起;是否递送还取决于 sie 和 sstatus.SIE。

6

Reserved

只读 0

标准中断区中的固定零位,读为 0。

这个字段控制什么

  • - 标准中断区中的固定零位,读为 0。

常见取值

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

7

MTIP

委派时只读,否则只读 0

Machine 定时器中断挂起位的受限视图。只有当 mideleg[7] 可写且置 1 时才在 sip 中可见;否则读为 0。其底层 mip.MTIP 为只读。

这个字段控制什么

  • - Machine 定时器中断挂起位的受限视图。只有当 mideleg[7] 可写且置 1 时才在 sip 中可见;否则读为 0。其底层 mip.MTIP 为只读。

常见取值

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

8

Reserved

只读 0

标准中断区中的保留位,读为 0。

这个字段控制什么

  • - 标准中断区中的保留位,读为 0。

常见取值

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

9

SEIP

只读

Supervisor 外部中断挂起位。若 SEIP 实现并委托给 S 模式,该位在 sip 中只读;通常由平台中断控制器设置和清除。

这个字段控制什么

  • - Supervisor 外部中断挂起位。若 SEIP 实现并委托给 S 模式,该位在 sip 中只读;通常由平台中断控制器设置和清除。

常见取值

0未挂起

SEIP 对应中断未挂起。

1挂起

SEIP 对应中断挂起;是否递送还取决于 sie 和 sstatus.SIE。

10

Reserved

只读 0

标准中断区中的固定零位,读为 0。

这个字段控制什么

  • - 标准中断区中的固定零位,读为 0。

常见取值

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

11

MEIP

委派时只读,否则只读 0

Machine 外部中断挂起位的受限视图。只有当 mideleg[11] 可写且置 1 时才在 sip 中可见;否则读为 0。其底层 mip.MEIP 为只读。

这个字段控制什么

  • - Machine 外部中断挂起位的受限视图。只有当 mideleg[11] 可写且置 1 时才在 sip 中可见;否则读为 0。其底层 mip.MEIP 为只读。

常见取值

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

12

Reserved

只读 0

标准中断区中的保留位,读为 0。

这个字段控制什么

  • - 标准中断区中的保留位,读为 0。

常见取值

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

13

LCOFIP

实现 Sscofpmf 时读写,否则只读 0

本地计数器溢出中断挂起位。实现 Sscofpmf 时,该位在 sip 中读写并反映本地计数器溢出请求;未实现 Sscofpmf 时只读为 0。

这个字段控制什么

  • - 本地计数器溢出中断挂起位。实现 Sscofpmf 时,该位在 sip 中读写并反映本地计数器溢出请求;未实现 Sscofpmf 时只读为 0。

常见取值

0未挂起

LCOFIP 对应中断未挂起。

1挂起

LCOFIP 对应中断挂起;是否递送还取决于 sie 和 sstatus.SIE。

15:14

Reserved

只读 0

标准中断区中的固定零位,读为 0。

这个字段控制什么

  • - 标准中断区中的固定零位,读为 0。

常见取值

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

SXLEN-1:16

Platform interrupt pending

WARL

bit 16 及以上指定供平台使用;每个位可写或只读,未实现的中断位只读为 0。

这个字段控制什么

  • - bit 16 及以上指定供平台使用;每个位可写或只读,未实现的中断位只读为 0。

常见取值

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

官方依据与检索要点

sip 不是完整 mip 镜像,而是 S 模式可见的已委托中断挂起视图。SSIP 可由 S 模式软件写入;STIP/SEIP 在 sip 中只读;LCOFIP 属于 Sscofpmf 的本地计数器溢出中断。

CSR 表列出 sip 地址 0x144,Supervisor,RW。
sip/sie 只呈现已委托给 S 模式的中断位;未委托位读为 0。
SSIP 可由 S 模式软件写入;STIP/SEIP 在 sip 中只读;LCOFIP 是 Sscofpmf 定义的 bit 13,本地计数器溢出请求最终设置该位并由软件清除。

汇编操作示例

使用 csrr/csrw/csrs/csrc 指令读写 sip,参考 RISC-V Privileged Architecture §2.8

csrr t0, sip
在 S 模式下读取 S 模式中断挂起状态
csrr t0, sip; andi t0, t0, 0x20; bnez t0, handle_stip
检查 STIP(bit5) 挂起并处理

与其他 CSR 的关系

sip 是 mip 在 S 模式下的受限视图,呈现 SSIP/STIP/SEIP 等 S 模式相关挂起位。S 模式软件可通过 SSIP 请求或清除 S 模式软件中断;STIP/SEIP 反映定时器或外部中断控制器状态。sip 与 sie 配合:挂起位和对应使能位同时成立,并且当前特权状态允许 S 模式中断进入时,中断才会被接受。

关键位字段速查

SSIP(bit1) S模式软件中断挂起 | STIP(bit5) S模式定时器中断挂起 | SEIP(bit9) S模式外部中断挂起

读这个 CSR 时先看什么

  • - sip 是地址 0x144 的 Supervisor RW CSR;权限不足或未实现的 CSR 访问会触发非法指令异常。
  • - sip 和 sie 是 mip/mie 中已委托给 S 模式位的受限视图;未委托位在 sip/sie 中读为 0。
  • - 中断是否最终递送还取决于 sie 对应使能位、sstatus.SIE、当前特权级和委托状态。

写入前的风险检查

  • - 只有已委托且规范定义为可写的挂起位才能通过 sip 修改;不要假设所有显示位都可写。
  • - SSIP 委托给 S 模式时可通过 sip 写入;STIP 和 SEIP 在 sip 中只读;LCOFIP 在 Sscofpmf 下由软件清除,未实现该扩展时为 0。

放回真实流程里理解

1

读取 sip 查看已委托给 S 模式的挂起中断。

2

结合 sie 对应位和 sstatus.SIE 判断该中断是否可递送到 S 模式。

3

只对规范或平台定义为可写的挂起位执行写入/清除操作。

常见问题

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

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

sip 的所有挂起位都能由 S 模式写吗?

不能。SSIP 在委托给 S 模式时可写;STIP 和 SEIP 在 sip 中只读;LCOFIP 仅在 Sscofpmf 下定义并由软件清除,未委托位在 sip 中读为 0。