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