簡體   English   中英

在RISC-V CLINT向量模式下,同步異常處理程序是否與ID=0中斷處理程序(用戶軟件中斷)相同?

[英]In RISC-V CLINT vector mode, does the synchronous exception handler is same with the ID=0 interrupt handler(User software interrupt)?

在 RISC-V Manual Volume II 中,它說:

當 MODE=Vectored 時,所有進入機器模式的同步異常導致 pc 被設置為 BASE 字段中的地址,而中斷導致 pc 被設置為 BASE 字段中的地址加上中斷原因編號的四倍。

同步異常處理程序是否與ID=0 中斷處理程序(用戶軟件中斷)相同? 我嘗試在 qemu-system-riscv64 virt 上解決我的問題,我的步驟如下,我嘗試測試異常、用戶軟件中斷和機器定時器中斷:

# boot:
la t0, __vector_table
xor t0, t0, 1 # vector mode
csrw mtvec, t0

# vector table
__vector_table:
IRQ_0:
        j trap_handler_entry 
IRQ_1:
        j trap_handler_entry
             ...
IRQ_7:
        j timer_interrupt_vector_handler

# handler at vector table index 0
trap_handler_entry:
    SAVE_REGISTER
    j trap_handler # trap_handler is the handler 
                   # I used to handle all trap in direct mode
    RESTORE_REGISTER
    mret
# timer handler
void __atrributr__ ((interrupt)) timer_interrupt_vector_handler { 
    add new value in mtimecmp
}

此時我測試ecall和定時器中斷,當定時器中斷和ecall發生時,它肯定會轉到向量表中的函數,ecall -> INDEX=0, timer -> INDEX=7 然后我嘗試觸發用戶軟件中斷,喜歡:

# Test function
while(1) {
    if (odd round) { ecall }
    else {
        set_csr(mip, USIP);
        /* Test func in M mode, enable USIE in MIE, 
         * and other interrupts works well */
    }
}

但是沒有發生用戶軟件中斷,手冊上說:

每個較低的特權級別都有一個單獨的軟件中斷掛起位(SSIP、USIP),可以通過 CSR 從運行在相關或任何更高特權級別的本地 hart 上的代碼進行讀取和寫入。

而且我確定我可以通過設置 MIP_SSIP 來獲得主管軟件中斷。 而且我查看了Spike中的中斷引發功能,發現沒有用戶軟件中斷……手冊上也說:

如果不支持用戶級中斷,則 USIP 和 USIE 硬連線為零。

所以我打印了 mie 來檢查它:

# config in mie and mstatus
write_csr(mie, read_csr(mie) | MIP_MTIP | MIP_MSIP | MIP_SSIP | MIP_USIP);
write_csr(mstatus, (read_csr(mstatus) | MSTATUS_MIE | MSTATUS_SIE | MSTATUS_UIE));
# Set mie and mip in test func
set_csr(mie, MIP_USIP);
set_csr(mip, MIP_USIP);
# Result before and after set
MIE >> 000000000000008a # before
MIP >> 0000000000000000
MIE >> 000000000000008a # after
MIP >> 0000000000000000

USIP 和 USIE 硬連線為零! 那么,也許現在沒有 USI ? 但取決於第一次嘗試,我認為同步異常實際上使用 ID=0 中斷處理程序(用戶軟件中斷)。 似乎我的問題的答案是肯定的......並且沒有用戶軟件中斷可以避免沖突? 這是正確的嗎? 有沖突嗎?

USIP 和 USIE 硬連線為零是一個實現細節。 第二卷:RISC-V 特權架構 V1.10指出:

當向量中斷使能時,對應於用戶模式軟件中斷的中斷原因 0 被向量到與同步異常相同的位置。 這種歧義在實踐中不會出現,因為用戶模式軟件中斷要么被禁用,要么被委托給較低特權的模式。

所以基本上答案是肯定的,同步異常處理程序與用戶軟件中斷中斷處理程序相同。

暫無
暫無

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

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