Interrupt
读写陷阱由中断引起时为 1;同步异常时为 0。
这个字段控制什么
- - 陷阱由中断引起时为 1;同步异常时为 0。
常见取值
这是同步异常,低位字段按异常原因码解释。
这是中断,低位字段按中断原因码解释。
机器陷阱原因寄存器,记录触发陷阱的事件类型和原因码。
陷阱由中断引起时为 1;同步异常时为 0。
这是同步异常,低位字段按异常原因码解释。
这是中断,低位字段按中断原因码解释。
标识最近一次异常或中断的原因码。该字段为 WLRL,只保证保存支持的异常码;保留、平台、自定义或扩展相关编码必须按适用官方表解释。
同步异常原因码 0。
同步异常原因码 1。
同步异常原因码 2。
同步异常原因码 3。
同步异常原因码 4。
同步异常原因码 5。
同步异常原因码 6。
同步异常原因码 7。
同步异常原因码 8。
同步异常原因码 9。
同步异常原因码 11。
同步异常原因码 12。
同步异常原因码 13。
同步异常原因码 15。
同步双重陷阱异常原因码 16:Ssdbltrp 的 SDT 已为 1 时,意外的 S 模式陷阱被递送至 M 模式,并将 mcause 设为 16。
同步异常原因码 18。
同步异常原因码 19。
当 Interrupt 位为 1 时,低位原因码 1 表示 Supervisor 软件中断。
当 Interrupt 位为 1 时,低位原因码 3 表示 Machine 软件中断。
当 Interrupt 位为 1 时,低位原因码 5 表示 Supervisor 定时器中断。
当 Interrupt 位为 1 时,低位原因码 7 表示 Machine 定时器中断。
当 Interrupt 位为 1 时,低位原因码 9 表示 Supervisor 外部中断。
当 Interrupt 位为 1 时,低位原因码 11 表示 Machine 外部中断。
当 Interrupt 位为 1 时,低位原因码 13 表示计数器溢出中断。
mcause 是地址 0x342 的 MXLEN 位 M 模式陷阱原因 CSR。最高位 Interrupt 区分中断和同步异常,低位 Exception Code 是 WLRL,只保证保存实现支持的原因码。
陷阱处理程序读取 mcause。
检查 Interrupt 位:1 表示中断原因码,0 表示同步异常原因码。
用 Exception Code 查询适用的官方原因码表,并结合 mepc/mtval 等 CSR 完成分派。
mcause 的最低访问级为 M 模式;权限不足而访问已实现的该 CSR 会触发非法指令异常。访问不存在 CSR 的指令为保留指令,不能笼统规定其异常行为。
写 mcause 时不能假设任意原因码都会被保留。Exception Code 是 WLRL,只保证保存实现支持的合法原因码;读取后也必须按 Interrupt 位和官方原因码表解释。