按键时如何捕获外部中断

时间:2019-03-22 15:42:00

标签: interrupt qemu riscv

在运行于riscv-qemu的简单示例中,我想在有击键时陷入外部中断。

我阅读了riscv-privileged-v1.10SiFive 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

0 个答案:

没有答案