CLINT中斷屬性
為了幫助提高保存和恢復上下文的效率,可以將中斷屬性應用于用于中斷處理的函數。
void attribute ((interrupt))software_handler (void) {// handler
code}
此屬性將保存和恢復處理程序中使用的寄存器,并在處理程序的末尾插入一條 mret 指令。
CLINT內存映射
下圖是U54 內核上 CLINT 的內存映射:
注意,在 CLINT 內存映射中沒有用于特定中斷的啟用位,因為這些中斷的啟用位于每個中斷的 mie CSR 和 mstatus.mie CSR
位中,它全局啟用所有機器中斷。
相關寄存器
MSIP Registers
機器模式軟件中斷是通過寫入內存映射控制寄存器 msip 來生成的。
msip 寄存器是一個 32 位寬的 WARL 寄存器,其中高 31 位綁定為 0。最低有效位反映在 mip CSR 的 MSIP 位中。msip
寄存器中的其他位被硬連線為零。復位時,每個 msip 寄存器都清零。
軟件中斷對于多 hart 系統中的處理器間通信最有用,因為 harts 可能會寫入彼此的 msip 位以影響處理器間中斷。
軟件中斷其實更多的用于多核之間,也就是所謂的核間通信。
Timer Registers
與timer有關的寄存器主要是兩個:mtime和mtimecmp
mtime 是一個 64 位讀寫寄存器,包含從 rtc_toggle 信號計數的周期數。
只要 mtime 大于或等于 mtimecmp 寄存器中的值,定時器中斷就會掛起。定時器中斷反映在 mip 寄存器的 mtip 位中。
復位時,mtime 清零。mtimecmp 不會重置。
特權模式委托
默認情況下,所有中斷都會陷入機器模式,包括定時器和軟件中斷。
為了讓定時器和軟件中斷直接進入管理員模式,定時器中斷和軟件中斷必須首先委托給管理員模式。
-
寄存器
+關注
關注
31文章
5336瀏覽量
120232 -
內核
+關注
關注
3文章
1372瀏覽量
40280 -
RISC
+關注
關注
6文章
462瀏覽量
83710 -
sifive
+關注
關注
0文章
36瀏覽量
9458
發布評論請先 登錄
相關推薦
評論