Rocket-Chip-PLIC

本文深入解析PLIC中断控制器,探讨其在RISC-V架构中的作用及配置流程。从指令集定义出发,介绍PLIC的工作原理,包括优先级处理、使能配置、寄存器功能等关键概念。并通过实际代码示例,展示如何在SiFive E3平台上使用PLIC处理中断。

这次我们介绍的功能是PLIC中断。

首先我们先看一下指令集《The RISC-V Instruction Set Manual Volume II: Privileged Architecture Privileged Architecture Version 1.10》是如何定义的。
文档链接:https://riscv.org/specifications/privileged-isa/
在这里插入图片描述
在这里插入图片描述
PLIC是全局的中断单元,用于I/O设备,入口可以很多个,但上报给CORE的只有一个,也就是多个中断来临时,是有优先级限制的。上图的红色箭头是一些使能位置,后面我会一个个进行说明。

协议中的7.5节规定了ID 0是没有中断的含义,且中断ID值从1开始,当多个优先级相同的中断来临时,ID越小的优先级越高,关于优先级的说明后面会详细分析。

更多关于PLIC的协议内容,大家可以直接查看指令集,我就不在这里说了。

现在我们参考SiFive E3的使用文档来使用rocket-chip的PLIC模块。
首先先看一下rocket-chip的PLIC模块的物理地址,如下图。
在这里插入图片描述
可以看出是物理地址是对得上的,那我们直接看E3怎么用就是了。
下面看的是E3关于PLIC的寄存器内容。

在这里插入图片描述
具体的寄存器说明大家看文档吧。需要注意的是,pending相关的寄存器是只读的,priorities & enables相关的寄存器复位后为x值,priority thresholds寄存器 为零时允许所有具有非零优先级的中断,而值为7则屏蔽所有中断。claim process & completion寄存器是同一个寄存器。读取0表示没有中断悬挂。非零就说明有中断,且记录当前中断产生中优先级最高的中断ID。对该寄存器写入当前产生中断中最高的中断ID,则说明系统已知道该中断发生,且已处理或丢弃该中断。

接下来介绍的是与中断相关的CSR寄存器。

评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值