本文主要是介绍RISC-V (七)外部设备中断,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
中断的分类
-本地中断
-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个外部中断设备。
Enable寄存器
Thresh old寄存器
claim/complete寄存器
操作流程
这篇关于RISC-V (七)外部设备中断的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!