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

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

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

U54內(nèi)核中斷進入和退出

麥辣雞腿堡 ? 來源:嵌入式Linux充電站 ? 作者:Vincent ? 2023-10-08 09:47 ? 次閱讀

陷阱trap

術(shù)語陷阱描述了軟件應(yīng)用程序中的控制轉(zhuǎn)移,其中陷阱處理通常在更特權(quán)的環(huán)境中執(zhí)行。例如,一個特定的 hart包含三種權(quán)限模式:機器、管理員和用戶。每種特權(quán)模式都有自己的軟件執(zhí)行環(huán)境,包括專用的堆棧區(qū)域。此外,每種特權(quán)模式都包含用于陷阱處理的單獨控制和狀態(tài)寄存器CSR)。在用戶模式下操作時,需要上下文切換來處理主管模式下的事件。軟件為上下文切換設(shè)置系統(tǒng),然后執(zhí)行 ECALL 指令,將控制同步切換到Environment call-from-User 模式異常處理程序。

復(fù)位后的默認模式是機器模式。軟件以最高權(quán)限級別開始執(zhí)行,這允許在任何權(quán)限級別更改之前初始化所有 CSR和系統(tǒng)資源。下面的步驟描述了將特權(quán)模式從機器模式更改為用戶模式所需的步驟,在特定設(shè)計上也包括管理員模式。

應(yīng)首先通過將 mstatus.MIE 寫入 0(默認復(fù)位值)來全局禁用中斷。

將機器模式異常處理程序的基地址寫入 mtvec CSR。這是任何引導(dǎo)流程中的必需步驟。

將 mstatus.MPP 寫入 0 以將之前的模式設(shè)置為 User,這允許我們返回到該模式。

設(shè)置物理內(nèi)存保護 (PMP) 區(qū)域以將所需區(qū)域授予用戶和主管模式,并可選擇從機器模式撤消權(quán)限。

用主管模式異常處理程序的基地址寫入 stvec CSR。

編寫 medeleg 寄存器,將異常委托給主管模式??紤] ECALL 和頁面錯誤異常。

編寫 mstatus.FS 以啟用浮點(如果支持)。

將機器模式用戶寄存器存儲到堆?;驊?yīng)用程序特定的幀指針。

用用戶態(tài)軟件的入口點編寫mepc

執(zhí)行mret指令進入用戶模式。

Note:只有一組用戶寄存器 (x1 - x31) 用于所有權(quán)限級別,因此應(yīng)用軟件負責(zé)在進入和退出不同級別時保存和恢復(fù)狀態(tài)。

本地中斷

