智能家居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寄存器。完成異常處理或中斷服務后,處理器內核恢復異?;蛑袛嗲暗奶貦嗄J?,并返回到主程序繼續執行。
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,恢復到中斷前的特權模式。