特權(quán)模式中斷
U54內(nèi)核支持有選擇地將中斷和異常定向到S模式。
該功能由中斷和異常委托CSR處理:mideleg和medeleg。S模式中斷和異??梢酝ㄟ^(guò)stvec、sip、sie 和 scause 管理。
在M模式下,軟件還可以直接寫(xiě)入SIP寄存器,從而有效地向S模式發(fā)送中斷。這對(duì)于定時(shí)器和軟件中斷特別有用,因?yàn)榭赡苄枰贛模式和S模式下處理這些中斷。
Delegation Registers (mideleg and medeleg)
默認(rèn)情況下,所有的trap都在M模式下處理。M模式下軟件可以通過(guò)CSR 有選擇地將中斷和異常委托給S模式。具體的映射如表 92 和表 93 。
注意,本地中斷可以委托給M模式。
Supervisor Status Register (sstatus)
與M模式類似,S模式有一個(gè)寄存器,專門(mén)用于跟蹤 hart 的當(dāng)前狀態(tài),稱為 sstatus。sstatus 實(shí)際上是 mstatus的受限視圖,因?yàn)閷?duì) sstatus 所做的更改反映在 mstatus 中。
通過(guò)在 sstatus 中設(shè)置 SIE 位并在 sie 寄存器中啟用所需的單個(gè)中斷來(lái)啟用中斷。
Supervisor Interrupt Enable Register (sie)
通過(guò)在 sie 寄存器中設(shè)置適當(dāng)?shù)奈粊?lái)啟用管理員中斷。
Supervisor Interrupt Pending (sip)
S模式中斷掛起 (sip) 寄存器指示當(dāng)前哪些中斷掛起。
Supervisor Cause Register (scause)
當(dāng)S模式下捕獲陷阱時(shí),將導(dǎo)致陷阱的事件的代碼寫(xiě)入 cause。當(dāng)導(dǎo)致陷阱的事件是中斷時(shí),最高有效位 scause 設(shè)置為1,最低有效位表示中斷號(hào),使用與 sip 中的位置相同的編碼。例如,S模式定時(shí)器中斷導(dǎo)致 cause 被設(shè)置為0x8000_0000_0000_0005。
scause 也用于指示同步異常的原因,在這種情況下,scause 的最高有效位設(shè)置為 0。有關(guān)同步異常代碼的列表,請(qǐng)參見(jiàn)表 98。
Supervisor Trap Vector (stvec)
默認(rèn)情況下,所有中斷都會(huì)捕獲到 stvec 寄存器中定義的單個(gè)地址。由中斷處理程序讀取原因并做出相應(yīng)的反應(yīng)。RISC?V 和 U54內(nèi)核還支持選擇性地啟用中斷向量的能力。當(dāng)啟用向量時(shí),在 sie 中定義的每個(gè)中斷都會(huì)陷入到它自己特定中斷處理程序中。
當(dāng) stvec 寄存器的 MODE 字段設(shè)置為 1 時(shí),向量中斷被啟用。
如果向量中斷被禁用 (stvec.MODE=0),所有中斷都會(huì)陷入 stvec.BASE 地址。如果啟用矢量中斷 (stvec.MODE=1),中斷pc 設(shè)置為 stvec.BASE + 4 × 異常代碼 (scause.EXCCODE)。例如,如果發(fā)生管理定時(shí)器中斷,則 pc 設(shè)置為 stvec.BASE+ 0x14。通常,陷阱向量表中填充有跳轉(zhuǎn)指令,以將控制轉(zhuǎn)移到特定于中斷的陷阱處理程序。
在向量中斷模式下,BASE 必須是 128 字節(jié)對(duì)齊的。
所有主管外部中斷(全局中斷)都映射到異常代碼 9。因此,當(dāng)啟用中斷向量時(shí),pc 被設(shè)置為任何全局中斷的地址 stvec.BASE +0x24。
Delegated Interrupt Handling
接受委派陷阱后,會(huì)發(fā)生以下情況:
sstatus.SIE 的值被復(fù)制到 sstatus.SPIE,然后 sstatus.SIE 被清除,有效地禁用中斷。
當(dāng)前pc被復(fù)制到sepc寄存器中,然后pc被設(shè)置為stvec的值。在啟用矢量中斷的情況下,pc 設(shè)置為 stvec.BASE + 4 × 異常代碼(scause.EXCCODE)。
中斷前的特權(quán)模式編碼在 sstatus.SPP 中
此時(shí),控制權(quán)移交給中斷處理程序中的軟件,中斷被禁用??梢酝ㄟ^(guò)顯式設(shè)置 sstatus.SIE 或執(zhí)行 SRET 指令退出處理程序來(lái)重新啟用中斷。執(zhí)行SRET 指令時(shí),會(huì)發(fā)生以下情況:
特權(quán)模式設(shè)置為 sstatus.SPP 中編碼的值
status.SPIE 的值被復(fù)制到 status.SIE
pc 設(shè)置為 sepc 的值
此時(shí),控制權(quán)交給了軟件
-
寄存器
+關(guān)注
關(guān)注
31文章
5336瀏覽量
120230 -
內(nèi)核
+關(guān)注
關(guān)注
3文章
1372瀏覽量
40276 -
RISC
+關(guān)注
關(guān)注
6文章
462瀏覽量
83708 -
模式
+關(guān)注
關(guān)注
0文章
65瀏覽量
13383 -
sifive
+關(guān)注
關(guān)注
0文章
36瀏覽量
9458
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論