Interrupt
读写指示 vscause 低位原因码表示中断还是同步异常。
这个字段控制什么
- - 指示 vscause 低位原因码表示中断还是同步异常。
vscause 是 VSXLEN 位 WLRL 的 guest trap 原因寄存器;进入 VS-mode trap 时写入中断标志和转换后的原因码。
指示 vscause 低位原因码表示中断还是同步异常。
WLRL 的 VS trap 原因码,必须保存 scause 可保存的同一组值。进入 VS-mode 的 VSEI/VSTI/VSSI 分别写为 supervisor 原因码 9/5/1;platform 中断是否做类似转换由实现决定。同步 VS trap 只来自 medeleg 与 hedeleg 均允许委托的原因。实现 AIA 时,该字段还必须有足够位数表示本 hart 的 vstopi.IID 最大值。
同步异常原因码 0。
同步异常原因码 1。
同步异常原因码 2。
同步异常原因码 3。
同步异常原因码 4。
同步异常原因码 5。
同步异常原因码 6。
同步异常原因码 7。
同步异常原因码 8。
同步异常原因码 12。
同步异常原因码 13。
同步异常原因码 15。
同步异常原因码 18。
同步异常原因码 19。
当 Interrupt 位为 1 时,低位原因码 1 表示 VS 软件中断。
当 Interrupt 位为 1 时,低位原因码 5 表示 VS 定时器中断。
当 Interrupt 位为 1 时,低位原因码 9 表示 VS 外部中断。
当 Interrupt 位为 1 时,低位原因码 13 表示计数器溢出中断。
vscause 记录进入 VS-mode 的最后一次 trap 原因。V=1 时替代 scause,标准 VS 中断原因会转换为 guest 可见的 supervisor 原因码。
M/HS 软件可通过独立 CSR 地址访问 vscause 的 VS 副本。
当 V=1 时,guest 访问 scause 类 supervisor CSR 会替代到对应 VS 状态;直接访问独立 VS CSR 地址会触发 virtual-instruction exception。
进入 VS-mode trap 时同时写 vsepc、vscause 和 vstval;根据 Interrupt 位解释原因码。
不能。H 扩展规定 V=1 时 guest 通过对应 supervisor CSR 别名访问 VS 状态;直接读写独立 VS CSR 地址会触发 virtual-instruction exception。
vscause 保存进入 VS-mode 的最后一次 trap 的 Interrupt 标志和原因码,供 guest trap handler 区分并处理异常或中断。