Interrupt Claim Process
U54 內(nèi)核 hart 可以通過讀取 claim_complete 寄存器(表 115)執(zhí)行中斷請求,該寄存器返回最高優(yōu)先級掛起中斷的 ID,如果沒有掛起中斷則返回零。成功的聲明還會自動清除中斷源上相應的掛起位。
U54 內(nèi)核 hart 可以隨時執(zhí)行聲明,即使其 mip寄存器中的 MEIP 位未設置。
聲明操作不受優(yōu)先級閾值寄存器設置的影響。
中斷完成
U54 內(nèi)核 hart 通過將其從聲明中收到的中斷 ID 寫入 claim_complete 寄存器(表 115)來表示它已完成執(zhí)行中斷處理程序。PLIC 不檢查完成 ID 是否與該目標的最后一個聲明 ID 相同。如果完成 ID 與當前為目標啟用的中斷源不匹配,則完成將被靜默忽略。
PLIC 無法將新中斷轉(zhuǎn)發(fā)給已聲明中斷但尚未完成中斷處理程序的完整步驟的 hart。因此,PLIC 不支持搶占單個 hart 的全局中斷 。
通過 PLIC 路由的全局中斷的中斷 ID 獨立于本地中斷的中斷 ID。在退出處理程序之前,一旦初始聲明/完成過程完成,PLIC 處理程序可能會檢查其他未決的全局中斷。此方法可以為全局中斷保存額外的 PLIC 保存/恢復上下文。
PLIC中斷處理例子
由于 PLIC 通過外部中斷 #11 與 CPU 接口,因此外部處理程序必須包含一個額外的聲明/完成步驟,用于與 PLIC 邏輯握手。
void external_handler() {
//get the highest priority pending PLIC interrupt
uint32_t int_num = plic.claim_complete;
//branch to handler
plic_handler[int_num]();
//complete interrupt by writing interrupt number back to PLIC
plic.claim_complete = int_num;
// Add additional checks for PLIC pending here, if desired
}
如果 CPU 讀取 claim_complete 并返回 0,則中斷不需要處理,因此不需要回寫 claim/complete。
上面顯示的 plic_handler 例程演示了一種實現(xiàn)軟件表的方法,其中駐留在表中的函數(shù)的偏移量由 PLIC 中斷 ID 確定。PLIC 中斷 ID 對于 PLIC 是唯一的,因為它完全獨立于本地中斷的中斷 ID。
-
控制器
+關(guān)注
關(guān)注
112文章
16468瀏覽量
179634 -
寄存器
+關(guān)注
關(guān)注
31文章
5372瀏覽量
121288 -
內(nèi)核
+關(guān)注
關(guān)注
3文章
1384瀏覽量
40442 -
RISC
+關(guān)注
關(guān)注
6文章
468瀏覽量
83907 -
sifive
+關(guān)注
關(guān)注
0文章
36瀏覽量
9476
發(fā)布評論請先 登錄
相關(guān)推薦
Linux內(nèi)核中斷設計與實現(xiàn)
PLIC在寫入complete寄存器后立馬會觸發(fā)下一次中斷的原因?如何解決?
PLIC管理的中斷的優(yōu)先級和RISC-V本身的機器定時器以及軟中斷的中斷優(yōu)先級問題
ARM內(nèi)核的中斷技術(shù)
linux內(nèi)核中斷機制
riscv中的plic中斷處理與eclic詳解
![riscv中的<b class='flag-5'>plic</b><b class='flag-5'>中斷</b><b class='flag-5'>處理</b>與eclic詳解](https://file.elecfans.com/web1/M00/EB/20/pIYBAGB31wiAdeAAAAAlyol7oYw683.png)
LIC內(nèi)核中斷掛起位和中斷使能
![LIC<b class='flag-5'>內(nèi)核</b><b class='flag-5'>中斷</b>掛起位和<b class='flag-5'>中斷</b>使能](https://file1.elecfans.com/web2/M00/A6/F3/wKgaomUhKrCAHjEOAAH044Wn3PY054.jpg)
U54內(nèi)核上CLINT的內(nèi)存映射
![<b class='flag-5'>U54</b><b class='flag-5'>內(nèi)核</b>上CLINT的內(nèi)存映射](https://file1.elecfans.com/web2/M00/A7/0C/wKgaomUiBlGAPs8iAAFKUUl77oA415.jpg)
U54內(nèi)核中斷進入和退出
![<b class='flag-5'>U54</b><b class='flag-5'>內(nèi)核</b><b class='flag-5'>中斷</b>進入和退出](https://file1.elecfans.com/web2/M00/A8/D1/wKgZomUiCGOAE81wAAB6DpqS_yQ510.jpg)
評論