0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

riscv中的plic中斷處理與eclic詳解

嵌入式IoT ? 來(lái)源:嵌入式IoT ? 作者:嵌入式IoT ? 2021-04-15 13:50 ? 次閱讀

淺析riscv中的plic與eclic

1.PLIC中斷處理

2.sifive中斷的編程模型

3.關(guān)于eclic

4.關(guān)于jalmnxti

1.PLIC中斷處理

在RISC V體系架構(gòu)中,對(duì)中斷有著一些定義,下面來(lái)分析一下這種定義的實(shí)現(xiàn)策略。

2c6be102-9d0e-11eb-8b86-12bb97331649.png

在riscv中一共定義了三種狀態(tài)中斷,對(duì)于hart層面,hart包含local中斷源和global中斷源。而local中斷只有Timer和Software中斷兩種,而global中斷則稱為external interrupts。只有g(shù)lobal中斷源可以被PLIC core響應(yīng),通常為I/O device。

一般來(lái)說(shuō),timer和software是通過CLINT(CORE LOCAL INTERRUPT),而外部中斷通過PLIC處理。

2d5a77b8-9d0e-11eb-8b86-12bb97331649.png

可以看一下蜂鳥處理器的處理流程,另外sifive的E31的中斷也有如下的處理。

2d6d55cc-9d0e-11eb-8b86-12bb97331649.png

2.sifive中斷的編程模型

中斷處理過程有如下的流程

首先mstatus的MIE域被拷貝到mstatus的MPIE,然后mstatus的MIE域被清除。此時(shí)全局中斷disable。

程序當(dāng)前的pc值被拷貝到mepc寄存器中,然后pc值會(huì)根據(jù)mtvec的值設(shè)置其值。如果向量中斷被使能,pc值會(huì)變成mtvec.BASE+4xexception處的代碼。

從mstatus.MPP中取出特權(quán)模式的狀態(tài)

接下來(lá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)。

對(duì)于CLINT來(lái)說(shuō),有Software Interrupt和Timer Interrupt,可以直接在寄存器中控制。

而PLIC實(shí)際上可以理解為arm的中斷控制器,存在其map地址。

2d8017ca-9d0e-11eb-8b86-12bb97331649.png

由于PLIC的使用是針對(duì)外部中斷的,所以可以單獨(dú)設(shè)置每個(gè)中斷??梢栽O(shè)置如下的值:

中斷的優(yōu)先級(jí)priotity

中斷掛起位pending

中斷使能enables

中斷閾值priority Thresholds

由于PLIC的實(shí)現(xiàn)是獨(dú)立于hart的IP設(shè)計(jì),所以其設(shè)計(jì)和布局也不一定完全一致。

3.關(guān)于eclic

eclic的設(shè)計(jì)是芯來(lái)科技設(shè)計(jì)的一種中斷處理方式。

2dbc5852-9d0e-11eb-8b86-12bb97331649.png

eclic目前也是眾多芯來(lái)科技core采用的中斷控制器,也包括gd32vf103系列的芯片。

3號(hào)中斷是內(nèi)核TIMER單元生成的軟件中斷。

7號(hào)中斷是內(nèi)核TIMER單元生成的計(jì)時(shí)器中斷。

而從19~4095中斷號(hào)都是外部中斷,其中斷的編號(hào)與中斷的優(yōu)先級(jí)其實(shí)沒有關(guān)系。

2dcb96f0-9d0e-11eb-8b86-12bb97331649.png

而對(duì)于ECLIC的寄存器布局,可見上圖。

cliccfg是中斷全局配置寄存器,可以結(jié)合clicintctl[i]配置

clicinfo也是全局寄存器中的數(shù)據(jù),對(duì)于使用上來(lái)說(shuō),是只讀的

mth中斷的閾值級(jí)別寄存器

clicintip[i]是中斷等待寄存器,也相當(dāng)于pending寄存器

clicintie[i]為中斷使能寄存器

clicintattr[i]為中斷的屬性,可以設(shè)置中斷的上升沿觸發(fā)或者下降沿觸發(fā),同時(shí)也可以設(shè)置中斷從處理是向量中斷還是非向量中斷。

