1.PLIC中斷處理
2.sifive中斷的編程模型
3.關(guān)于eclic
4.關(guān)于jalmnxti
1.PLIC中斷處理
在RISC V體系架構(gòu)中,對中斷有著一些定義,下面來分析一下這種定義的實(shí)現(xiàn)策略。
在riscv中一共定義了三種狀態(tài)中斷,對于hart層面,hart包含local中斷源和global中斷源。而local中斷只有Timer和Software中斷兩種,而global中斷則稱為external interrupts。只有g(shù)lobal中斷源可以被PLIC core響應(yīng),通常為I/O device。
一般來說,timer和software是通過CLINT(CORE LOCAL INTERRUPT),而外部中斷通過PLIC處理。
可以看一下蜂鳥處理器的處理流程,另外sifive的E31的中斷也有如下的處理。
2.sifive中斷的編程模型
中斷處理過程有如下的流程
首先mstatus的MIE域被拷貝到mstatus的MPIE,然后mstatus的MIE域被清除。此時全局中斷disable。
程序當(dāng)前的pc值被拷貝到mepc寄存器中,然后pc值會根據(jù)mtvec的值設(shè)置其值。如果向量中斷被使能,pc值會變成mtvec.BASE+4xexception處的代碼。
從mstatus.MPP中取出特權(quán)模式的狀態(tài)
接下來就是處理中斷具體的函數(shù)實(shí)現(xiàn)
將特權(quán)模式的狀態(tài)設(shè)置到mstatus.MPP
將mstatus.MPIE的數(shù)據(jù)拷貝到mstatus.MIE中
從mepc中取值放到pc中
最后執(zhí)行eret恢復(fù)到程序正常運(yùn)行的狀態(tài)。
對于CLINT來說,有Software Interrupt和Timer Interrupt,可以直接在寄存器中控制。
而PLIC實(shí)際上可以理解為arm的中斷控制器,存在其map地址。
由于PLIC的使用是針對外部中斷的,所以可以單獨(dú)設(shè)置每個中斷??梢栽O(shè)置如下的值:
中斷的優(yōu)先級priotity
中斷掛起位pending
中斷使能enables
中斷閾值priority Thresholds
由于PLIC的實(shí)現(xiàn)是獨(dú)立于hart的IP設(shè)計(jì),所以其設(shè)計(jì)和布局也不一定完全一致。
3.關(guān)于eclic
eclic的設(shè)計(jì)是芯來科技設(shè)計(jì)的一種中斷處理方式。
eclic目前也是眾多芯來科技core采用的中斷控制器,也包括gd32vf103系列的芯片。
3號中斷是內(nèi)核TIMER單元生成的軟件中斷。
7號中斷是內(nèi)核TIMER單元生成的計(jì)時器中斷。
而從19~4095中斷號都是外部中斷,其中斷的編號與中斷的優(yōu)先級其實(shí)沒有關(guān)系。
而對于ECLIC的寄存器布局,可見上圖。
cliccfg是中斷全局配置寄存器,可以結(jié)合clicintctl[i]配置
clicinfo也是全局寄存器中的數(shù)據(jù),對于使用上來說,是只讀的
mth中斷的閾值級別寄存器
clicintip[i]是中斷等待寄存器,也相當(dāng)于pending寄存器
clicintie[i]為中斷使能寄存器
clicintattr[i]為中斷的屬性,可以設(shè)置中斷的上升沿觸發(fā)或者下降沿觸發(fā),同時也可以設(shè)置中斷從處理是向量中斷還是非向量中斷。
clicintctl[i] 設(shè)置中斷優(yōu)先級級別和優(yōu)先級,需要配合cliccfg設(shè)置閾。
4.關(guān)于jalmnxti
這個也是eclic為了減少中斷延時,加速中斷咬尾的自定義指令。
該指令是配合eclic處理機(jī)制設(shè)計(jì)的,其指令功能比較多
開啟中斷使能,處理下一個中斷
返回下一個中斷入口地址
跳轉(zhuǎn)至中斷handler
中斷處理后返回
由于csrrw ra, CSR_JALMNXTI, ra一條指令可以達(dá)到JAL(Jump and Link)的效果,同時硬件上更新Link寄存器作為該指令的PC作為函數(shù)調(diào)用的返回值,因此從中斷服務(wù)程序返回后,又會重新回到csrrw ra, CSR_JALMNXTI, ra指令再次執(zhí)行,可以重新判斷是否有中斷pending,如果有則跳轉(zhuǎn)到中斷處理函數(shù),從而實(shí)現(xiàn)中斷的咬尾處理,如果沒有中斷等待,則jalmnxti實(shí)際上并不會做任何事情。
原文標(biāo)題:淺析riscv中的plic與eclic
文章出處:【微信公眾號:嵌入式IoT】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
責(zé)任編輯:haq
-
模型
+關(guān)注
關(guān)注
1文章
3329瀏覽量
49252
原文標(biāo)題:淺析riscv中的plic與eclic
文章出處:【微信號:Embeded_IoT,微信公眾號:嵌入式IoT】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
相關(guān)推薦
單片機(jī)中斷技術(shù)詳解
串口中斷是內(nèi)部中斷還是外部中斷,串口中斷是怎么觸發(fā)的
OMAP5912多媒體處理器中斷參考指南
![OMAP5912多媒體<b class='flag-5'>處理</b>器<b class='flag-5'>中斷</b>參考指南](https://file.elecfans.com/web1/M00/D9/4E/pIYBAF_1ac2Ac0EEAABDkS1IP1s689.png)
RISCV 操作常見問題集 - v4
單片機(jī)有哪些中斷類型
freertos中斷優(yōu)先級在哪設(shè)置
stm32怎樣觸發(fā)軟件中斷
RISCV的主流指令集有哪些?
HPM SDK 1.6.0 FreeRTOS LTS更改及適配指南
![HPM SDK 1.6.0 FreeRTOS LTS更改及適配指南](https://file.elecfans.com/web2/M00/37/D7/pYYBAGI9l9uAOwALAAAmFmqVYdg094.png)
RISCV soft JTAG調(diào)試_v1.2
如何停止或取消單片機(jī)的中斷處理?
![如何停止或取消單片機(jī)的<b class='flag-5'>中斷</b><b class='flag-5'>處理</b>?](https://file1.elecfans.com/web2/M00/C8/7E/wKgZomYcmcKARyutAAAexnm7cJQ928.png)
使用stm8l的外部中斷的pin7的中斷,進(jìn)行中斷處理時會立刻造成新的pin7中斷,會有什么影響嗎?
RISCV soft JTAG調(diào)試_v1.1
![<b class='flag-5'>RISCV</b> soft JTAG調(diào)試_v1.1](https://file1.elecfans.com/web2/M00/C0/C2/wKgZomXYVHCALAhiAAAa3iF9Eis888.png)
評論