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 定位具体指令地址、访存地址或异常附加信息。
不能只看 CSR 名称判断。官方 CSR 地址编码和表格给出最低访问特权级;scause 当前记录为 S模式,权限不足或未实现时访问会触发非法指令异常。
低位 Exception Code 是 WLRL,不能假设任意写入的代码都会保持;还要让 Interrupt 位与原因码上下文匹配。