Interrupt
读写最高位指示陷阱原因是否为中断:1=中断,0=同步异常。
这个字段控制什么
- - 最高位指示陷阱原因是否为中断:1=中断,0=同步异常。
常见取值
这是同步异常,低位字段按异常原因码解释。
这是中断,低位字段按中断原因码解释。
监管者陷阱原因寄存器,记录进入 S 模式陷阱的中断位和异常/中断原因码。
最高位指示陷阱原因是否为中断:1=中断,0=同步异常。
这是同步异常,低位字段按异常原因码解释。
这是中断,低位字段按中断原因码解释。
异常或中断原因码。该字段为 WLRL,必须能保存 0-31 的值;中断代码按 Supervisor interrupt cause 解释。
同步异常原因码 0。
同步异常原因码 1。
同步异常原因码 2。
同步异常原因码 3。
同步异常原因码 4。
同步异常原因码 5。
同步异常原因码 6。
同步异常原因码 7。
同步异常原因码 8。
同步异常原因码 9。
同步异常原因码 12。
同步异常原因码 13。
同步异常原因码 15。
同步异常原因码 18。
同步异常原因码 19。
当 Interrupt 位为 1 时,低位原因码 1 表示 Supervisor 软件中断。
当 Interrupt 位为 1 时,低位原因码 5 表示 Supervisor 定时器中断。
当 Interrupt 位为 1 时,低位原因码 9 表示 Supervisor 外部中断。
当 Interrupt 位为 1 时,低位原因码 13 表示计数器溢出中断。
scause 把 S 模式陷阱原因分成最高位 Interrupt 和低位 Exception Code。低位字段是 WLRL,页面列出的代码必须按 Interrupt 位所在上下文解释。
进入 S 模式陷阱后读取 scause。
若 Interrupt=1,按 Supervisor 中断原因码分派;若 Interrupt=0,按同步异常原因码分派。
结合 sepc 和 stval 定位具体指令地址、访存地址或异常附加信息。
scause 的最低访问级为 S 模式。访问不存在 CSR 的指令为保留指令,不适用下述虚拟指令例外。权限不足而访问已实现的 CSR 通常触发非法指令异常;H 扩展下,VU 访问已实现且同种读写在 HS 模式允许(按 mstatus.TVM=0 判断)的 supervisor CSR 时,触发虚拟指令异常。
低位 Exception Code 是 WLRL,不能假设任意写入的代码都会保持;还要让 Interrupt 位与原因码上下文匹配。