中斷
U54內(nèi)核支持M模式和S模式中斷。默認(rèn)情況下,所有中斷都在M模式下處理。對(duì)于支持S模式的 hart,可以有選擇地將中斷委托給S模式。
U54中斷架構(gòu)如下:
U54內(nèi)核還支持兩種類(lèi)型的 RISC-V 中斷:本地和全局。
本地中斷:U54內(nèi)核的本地中斷只有2種,軟件中斷和定時(shí)器中斷,這兩個(gè)中斷都由本地中斷器(CLINT)生成。本地中斷通過(guò)專(zhuān)用中斷異常代碼和固定優(yōu)先級(jí)直接發(fā)送給單個(gè)hart。因此,本地中斷沒(méi)有仲裁,也不需要額外的內(nèi)存訪(fǎng)問(wèn)來(lái)確定中斷的原因。
全局中斷:通過(guò)平臺(tái)級(jí)中斷控制器 (PLIC) 路由,該控制器可以通過(guò)外部中斷將中斷定向到系統(tǒng)中的任何 hart。所有的外設(shè)都屬于全局中斷。
中斷優(yōu)先級(jí)
全局中斷的各個(gè)優(yōu)先級(jí)由 PLIC 確定。
U54內(nèi)核的優(yōu)先級(jí)如下,按優(yōu)先級(jí)降序排列:
機(jī)器外部中斷
機(jī)器軟件中斷
機(jī)器定時(shí)器中斷
主管外部中斷
主管軟件中斷
主管定時(shí)器中斷
異常
如果一個(gè) hart 在S模式下運(yùn)行并嘗試訪(fǎng)問(wèn)一個(gè)僅M模式的控制和狀態(tài)寄存器 (CSR),這會(huì)立即進(jìn)入異常處理程序并確定下一步行動(dòng)。mstatus寄存器中的異常代碼將保持值 0x2,表明發(fā)生了非法指令異常。根據(jù)系統(tǒng)的要求,監(jiān)督模式應(yīng)用程序可能會(huì)報(bào)告錯(cuò)誤和/或完全終止程序。
沒(méi)有特定的啟用位來(lái)允許發(fā)生異常,因?yàn)槟J(rèn)情況下它們總是啟用的。然而,在引導(dǎo)流程的早期,軟件應(yīng)該將 mtvec.BASE設(shè)置為一個(gè)定義的值,其中包含默認(rèn)異常處理程序的基地址。所有異常都會(huì)捕獲 tomtvec.BASE。軟件必須讀取 mcause CSR以確定異常的來(lái)源,并采取適當(dāng)?shù)拇胧?/p>
在中斷處理程序中發(fā)生的同步異常將立即導(dǎo)致程序執(zhí)行中止中斷處理程序并進(jìn)入異常處理程序。中斷處理程序中的異常通常是軟件錯(cuò)誤的結(jié)果,通常應(yīng)該避免,因?yàn)閙epc 和 mcause CSR 將被原始中斷上下文中捕獲的值覆蓋。
RISC-V 定義的同步異常具有優(yōu)先級(jí)順序,當(dāng)單個(gè)指令同時(shí)發(fā)生多個(gè)異常時(shí),可能需要考慮優(yōu)先級(jí)順序。下表描述了同步異常優(yōu)先級(jí)順序。
數(shù)據(jù)地址斷點(diǎn)(watchpoints)、指令地址斷點(diǎn)、環(huán)境斷點(diǎn)異常(EBREAK)都具有相同的異常碼(3),但優(yōu)先級(jí)不同,如上表所示。
指令地址未對(duì)齊異常 (0x0) 的優(yōu)先級(jí)低于其他指令地址異常,因?yàn)樗鼈兪悄繕?biāo)未對(duì)齊的控制流指令的結(jié)果,而不是取指的結(jié)果。
-
內(nèi)核
+關(guān)注
關(guān)注
3文章
1372瀏覽量
40290 -
RISC
+關(guān)注
關(guān)注
6文章
462瀏覽量
83734 -
架構(gòu)
+關(guān)注
關(guān)注
1文章
514瀏覽量
25472 -
sifive
+關(guān)注
關(guān)注
0文章
36瀏覽量
9460
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論