Xilinx火龙果学习笔记(3)—GPIO的使用
由于我选择的项目是需要使用外设的,所以这里只介绍AXI-GPIO的使用。EMIO与MIO的使用网上是能找到资料与源码的。搭建工程参考前一篇笔记,这里主要补充拓展一下。
直接到add ip部分,添加AXI-GPIO及Timer模块。下图是成果图;
其实这里面添加了三个AXI-GPIO ip核与一个AXI-Timer IP核。至于配置,我这里只配置了三个AXI-GPIO IP核,分别配为6位全输入,4位全输出以及2位既可输入也可输出。下图是6输出配置图(双击IP核即可进入):
在这里解释一下,如果勾选了Enable Dual Channel,那么在写代码时就要注意通道选择了。没选则默认1通道。
至于连线这么复杂,完全不够管,vivado这一点还是不错的,点击自动连线就自动把该连的连起来了。甚至手动连还会导致某些问题,具体请百度。
zynq部分跟上一次配置一样,不用管。接下来就到run synthesis部分了,synthesis后,open synthesized design->edit timing constraints,打开综合后的时序约束窗口,根据原理图配置引脚即可,还要注意选高低电平。如图是我配置的引脚。
其他同笔记(2),后面就可以直接到SDK部分了。先版支持包,再导入例子,之后就可以自己玩了。在这里写几点关于GPIO写代码使用的心得。
关于工程管理问题,个人是比较喜欢建头文件,把需要的函数都放头文件里的。遮掩看起来层次清楚一些。可以在src文件夹同级建一个文件夹,然后在里面添加头文件与对应的.c文件,然后再右击代码工程,在属性中添加include路径即可。如图:
GPIO的读写都是直接读整个IP核接口的,如果想得到某一位的数据,完全可以参考MCU中的位与操作。
由于这里使用的AXI-GPIO,与MIO和EMIO不同,使用AXI-GPIO函数的头文件是#include “xgpio.h”,另外注意分清楚GPIO的ID号,就是根据这个来区分对哪个GPIO进行操作的,ID号定义在#include “xparameters.h”中。
AXI-GPIO的操作还是很简单的。先初始化,然后设置方向,然后就可以进行正常的读写了,可以看Xilinx自带的例程。怎么导入例程见笔记(2)。