不可屏蔽中斷
rnmi(可恢復不可屏蔽中斷)中斷信號是 hart 的電平敏感輸入。不可屏蔽中斷比 hart上的任何其他中斷或異常具有更高的優(yōu)先級,并且不能被軟件禁用。具體來說,它們不會通過清除mstatus.mie 寄存器來禁用。
Handler Addresses
NMI 有一個關聯(lián)的異常陷阱處理程序地址。該地址由外部輸入信號設置。
RNMI CSRs
這些 M 模式 CSR 啟用可恢復非屏蔽中斷 (RNMI)。
mnscratch CSR 擁有一個 64 位讀寫寄存器,它使 NMI 陷阱處理程序能夠保存和恢復被中斷的上下文。
mnepc CSR 是一個 64 位讀寫寄存器,在進入 NMI 陷阱處理程序時,它保存接受中斷的指令的 PC。mnepc 的最低位硬連線為零。
mncause CSR 包含 NMI 的原因,第 63 位設置為 1,并且 NMI 原因編碼在最低有效位中,如果不支持 NMI原因,則為零。mncause 的低位,定義為 exception_code,如下:
mnstatus CSR 包含一個兩位字段,在進入陷阱處理程序時,它包含以與 mstatus.mpp 相同的方式編碼的中斷上下文的特權模式
MNRET Instruction
此僅 M 模式指令使用 mnepc 和 mnstatus 中的值分別返回中斷上下文的程序計數(shù)器和特權模式。該指令還設置內(nèi)部 rnmie狀態(tài)位。
編碼與 MRET 相同,除了第 30 位設置(即 funct7=0111000)。例如:
.word 0x70200073 // opcode for MNRET (return from RNMI)
RNMI Operation
當檢測到RNMI中斷時,將中斷的PC寫入mnepc CSR,RNMI的類型寫入mncause CSR,中斷上下文的特權模式寫入mnstatusCSR。內(nèi)部微體系結構狀態(tài)位 rnmie 被清除以指示處理器處于 RNMI 處理程序中并且不能接受新的 RNMI 中斷。清除時,內(nèi)部 rnmie位還會禁用所有其他中斷。
這些中斷被稱為不可屏蔽的,因為軟件無法屏蔽中斷。但是,為了正確操作,必須推遲同一中斷的其他實例,直到處理程序完成,因此內(nèi)部狀態(tài)位
RNMI 處理程序可以使用 MNRET 指令(在第 7.11.3 節(jié)中描述)恢復原始執(zhí)行,該指令從 mnepc 恢復 PC,從 mnstatus恢復特權模式,并設置內(nèi)部 rnmie 狀態(tài)位,重新啟用其他中斷。
如果hart在rnmie位清零時遇到異常,則將異常狀態(tài)寫入mepc和mcause,mstatus.mpp設置為M-mode,hart跳轉到RNMI異常處理程序地址。
RNMI 處理程序中的陷阱只有在處理程序正在服務發(fā)生在機器模式之外的中斷時發(fā)生時才能恢復。
-
內(nèi)核
+關注
關注
3文章
1363瀏覽量
40228 -
RISC
+關注
關注
6文章
461瀏覽量
83654 -
sifive
+關注
關注
0文章
35瀏覽量
9452
發(fā)布評論請先 登錄
相關推薦
評論