簡體   English   中英

RISC-V 中斷處理流程

[英]RISC-V Interrupt Handling Flow

我正在尋找 RISC-V 處理器如何處理中斷請求。

我查看了互聯網上的指令集手冊和信息。 重點是准確解釋標題設置的內容:指令集。 在我看來,如何處理中斷是處理器所謂的“程序員模型”的問題。 它沒有清楚地適合關於指令集的文檔,因為部分中斷處理沒有在指令中表示。 顯然,跳轉到 ISR並不是出現在程序代碼中任何地方的指令。 指令集手冊提供了mretmstatus的描述,但未能提供整體視圖。

對於一個假設的架構,中斷處理可以這樣描述:

If the IRQ line is high and the I-bit in the status register is set,
the processor executes the following steps atomically:

 - Push the PC of the next instruction onto the stack.
 - Push the status register onto the stack.
 - Clear the I-bit in the status register.
 - The PC is set to the location specified in the INTHNDLR register.

這是我正在尋找的關於 RISC-V 架構的信息。

從根本上說,處理器有一些額外的寄存器,稱為控制和狀態寄存器,也稱為 CSR,用於保存一些關鍵的 state,例如中斷的 pc、中斷的特權級別和中斷的原因等。此外, CSR保存中斷配置,其中一塊state是中斷向量表的地址,以及當前的特權級別,等等,比如它是否運行在32位模式或更大。

發生中斷時,處理器所做的所有事情都是

  • 將中斷的 pc 捕獲到 CSR 中——稱為mepc
  • 將當前權限級別捕獲到 CSR
  • 設置中斷原因 CSR — 稱為mcause
  • 如果異常是由於頁面錯誤引起的,則mtval保存錯誤地址
  • 關閉中斷mie
  • 在 CSR 指定的向量表中查找中斷處理程序 — 稱為mtvec
  • 並將控制權(設置電腦)轉移到 ISR

RISC V 中顯着復雜的事情是特權規范中可選事物的數量。 其中有 3 組 CSR(CSR 名稱與第一個字母不同)——與允許的 3 個特權級別 U、S、M 松散相關——其中大部分是可選的(實際上只需要 M)。 (也是可選的,例如是 64 位或更大(128),然后能夠以 32 位模式運行,多處理器,浮點等...)

CSR 銀行和特權級別在那里,因此完整的實現可以為管理程序/虛擬機、操作系統和應用程序提供良好的支持。 例如,對於一個簡單的應用程序,在嵌入式處理器上,實際上只需要一個 CSR 庫和一個特權級別。

如果您熟悉 MIPS 中斷處理,您會發現 RISC V 有點熟悉,但要復雜一些。 然而,從根本上說,這些處理器使用額外的寄存器(在 MIPS 上它們位於“協處理器 0”中)而不是堆棧來存儲中斷的 state。 MIPS 專用 2 個通用處理器寄存器(整數$k0$k1 )來處理中斷,而 RISC V 則沒有。 然而,與 MIPS 不同,RISC V 提供了一個額外的 CSR 供中斷處理程序使用 - 稱為mscratch ,可用於(如$k0 )臨時保存 ISR 到 function 的常規寄存器(中斷線程的)中的值,或者,因為它受到保護,它可以設置為指向當前運行線程的控制塊的指針,其中可以保存被中斷線程的 CPU 寄存器。

RARS 模擬器提供兩種模式,U 和 M,並具有 M 組 CSR,允許您將中斷處理程序編寫為迷你操作系統來服務應用程序。

如果您想了解更多信息,請從研究 MRET 指令開始,因為這在某種程度上會反轉/撤消中斷。 否則,請查看 RARS 模擬器,您可以在其中實際編寫中斷處理程序。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM