不可屏蔽中斷
rnmi(可恢復不可屏蔽中斷)中斷信號是 hart 的電平敏感輸入。不可屏蔽中斷比 hart上的任何其他中斷或異常具有更高的優先級,并且不能被軟件禁用。具體來說,它們不會通過清除mstatus.mie 寄存器來禁用。
Handler Addresses
NMI 有一個關聯的異常陷阱處理程序地址。該地址由外部輸入信號設置。
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 中的值分別返回中斷上下文的程序計數器和特權模式。該指令還設置內部 rnmie狀態位。
編碼與 MRET 相同,除了第 30 位設置(即 funct7=0111000)。例如:
.word 0x70200073 // opcode for MNRET (return from RNMI)
RNMI Operation
當檢測到RNMI中斷時,將中斷的PC寫入mnepc CSR,RNMI的類型寫入mncause CSR,中斷上下文的特權模式寫入mnstatusCSR。內部微體系結構狀態位 rnmie 被清除以指示處理器處于 RNMI 處理程序中并且不能接受新的 RNMI 中斷。清除時,內部 rnmie位還會禁用所有其他中斷。
這些中斷被稱為不可屏蔽的,因為軟件無法屏蔽中斷。但是,為了正確操作,必須推遲同一中斷的其他實例,直到處理程序完成,因此內部狀態位
RNMI 處理程序可以使用 MNRET 指令(在第 7.11.3 節中描述)恢復原始執行,該指令從 mnepc 恢復 PC,從 mnstatus恢復特權模式,并設置內部 rnmie 狀態位,重新啟用其他中斷。
如果hart在rnmie位清零時遇到異常,則將異常狀態寫入mepc和mcause,mstatus.mpp設置為M-mode,hart跳轉到RNMI異常處理程序地址。
RNMI 處理程序中的陷阱只有在處理程序正在服務發生在機器模式之外的中斷時發生時才能恢復。
-
內核
+關注
關注
3文章
1382瀏覽量
40422 -
RISC
+關注
關注
6文章
465瀏覽量
83870 -
sifive
+關注
關注
0文章
36瀏覽量
9473
發布評論請先 登錄
相關推薦
評論