clicintctl[i] 設(shè)置中斷優(yōu)先級(jí)級(jí)別和優(yōu)先級(jí),需要配合cliccfg設(shè)置閾。

4.關(guān)于jalmnxti

這個(gè)也是eclic為了減少中斷延時(shí),加速中斷咬尾的自定義指令。

該指令是配合eclic處理機(jī)制設(shè)計(jì)的,其指令功能比較多

開啟中斷使能,處理下一個(gè)中斷

返回下一個(gè)中斷入口地址

跳轉(zhuǎn)至中斷handler

中斷處理后返回

由于csrrw ra, CSR_JALMNXTI, ra一條指令可以達(dá)到JAL(Jump and Link)的效果,同時(shí)硬件上更新Link寄存器作為該指令的PC作為函數(shù)調(diào)用的返回值,因此從中斷服務(wù)程序返回后,又會(huì)重新回到csrrw ra, CSR_JALMNXTI, ra指令再次執(zhí)行,可以重新判斷是否有中斷pending,如果有則跳轉(zhuǎn)到中斷處理函數(shù),從而實(shí)現(xiàn)中斷的咬尾處理,如果沒有中斷等待,則jalmnxti實(shí)際上并不會(huì)做任何事情。

原文標(biāo)題:淺析riscv中的plic與eclic

文章出處:【微信公眾號(hào):嵌入式IoT】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

責(zé)任編輯:haq

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 模型
    +關(guān)注

    關(guān)注

    1

    文章

    3112

    瀏覽量

    48658

原文標(biāo)題:淺析riscv中的plic與eclic

