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

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

3天內不再提示

U54內核中斷進入和退出

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

陷阱trap

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

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

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

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

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

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

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

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

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

將機器模式用戶寄存器存儲到堆?;驊贸绦蛱囟ǖ膸羔?。

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

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

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

本地中斷

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

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

圖片

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

中斷操作

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

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

中斷進入和退出

當中斷發(fā)生時:

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

? 中斷前的特權模式在mstatus.MPP 中編碼。

? 當前 pc 被復制到 mepc 寄存器中,然后將 pc 設置為 mtvec 指定的值

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

? 特權模式設置為在 mstatus.MPP 中編碼的值。

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

? pc 設置為mepc 的值。

此時,控制權交給軟件。

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

    關注

    31

    文章

    5294

    瀏覽量

    119814
  • 內核
    +關注

    關注

    3

    文章

    1360

    瀏覽量

    40185
  • 控制
    +關注

    關注

    4

    文章

    1010

    瀏覽量

    122588
  • RISC
    +關注

    關注

    6

    文章

    461

    瀏覽量

    83637
  • sifive
    +關注

    關注

    0

    文章

    35

    瀏覽量

    9450
收藏 人收藏

    評論

    相關推薦

    Linux內核中斷設計與實現

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

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

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

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

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

    ARM內核中斷技術

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

    TMS320C54x系列DSP的中斷機制

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

    STM32進入退出睡眠模式

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

    PLIC平臺級中斷控制器介紹

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

    LIC內核中斷掛起位和中斷使能

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

    U54內核PLIC中斷處理例子

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

    U54內核上CLINT的內存映射

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

    RISC-V SiFive U54內核中斷介紹

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

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

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

    U54內核特權模式中斷介紹

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

    U54內核不可屏蔽中斷信號

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

    ARM中的異常中斷是如何實現進入中斷程序的?如何進入呢?

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