【分享】 基于E203的GPIO、PLIC(LED、按键中断)
1 队伍介绍
报名编号: CICC1649
团队名称: 巴巴托斯
实现功能:中断是soc设计中必不可少的一环,其作用极为重要。本次实验通过控制添加外部自定义中断usr_irq_0来控制LED的亮灭。
2 中断的作用
在SoC (System on Chip)设计中,中断是一种机制,用于处理外部事件并暂停CPU的正常执行流程。当外部事件发生时,如输入/输出操作或定时器/计数器到达其计数限制等,硬件会发出中断请求信号,通知CPU停止当前正在执行的任务,保存当前状态并转而执行中断处理程序。
中断处理程序可以根据具体的应用程序需求,进行不同的处理,比如读取IO端口数据、更新内存中的计数器或标志位等,然后恢复CPU的原来执行流程。
中断是SoC中实现多任务处理和实时响应的核心机制,能够极大地提高系统的效率和可靠性。同时,设计高效的中断架构也是SoC系统设计中的重要环节之一。
3 e203内部的修改
我们需要修改的文件位e203_subsys_main/e203_subsys_plic/sirv_plic_top.v中,将usr_irq_0以及usr_irq_1加入其中作为我们的外部中断源。
将其层层引出后得到的模块其中断引脚如下图所示
4 参考
参考:Nuclei_ddr200t原理图手册,官方提供的约束文件,确定能用的io口,有些io
别其他外设占用的
以及官方的gpio_toggle示例代码
5 硬件BD文件的设计
Gpioa_20 -Gpioa_23:4个led灯;Gpioa_26 -Gpioa_28:3个KEY;
Usr_irq_0_0:一个key用于中断
6 sdk的设计
两种方式:
1·参考官方例程自己修改
2·自己编写
(1) 在hbirdv2.h头文件中将__PLIC_INTNUM改为此时的中断数量,本实验中加入了两个中断扩展,因此将该参数改为19.
还可在其中加入新加中断的中断号,其分别为17,18.
(2) 修改main中代码
Led初始化及使能设置:
Irq中断设置,按下按键中断会自动跳转到该函数,翻转gpio23。
按下按键,使得usr_irq_o拉高触发中断并翻转led电平,达到一个控制亮灭的效果。
7.总结
本文详细介绍了中断机制在计算机系统中的作用,以及如何在e203处理器中利用外部中断来处理用户输入输出。除此之外,中断也能对设备响应和其他紧急任务进行处理。