智能家居matter模块乐鑫esp32代理商RISC-V异常和中断响应过程,对于 RISC-V 处理器内核,如果 mstatus.MIE=1,且 mie.MSIE=1、mie.MEIE=1和 mie.MTIE-1,则发生中断请求后,内核在当前指令执行结束后响应中断请求。
RISC-V处理器内核中断响应过程
切换到机器模式(M)--mepc--mtval--mstatus--mcause--mip--条状到mtvec定义的PC地址
智能家居matter模块乐鑫esp32代理商RISC-V 处理器内核首先进入机器模式,然后更新相关的 CSR 寄存器,从 mtvec寄存器中获取中断向量表的基地址。如果是向量中断响应,则将 PC 指向中断向量表中对应的向量位置,获取相应的异常和中断服务程序人口地址,后执行中断服务程序。如果是非向量中断响应,则将 PC 指向所有中断统一的服务程序人口地址。
如果发生中断,则 mepc 寄存器保存当前指令的下一条指令地址 NPC。如果发生异常,则在 mepc 寄存器中保存当前指令地址 PC。
更新 mcause 寄存器,如果是中断,则 mcause[31]=1,mcause[30:0]=中断编码;如果是异常事件,则 mcause[31]=0,mcause[30:0]=异常编码。
更新 mstatus 寄存器,mstatus.MIP=mstatus.MIE。将 mip 寄存器中与中断类型对应的位置 1。例如,对于外中断,智能家居matter模块乐鑫esp32代理商mip.MEIP=1将处理器内核所定义的与该中断对应的信息值(如果已定义)写入 mtval寄存器。完成异常处理或中断服务后,处理器内核恢复异常或中断前的特权模式,并返回到主程序继续执行。
RISC-V 架构提供了不同模式退出异常服务程序的指令。MRET、SRET 和 URET 分别是机器、管理员和用户模式下退出异常处理程序的指令。智能家居matter模块乐鑫esp32代理商所有 RISC-V 架构处理器必须支持MRET 指令,SRET 和 URET 是可选指令。
RISC-V 退出异常处理过程:
MRET--更新mstatus--更新mie--更新mip--恢复中断前模式--跳转mepc保存的PC地址--继续执行主程序
智能家居matter模块乐鑫esp32代理商处理器内核执行 MRET 指令后,自动完成步骤,然后继续执行主程序,具体操作包括:
1、更新 mie,重新打开中断使能位,mstatus.MIE=1;
2、更新 mip,清除 mip 状态位,mstatus.MIP=0;
3、读取 mstatus.MPP,恢复到中断前的特权模式。