中断的分类
-本地中断
-software interrupt(软终端)
-timer interrupt(定时器中断)
-全局中断
-external interrupt(外部中断 )
qemu主要是参考FU540-C000这款芯片做出来的,可以经常看一下这款芯片的原理图。
中断编程中涉及的寄存器
涉及到的寄存器
mstatue中也有一个mie,那个mie是全局中断,关掉就是把全部的中断关掉了。
下图中的mie是二级中断控制。
中断处理流程
大致流程跟异常处理一样,除了中断是把下一条pc值复制到mepc中,异常是把当前pc值复制到mepc中。
PLIC(platform-level interrupt controller)
外设有很多,但cpu接收外部中断的引脚只有一个。于是涉及到转换和汇聚的问题。
PLIC会根据中断的类型,进行筛选,如果有多个中断,只会让一个中断进来。
中断源在此项目中是定义了53个,其中0号中断源预留不用。串口设备在这儿定义的id=10
PLIC本身也是一个外设,也是通过寄存器去访问这个外设的。所有的外设都是通过内存映射的方式去访问外设的寄存器的。
Priority寄存器
有多少个外设就有多少个这样的寄存器。
pending寄存器
需要两个这样的寄存器去表达53个外部中断设备。