日日操夜夜添-日日操影院-日日草夜夜操-日日干干-精品一区二区三区波多野结衣-精品一区二区三区高清免费不卡

公告:魔扣目錄網為廣大站長提供免費收錄網站服務,提交前請做好本站友鏈:【 網站目錄:http://www.ylptlb.cn 】, 免友鏈快審服務(50元/站),

點擊這里在線咨詢客服
新站提交
  • 網站:51998
  • 待審:31
  • 小程序:12
  • 文章:1030137
  • 會員:747

mstatus.MIE 寫入 0(默認復位值)來全局禁用中斷。將機器模式異常處理程序的基地址寫入 mtvec CSR。這是任何引導流程中的必需步驟。將 mstatus.MPP 寫入 0 以將之前的模式設置為 User,這允許我們返回到該模式。設置物理內存保護 (PMP) 區域以將所需區域授予用戶和主管模式,并可選擇從機器模式撤消權限。用主管模式異常處理程序的基地址寫入 stvec CSR。編寫 medeleg 寄存器,將異常委托給主管模式。考慮 ECALL 和頁面錯誤異常。編寫 mstatus.FS 以啟用浮點(如果支持)。將機器模式用戶寄存器存儲到堆棧或應用程序特定的幀指針。用用戶態軟件的入口點編寫mepc

登錄后復制