軟件中斷(中斷 ID #3):通過寫入特定 hart 的內(nèi)存映射中斷掛起寄存器 msip 來觸發(fā)。

定時器中斷:當(dāng)寄存器 mtime 大于或等于寄存器 mtimecmp 并且兩個寄存器都是 CLINT 內(nèi)存映射的一部分時,會觸發(fā)定時器中斷(中斷 ID#7)。mtime 和 mtimecmp 寄存器通常僅在機器模式下可用,除非 PMP 授予用戶或管理員模式訪問它們所在的內(nèi)存映射區(qū)域的權(quán)限。

圖片

全局中斷通常首先路由到 PLIC,然后使用外部中斷進入 hart(中斷 ID #11)

中斷操作

在特權(quán)模式 m 內(nèi),如果相關(guān)的全局中斷使能 {ie} 清零,則在該特權(quán)模式下不會產(chǎn)生任何中斷,但更高特權(quán)模式下的待決啟用中斷將搶占當(dāng)前執(zhí)行。如果設(shè)置了{ie},則在相同特權(quán)模式下處于更高中斷級別的掛起啟用中斷將搶占當(dāng)前執(zhí)行并運行更高中斷級別的中斷處理程序。

當(dāng)發(fā)生中斷或同步異常時,會修改特權(quán)模式以反映新的特權(quán)模式。處理程序特權(quán)模式的全局中斷使能位被清除

中斷進入和退出

當(dāng)中斷發(fā)生時:

? mstatus.MIE 的值被復(fù)制到mcause.MPIE 中,然后mstatus.MIE 被清除,有效地禁用了中斷。

? 中斷前的特權(quán)模式在mstatus.MPP 中編碼。

? 當(dāng)前 pc 被復(fù)制到 mepc 寄存器中,然后將 pc 設(shè)置為 mtvec 指定的值

此時,控制權(quán)移交給中斷處理程序中的軟件,并禁用中斷。執(zhí)行 mret 指令時,會發(fā)生以下情況:

? 特權(quán)模式設(shè)置為在 mstatus.MPP 中編碼的值。

? 全局中斷使能 mstatus.MIE 設(shè)置為 mcause.MPIE 的值。

? pc 設(shè)置為mepc 的值。

此時,控制權(quán)交給軟件。

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

    關(guān)注

    31

    文章

    5359

    瀏覽量

    120805
  • 內(nèi)核
    +關(guān)注

    關(guān)注

    3

    文章

    1378

    瀏覽量

    40343
  • 控制
    +關(guān)注

    關(guān)注

    4

    文章

    1013

    瀏覽量

    122704
  • RISC
    +關(guān)注

    關(guān)注

    6

    文章

    463

    瀏覽量

    83794
  • sifive
    +關(guān)注

    關(guān)注

    0

    文章

    36

    瀏覽量

    9462
收藏 人收藏

    評論

    相關(guān)推薦

    Linux內(nèi)核中斷設(shè)計與實現(xiàn)

    裸機編程中使用中斷比較麻煩,需要配置寄存器、使能IRQ等等。而在Linux驅(qū)動編程中,內(nèi)核提供了完善的終端框架,只需要申請中斷,然后注冊中斷處理函數(shù)即可,使用非常方便。
    發(fā)表于 07-29 08:57 ?806次閱讀

    STM32U5退出stop2模式后進入HardFault_Hand的原因?

    主循環(huán)每兩秒修改stopFlag為1,進入stop2模式,外部中斷(lis2ds12的6d檢測)喚醒并修改stopFlag為0; 不連接stlink時,退出stop2后就會進入
    發(fā)表于 07-24 06:25

    串口中斷程序里發(fā)送數(shù)據(jù)如何進入中斷?

    發(fā)送中斷,是在執(zhí)行了MOV SBUF,A ,發(fā)送完畢后,TI置1,然后才能進入中斷,可是我看到書上一個例子,在中斷里發(fā)送多個字節(jié)數(shù)據(jù),發(fā)送一字節(jié)后退
    發(fā)表于 12-20 09:25

    ARM內(nèi)核中斷技術(shù)

    以 ARM7TDMI處理器為例,詳細介紹 ARM內(nèi)核的三種中斷:常規(guī)中斷、快中斷和軟件中斷;結(jié)合應(yīng)用,給出優(yōu)化的
    發(fā)表于 04-09 10:01 ?18次下載

    TMS320C54x系列DSP的中斷機制

      1 C54x中的中斷機制   中斷信號實質(zhì)上是由硬件或者是軟件驅(qū)動的信號,它能使DSP暫停正在執(zhí)行的程序并進入中斷服務(wù)程序(ISR)。
    發(fā)表于 09-01 17:07 ?5968次閱讀
    TMS320C<b class='flag-5'>54</b>x系列DSP的<b class='flag-5'>中斷</b>機制

    STM32進入退出睡眠模式

    后,會產(chǎn)生RTC報警中斷自動將系統(tǒng)喚醒。一旦退出停機模式,系統(tǒng)時鐘被配置成先前的狀態(tài)(在停機模式下,外部高速振蕩器HSE和PLL是不可用的)。經(jīng)過一段延時之后,系統(tǒng)將再次進入停機狀態(tài),并可按上述操作無限重復(fù)。
    發(fā)表于 04-03 11:43 ?1.2w次閱讀

    PLIC平臺級中斷控制器介紹

    的。 U54內(nèi)核的平臺級中斷控制器 (PLIC) 最多可支持 132 個具有 7 個優(yōu)先級的外部中斷源。 Memory Map U54
    的頭像 發(fā)表于 10-07 17:53 ?1233次閱讀
    PLIC平臺級<b class='flag-5'>中斷</b>控制器介紹

    LIC內(nèi)核中斷掛起位和中斷使能

    中斷掛起位 PLIC 內(nèi)核中斷源掛起位的當(dāng)前狀態(tài)可以從掛起數(shù)組中讀取,組織為 32 位的 5 個字。中斷 ID 的掛起位存儲在字的位中。 因此,U
    的頭像 發(fā)表于 10-07 17:57 ?841次閱讀
    LIC<b class='flag-5'>內(nèi)核</b><b class='flag-5'>中斷</b>掛起位和<b class='flag-5'>中斷</b>使能

    U54內(nèi)核PLIC中斷處理例子

    Interrupt Claim Process U54 內(nèi)核 hart 可以通過讀取 claim_complete 寄存器(表 115)執(zhí)行中斷請求,該寄存器返回最高優(yōu)先級掛起中斷
    的頭像 發(fā)表于 10-07 18:01 ?1017次閱讀
    <b class='flag-5'>U54</b><b class='flag-5'>內(nèi)核</b>PLIC<b class='flag-5'>中斷</b>處理例子

    U54內(nèi)核上CLINT的內(nèi)存映射

    ) {// handler code} 此屬性將保存和恢復(fù)處理程序中使用的寄存器,并在處理程序的末尾插入一條 mret 指令。 CLINT內(nèi)存映射 下圖是U54 內(nèi)核上 CLINT 的內(nèi)存映射: 注意
    的頭像 發(fā)表于 10-08 09:34 ?546次閱讀
    <b class='flag-5'>U54</b><b class='flag-5'>內(nèi)核</b>上CLINT的內(nèi)存映射

    RISC-V SiFive U54內(nèi)核中斷介紹

    中斷 U54內(nèi)核支持M模式和S模式中斷。默認情況下,所有中斷都在M模式下處理。對于支持S模式的 hart,可以有選擇地將
    的頭像 發(fā)表于 10-08 09:39 ?633次閱讀
    RISC-V SiFive <b class='flag-5'>U54</b><b class='flag-5'>內(nèi)核</b>的<b class='flag-5'>中斷</b>介紹

    U54內(nèi)核中斷控制和狀態(tài)寄存器

    向量的基地址,以及設(shè)置 U54內(nèi)核處理中斷的模式。對于 Direct 和 Vectored模式,中斷處理模式在 mtvec 寄存器的 MODE 字段中定義。mtvec 寄存器在表 86
    的頭像 發(fā)表于 10-08 09:54 ?1023次閱讀
    <b class='flag-5'>U54</b><b class='flag-5'>內(nèi)核</b><b class='flag-5'>中斷</b>控制和狀態(tài)寄存器

    U54內(nèi)核特權(quán)模式中斷介紹

    特權(quán)模式中斷 U54內(nèi)核支持有選擇地將中斷和異常定向到S模式。 該功能由中斷和異常委托CSR處理:mideleg和medeleg。S模式
    的頭像 發(fā)表于 10-08 09:59 ?994次閱讀
    <b class='flag-5'>U54</b><b class='flag-5'>內(nèi)核</b>特權(quán)模式<b class='flag-5'>中斷</b>介紹

    U54內(nèi)核不可屏蔽中斷信號

    不可屏蔽中斷 rnmi(可恢復(fù)不可屏蔽中斷中斷信號是 hart 的電平敏感輸入。不可屏蔽中斷比 hart上的任何其他中斷或異常具有更高的優(yōu)
    的頭像 發(fā)表于 10-08 10:05 ?925次閱讀
    <b class='flag-5'>U54</b><b class='flag-5'>內(nèi)核</b>不可屏蔽<b class='flag-5'>中斷</b>信號

    ARM中的異常中斷是如何實現(xiàn)進入中斷程序的?如何進入呢?

    ARM中的異常中斷是如何實現(xiàn)進入中斷程序的?如何進入呢? 在計算機系統(tǒng)中,異常和中斷是兩個常見的概念。 在ARM中,異常和
    的頭像 發(fā)表于 10-19 16:36 ?1074次閱讀