RISC-V MCU中文社区

【分享】 利用蜂鸟E203搭建SoC【2】——外部中断扩展与验证

发表于 全国大学生集成电路创新创业大赛 2021-06-10 19:26:20
0
4113
3

队伍编号: CICC1842 


在SoC设计中一个重要通信方式就是中断,中断可以避免轮询方式造成的cpu空转消耗,可以更好利用cpu资源。蜂鸟e203中提供了plic外部中断总线进行中断的控制与配置,但在demo中已经被外设全部占用。为了避免较多更改rtl代码造成的不必要的bug,我们没有更改这些外设中断,e203在说明中明确指出可以支持最高1024个中断源,因此我们对plic中断信号进行扩展。具体需要修改的文件为/perips/sirv_plic_top.v,修改如下

加入后,对e203进行打包,如下图所示,其中usr_irq_0和usr_irq_1为扩展的外部中断端口,可以在Block Design中连接外设中断信号。


连接后,为了测试中断是否成功连接,需要对其进行板级验证,本次验证依然使用axi-gpio作为辅助,使能gpio2以及中断,将gpio2作为输入使用,连接到DDR200T上的按键,每当我们按下按键,即会触发中断,进入中断程序。Block Design连接如下图所示,其中gpio中断连接到usr_irq_0上。


软件部分,可以通过对IDE中提供的例程进行修改,从而完成对中断的配置。本例中使用软件部分如下,首先对gpio进行配置,再利用PLIC_Register_IRQ函数对中断进行配置。函数原型为int32_t PLIC_Register_IRQ(uint32_t source, uint8_t priority, void *handler),共有三个参数和一个返回值:source参数指明了中断号,本例中加入的usr_irq_0和usr_irq_1分别是17和18;priority指明了中断的优先级;handler为函数指针,指向中断服务程序;返回值可以为-1或0,若为0即中断设置成功,否则失败。

此外,对于扩展的中断而言,还需要在hbirdv2.h头文件中将__PLIC_INTNUM改为此时的中断数量,本实验中加入了两个中断扩展,因此将该参数改为19.


对于中断服务程序,需要指明的是,由于e203的中断是边沿触发,对于电平触发的中断,需要尽快将中断清空,否则会影响正常使用。最终程序如下


按下按键后可以在串口中进行观察,可以判断中断设置成功。


喜欢3
用户评论
Z

Z 实名认证

懒的都不写签名

积分
问答
粉丝
关注
  • RV-STAR 开发板
  • RISC-V处理器设计系列课程
  • 培养RISC-V大学土壤 共建RISC-V教育生态
RV-STAR 开发板