mret指令進入用戶模式。Note:只有一組用戶寄存器 (x1 - x31) 用于所有權限級別,因此應用軟件負責在進入和退出不同級別時保存和恢復狀態。本地中斷 軟件中斷(中斷 ID #3):通過寫入特定 hart 的內存映射中斷掛起寄存器 msip 來觸發。定時器中斷:當寄存器 mtime 大于或等于寄存器 mtimecmp 并且兩個寄存器都是 CLINT 內存映射的一部分時,會觸發定時器中斷(中斷 ID #7)。mtime 和 mtimecmp 寄存器通常僅在機器模式下可用,除非 PMP 授予用戶或管理員模式訪問它們所在的內存映射區域的權限。全局中斷通常首先路由到 PLIC,然后使用外部中斷進入 hart(中斷 ID #11)中斷操作 在特權模式 m 內,如果相關的全局中斷使能 {ie} 清零,則在該特權模式下不會產生任何中斷,但更高特權模式下的待決啟用中斷將搶占當前執行。如果設置了 {ie},則在相同特權模式下處于更高中斷級別的掛起啟用中斷將搶占當前執行并運行更高中斷級別的中斷處理程序。當發生中斷或同步異常時,會修改特權模式以反映新的特權模式。處理程序特權模式的全局中斷使能位被清除中斷進入和退出當中斷發生時:? mstatus.MIE 的值被復制到mcause.MPIE 中,然后mstatus.MIE 被清除,有效地禁用了中斷。? 中斷前的特權模式在mstatus.MPP 中編碼。? 當前 pc 被復制到 mepc 寄存器中,然后將 pc 設置為 mtvec 指定的值此時,控制權移交給中斷處理程序中的軟件,并禁用中斷。執行 mret 指令時,會發生以下情況:? 特權模式設置為在 mstatus.MPP 中編碼的值。? 全局中斷使能 mstatus.MIE 設置為 mcause.MPIE 的值。? pc 設置為mepc 的值。此時,控制權交給軟件。中斷控制和狀態寄存器 Machine Status Register (mstatus)mstatus 寄存器跟蹤并控制 hart 的當前操作狀態,包括是否啟用中斷。通過設置 mstatus 中的 MIE 位來啟用中斷。在寫入 mstatus.MIE=1 之前,建議先在 mie 中開啟中斷。Machine Trap Vector (mtvec)mtvec 寄存器有兩個主要功能:定義陷阱向量的基地址,以及設置 U54內核處理中斷的模式。對于 Direct 和 Vectored 模式,中斷處理模式在 mtvec 寄存器的 MODE 字段中定義。mtvec 寄存器在表 86 中描述,mtvec.MODE 字段在表 87 中描述。Mode Direct在直接模式下操作時,所有中斷和異常都會捕獲到 mtvec.BASE 地址。在陷阱處理程序內部,軟件必須讀取 mcause 寄存器以確定觸發陷阱的原因。在直接模式下操作時,BASE 必須是 4 字節對齊的。Mode Vectored在向量模式下運行時,中斷將 pc 設置為 mtvec.BASE + 4 × 異常代碼(mcause.EXCCODE)。例如,如果發生機器定時器中斷,則將 pc 設置為 mtvec.BASE + 0x1C。通常,陷阱向量表填充有跳轉指令,以將控制轉移到特定于中斷的陷阱處理程序。在向量中斷模式下,BASE 必須是 256 字節對齊的。所有機器外部中斷(全局中斷)都映射到異常代碼 11。因此,當啟用中斷向量時,pc 設置為任何全局中斷的地址 mtvec.BASE + 0x2C。Machine Interrupt Enable (mie)通過設置 mie 寄存器中的相應位來啟用各個中斷。Machine Interrupt Pending (mip)機器中斷掛起 (mip) 寄存器指示當前哪些中斷處于掛起狀態。特權模式中斷 U54內核支持有選擇地將中斷和異常定向到S模式。該功能由中斷和異常委托CSR處理:mideleg和medeleg。S模式中斷和異常可以通過stvec、sip、sie 和 scause 管理。在M模式下,軟件還可以直接寫入SIP寄存器,從而有效地向S模式發送中斷。這對于定時器和軟件中斷特別有用,因為可能需要在M模式和S模式下處理這些中斷。Delegation Registers (mideleg and medeleg)默認情況下,所有的trap都在M模式下處理。M模式下軟件可以通過CSR 有選擇地將中斷和異常委托給S模式。具體的映射如表 92 和表 93 。注意,本地中斷可以委托給M模式。Supervisor Status Register (sstatus)與M模式類似,S模式有一個寄存器,專門用于跟蹤 hart 的當前狀態,稱為 sstatus。sstatus 實際上是 mstatus 的受限視圖,因為對 sstatus 所做的更改反映在 mstatus 中。通過在 sstatus 中設置 SIE 位并在 sie 寄存器中啟用所需的單個中斷來啟用中斷。Supervisor Interrupt Enable Register (sie)通過在 sie 寄存器中設置適當的位來啟用管理員中斷。Supervisor Interrupt Pending (sip)S模式中斷掛起 (sip) 寄存器指示當前哪些中斷掛起。Supervisor Cause Register (scause)當S模式下捕獲陷阱時,將導致陷阱的事件的代碼寫入 cause。當導致陷阱的事件是中斷時,最高有效位
scause 設置為 1,最低有效位表示中斷號,使用與 sip 中的位置相同的編碼。例如,S模式定時器中斷導致 cause 被設置為 0x8000_0000_0000_0005。scause 也用于指示同步異常的原因,在這種情況下,scause 的最高有效位設置為 0。有關同步異常代碼的列表,請參見表 98。Supervisor Trap Vector (stvec)默認情況下,所有中斷都會捕獲到 stvec 寄存器中定義的單個地址。由中斷處理程序讀取原因并做出相應的反應。RISC?V 和 U54 內核還支持選擇性地啟用中斷向量的能力。當啟用向量時,在 sie 中定義的每個中斷都會陷入到它自己的特定中斷處理程序中。當 stvec 寄存器的 MODE 字段設置為 1 時,向量中斷被啟用。如果向量中斷被禁用 (stvec.MODE=0),所有中斷都會陷入 stvec.BASE 地址。如果啟用矢量中斷 (stvec.MODE=1),中斷將 pc 設置為 stvec.BASE + 4 × 異常代碼 (scause.EXCCODE)。例如,如果發生管理定時器中斷,則 pc 設置為 stvec.BASE + 0x14。通常,陷阱向量表中填充有跳轉指令,以將控制轉移到特定于中斷的陷阱處理程序。在向量中斷模式下,BASE 必須是 128 字節對齊的。所有主管外部中斷(全局中斷)都映射到異常代碼 9。因此,當啟用中斷向量時,pc 被設置為任何全局中斷的地址 stvec.BASE + 0x24。Delegated Interrupt Handling接受委派陷阱后,會發生以下情況:sstatus.SIE 的值被復制到 sstatus.SPIE,然后 sstatus.SIE 被清除,有效地禁用中斷。當前pc被復制到sepc寄存器中,然后pc被設置為stvec的值。在啟用矢量中斷的情況下,pc 設置為 stvec.BASE + 4 × 異常代碼 (scause.EXCCODE)。中斷前的特權模式編碼在 sstatus.SPP 中此時,控制權移交給中斷處理程序中的軟件,中斷被禁用。可以通過顯式設置 sstatus.SIE 或執行 SRET 指令退出處理程序來重新啟用中斷。執行 SRET 指令時,會發生以下情況:特權模式設置為 sstatus.SPP 中編碼的值status.SPIE 的值被復制到 status.SIE

登錄后復制

pc 設置為 sepc 的值

此時,控制權交給了軟件

中斷延遲

U54內核的中斷延遲為四個 external_source_for_core_N_clock 周期,計算方式是從向 hart 發送中斷信號到處理程序的第一個指令獲取所需的周期數。

通過 PLIC 路由的全局中斷會導致三個時鐘周期的額外延遲,其中 PLIC 由時鐘計時。這意味著全局中斷的總延遲(以周期為單位)為:4 + 3 × (external_source_for_core_N_clock Hz ÷ clock Hz)。這是最佳情況下的循環計數,并假定處理程序已緩存。它沒有考慮來自外圍源的額外延遲

不可屏蔽中斷

rnmi(可恢復不可屏蔽中斷)中斷信號是 hart 的電平敏感輸入。不可屏蔽中斷比 hart 上的任何其他中斷或異常具有更高的優先級,并且不能被軟件禁用。具體來說,它們不會通過清除 mstatus.mie 寄存器來禁用。

Handler Addresses

NMI 有一個關聯的異常陷阱處理程序地址。該地址由外部輸入信號設置。

RNMI CSRs

這些 M 模式 CSR 啟用可恢復非屏蔽中斷 (RNMI)。

    mnscratch CSR 擁有一個 64 位讀寫寄存器,它使 NMI 陷阱處理程序能夠保存和恢復被中斷的上下文。
    mnepc CSR 是一個 64 位讀寫寄存器,在進入 NMI 陷阱處理程序時,它保存接受中斷的指令的 PC。mnepc 的最低位硬連線為零。
    mncause CSR 包含 NMI 的原因,第 63 位設置為 1,并且 NMI 原因編碼在最低有效位中,如果不支持 NMI 原因,則為零。mncause 的低位,定義為 exception_code,如下:
      mnstatus CSR 包含一個兩位字段,在進入陷阱處理程序時,它包含以與 mstatus.mpp 相同的方式編碼的中斷上下文的特權模式

      MNRET Instruction

      此僅 M 模式指令使用 mnepc 和 mnstatus 中的值分別返回中斷上下文的程序計數器和特權模式。該指令還設置內部 rnmie 狀態位。

      編碼與 MRET 相同,除了第 30 位設置(即 funct7=0111000)。例如:

      .word 0x70200073 // opcode for MNRET (return from RNMI)

      登錄后復制

      RNMI Operation

      當檢測到RNMI中斷時,將中斷的PC寫入mnepc CSR,RNMI的類型寫入mncause CSR,中斷上下文的特權模式寫入mnstatus CSR。內部微體系結構狀態位 rnmie 被清除以指示處理器處于 RNMI 處理程序中并且不能接受新的 RNMI 中斷。清除時,內部 rnmie 位還會禁用所有其他中斷

      這些中斷被稱為不可屏蔽的,因為軟件無法屏蔽中斷。但是,為了正確操作,必須推遲同一中斷的其他實例,直到處理程序完成,因此內部狀態位

      RNMI 處理程序可以使用 MNRET 指令(在第 7.11.3 節中描述)恢復原始執行,該指令從 mnepc 恢復 PC,從 mnstatus 恢復特權模式,并設置內部 rnmie 狀態位,重新啟用其他中斷。

      如果hart在rnmie位清零時遇到異常,則將異常狀態寫入mepc和mcause,mstatus.mpp設置為M-mode,hart跳轉到RNMI異常處理程序地址。

      RNMI 處理程序中的陷阱只有在處理程序正在服務發生在機器模式之外的中斷時發生時才能恢復。

      以上就是RISC-V SiFive U54內核——中斷和異常詳解的詳細內容,更多請關注www.92cms.cn其它相關文章!

分享到:
標簽:RISC 中斷 內核 異常 詳解
用戶無頭像

網友整理

注冊時間:

網站:5 個   小程序:0 個  文章:12 篇

  • 51998

    網站

  • 12

    小程序

  • 1030137

    文章

  • 747

    會員

趕快注冊賬號,推廣您的網站吧!
最新入駐小程序

數獨大挑戰2018-06-03

數獨一種數學游戲,玩家需要根據9

答題星2018-06-03

您可以通過答題星輕松地創建試卷

全階人生考試2018-06-03

各種考試題,題庫,初中,高中,大學四六

運動步數有氧達人2018-06-03

記錄運動步數,積累氧氣值。還可偷

每日養生app2018-06-03

每日養生,天天健康

體育訓練成績評定2018-06-03

通用課目體育訓練成績評定