文章出處:【微信號(hào):Embeded_IoT,微信公眾號(hào):嵌入式IoT】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏

    評(píng)論

    相關(guān)推薦

    RISCV的主流指令集有哪些?

    如題,就像X86指令集有MMX,SSE,SSE2等,就像ARM指令集有ARM和Thumb等,但是總是感覺RISCV特別亂,可能是廠商比較多的緣故吧,我知道的有WCH的青稞RISC-V,玄鐵
    發(fā)表于 08-29 13:49

    HPM SDK 1.6.0 FreeRTOS LTS更改及適配指南

    1、HPM_SDKFreeRTOSLTS特性總覽HPMSDKV1.6.0FreeRTOS升級(jí)前后特性支持對(duì)比:特性V10.4.4LTS202210.01中斷搶占√√RISCV浮點(diǎn)擴(kuò)展支持
    的頭像 發(fā)表于 07-06 08:17 ?525次閱讀
    HPM SDK 1.6.0 FreeRTOS LTS更改及適配指南

    RISC-V的中斷處理 中斷操作三個(gè)步驟

    中斷操作三個(gè)步驟: 1、中斷初始化 2、trap處理 3、用戶中斷處理
    的頭像 發(fā)表于 05-20 16:38 ?1011次閱讀

    國(guó)產(chǎn)riscv芯片大匯總?

    請(qǐng)問有統(tǒng)計(jì)國(guó)產(chǎn)的riscv芯片的嗎?能匯總一下嗎?
    發(fā)表于 04-27 11:53

    RISCV soft JTAG調(diào)試_v1.2

    JTAG。這里我們以TI60F225 DEMO來(lái)演示。 在使用softJTAG的過程,首先要把RISCV的IP的調(diào)試選項(xiàng)選擇為soft,也就是Eanble Soft Debug Tap. 第二
    的頭像 發(fā)表于 04-23 08:38 ?950次閱讀

    如何停止或取消單片機(jī)的中斷處理?

    處理的NVIC能夠處理多個(gè)可屏蔽中斷通道和可編程優(yōu)先級(jí),中斷輸入請(qǐng)求可以是電平觸發(fā),也可以是最小的一個(gè)時(shí)鐘周期的脈沖信號(hào)。
    發(fā)表于 04-15 11:05 ?1173次閱讀
    如何停止或取消單片機(jī)的<b class='flag-5'>中斷</b><b class='flag-5'>處理</b>?

    RISCV soft JTAG調(diào)試_v1.1

    JTAG。這里我們以TI60F225 DEMO來(lái)演示。 在使用softJTAG的過程,首先要把RISCV的IP的調(diào)試選項(xiàng)選擇為soft,也就是Eanble Soft Debug Tap. 第二
    的頭像 發(fā)表于 02-23 16:16 ?578次閱讀
    <b class='flag-5'>RISCV</b> soft JTAG調(diào)試_v1.1

    s3c2410中斷控制模塊的中斷源狀態(tài)寄存器是?

    S3C2410是一款由三星電子公司設(shè)計(jì)的具有多種功能的嵌入式處理器。其中的中斷控制模塊用于管理系統(tǒng)的中斷請(qǐng)求和中斷服務(wù)程序。在S3C2410
    的頭像 發(fā)表于 01-05 17:28 ?629次閱讀

    arm中斷是怎么實(shí)現(xiàn)的

    ARM中斷的實(shí)現(xiàn)是通過中斷控制器和異常模式實(shí)現(xiàn)的。ARM處理器通過中斷控制器來(lái)接收和處理外部的中斷
    的頭像 發(fā)表于 01-05 15:18 ?790次閱讀

    stm32中斷怎么處理

    STM32是一款非常強(qiáng)大的微控制器系列,具有豐富的外設(shè)和功能。中斷是STM32非常重要的部分,能夠幫助我們提高系統(tǒng)的響應(yīng)速度和效率。本文將詳細(xì)介紹STM32中斷處理方法。 一、
    的頭像 發(fā)表于 01-02 17:35 ?2406次閱讀

    深入解析中斷處理在MCU開發(fā)的關(guān)鍵步驟

    中斷向量表都是鏈接到代碼的最前面,比如一般 ARM 處理器都是從地址 0X00000000 開始執(zhí)行指令的,那么中斷向量表就是從 0X00000000 開始存放的。代碼第 1 行
    發(fā)表于 12-15 16:34 ?1425次閱讀
    深入解析<b class='flag-5'>中斷</b><b class='flag-5'>處理</b>在MCU開發(fā)<b class='flag-5'>中</b>的關(guān)鍵步驟

    MCU中斷處理過程,MCU如何處理中斷?

    當(dāng)MCU接收到一個(gè)中斷信號(hào)時(shí),它會(huì)暫停當(dāng)前正在執(zhí)行的任務(wù),保存現(xiàn)場(chǎng),然后跳轉(zhuǎn)到預(yù)設(shè)的中斷處理程序(Interrupt Service Routine, ISR)去處理這個(gè)
    的頭像 發(fā)表于 12-13 11:48 ?1475次閱讀

    單片機(jī)中斷系統(tǒng)詳解

    單片機(jī)中斷是指在單片機(jī)執(zhí)行程序的過程,當(dāng)外部設(shè)備或內(nèi)部條件發(fā)生某個(gè)特定事件時(shí),能夠暫停當(dāng)前正在執(zhí)行的程序,轉(zhuǎn)而去執(zhí)行一個(gè)特定的服務(wù)程序(稱為中斷服務(wù)程序或中斷
    的頭像 發(fā)表于 12-05 09:09 ?2766次閱讀

    中斷流程分析與示例

    CPU在處理某一事件A時(shí),發(fā)生了另一事件B的請(qǐng)求(中斷請(qǐng)求);CPU暫時(shí)中斷當(dāng)前的工作,轉(zhuǎn)去處理事件B(中斷響應(yīng)和
    的頭像 發(fā)表于 11-25 12:30 ?1924次閱讀
    <b class='flag-5'>中斷</b>流程分析與示例

    LInux 操作系統(tǒng)中斷介紹

    進(jìn)程來(lái)持有CPU進(jìn)行需要的操作! 有了中斷之后,提升了操作系統(tǒng)的性能!可以異步并行處理很多任務(wù)! 軟中斷(80中斷) 由CPU產(chǎn)生的;CPU檢查到程序代碼段發(fā)生異常會(huì)切換到內(nèi)核態(tài); 硬
    的頭像 發(fā)表于 11-13 11:36 ?843次閱讀
    LInux 操作系統(tǒng)<b class='flag-5'>中斷</b>介紹