- PLIC在写入complete寄存器后立马会触发下一次中断。
按照文档说明,PLIC的处理过程应该是在CPU收到外中断后读取claim/complete 寄存器,取出中断号,随后处理中断,再向claim/complete 寄存器写入完成处理的中断号。
现在我发现在从claim/complete 寄存器读出中断号后对应的pending位已经为0(正常),但将处理完成的中断号写入claim/complete 寄存器后对应中断的pending位会立刻变为1,随后PLIC发出外中断,进入了下一轮中断处理程序,虽然在这之中,外中断源并未真正发出中断信号。
我主要测试了UART与RTC,在QEMU中一切正常,使用D1所对应的驱动在D1上跑则会出如上问题。另:此系统为裸机程序,没有使用任何其他内核
代码链接如下:
plic.c
plic.h
sunxi-rtc.c
rtc.h
trap.c
另:我发现D1的user manual中关于PLIC的部分寄存器位描述有许多错误,且和C906的文档不一致,倒是和F133的一致,不知是不是全志的小编抄错了我就知道 硬件肯定没有问题
- 还有224页底部链接的问题。其他的部分我也只看了RTC,那里没有问题
P899 此处应为LSR- 还有哪些写错了?求大佬指出
(这个问题我们先看下)
- PLIC在写入complete寄存器后立马会触发下一次中断。
按照文档说明,PLIC的处理过程应该是在CPU收到外中断后读取claim/complete 寄存器,取出中断号,随后处理中断,再向claim/complete 寄存器写入完成处理的中断号。
现在我发现在从claim/complete 寄存器读出中断号后对应的pending位已经为0(正常),但将处理完成的中断号写入claim/complete 寄存器后对应中断的pending位会立刻变为1,随后PLIC发出外中断,进入了下一轮中断处理程序,虽然在这之中,外中断源并未真正发出中断信号。
我主要测试了UART与RTC,在QEMU中一切正常,使用D1所对应的驱动在D1上跑则会出如上问题。另:此系统为裸机程序,没有使用任何其他内核
代码链接如下:
plic.c
plic.h
sunxi-rtc.c
rtc.h
trap.c
另:我发现D1的user manual中关于PLIC的部分寄存器位描述有许多错误,且和C906的文档不一致,倒是和F133的一致,不知是不是全志的小编抄错了我就知道 硬件肯定没有问题
- 还有224页底部链接的问题。其他的部分我也只看了RTC,那里没有问题
P899 此处应为LSR- 还有哪些写错了?求大佬指出
(这个问题我们先看下)
举报