在运行于riscv-qemu的简单示例中,我想在有击键时陷入外部中断。
我阅读了riscv-privileged-v1.10
和SiFive U54 Core Complex Manual
来学习外部中断和PLIC。我认为只有在初始化PLIC
之后,如果有按键操作,它才能陷入外部中断。
因此,我按照以下步骤初始化PLIC。
// Pseudocode
//set MIE of mstatus
asm volatile ("li t0, 0x8; csrw mstatus, t0");
// set MEIE bit of MIE
asm volatile ("li t0, 0x800; csrw mie, t0");
// set mtvec
asm volatile ("la t0, trap_vector; csrw mtvec, t0");
// set the priority of all interrupt sources to 1
plic_priority = PLIC_PRIORITY_BASE_ADDR;
for(int i=0; i<127; ++i)
plic_priority[i] = 1;
// enable all interrupt sources
plic_enable = PLIC_ENABLE_BASE_ADDR;
for(int i=0; i<127; ++i)
plic_enable[i] = 1;
// permit all interrupt sources
plic_threshold = PLIC_THRESHOLD_BASE_ADDR;
*plic_threshold = 0;
但是敲键盘时我无法陷入外部中断。
我错过了什么还是我完全错了吗?
Thx