ZYNQ-GPIO
一.简介
ZYNQ引脚分为MIO和EMIO两中,MIO为PS端由ARM控制,EMIO为PL端由FPGA控制。MIO共有54个引脚,MIO引脚集中在Bank0和Bank1,功能基本都是固定了,例如选中SD0就会用到40-45五个引脚这是用到PS端的引脚,而PL端则有64个引脚集中在Bank2,Bank3,功能未固定做什么都行。
二.硬件搭建
和前面文章一样把SD0,Uart0打开配置DDR,LVCMOS1.8V,勾选GPIO选择EMIO,把所有引脚Make External,保存创建顶层文件。
这里有地方需要注意,EMIO有三个引脚需要进行管脚绑定,首先在芯片上找到管脚的位置,其次找到管脚名字,Make External出去的GPIO名字是GPIO_0_0,打开GPIO_wrapper文件,找到inout GPIO_0_0就可以设置引脚了
绑定管脚,必须要绑定管脚否则在Generate Bistream会报错,绑定管脚方法如下
绑管脚的例子藏的比较深,
绑定完管脚,需要给每个管脚绑定电压,绑定管脚电压和绑定管脚差不多
绑定管脚结束如下,保存返回vivado,生成Bitstream,导出硬件做软件开发
三.软件开发
创建一个Hello World模板编写程序,写一个可以用按键控制的呼吸灯,按一次‘呼’再按一次‘吸’LED灯会渐渐变亮,渐渐变暗。
例子:
四.总结
注意的坑:引脚是从54开始的不是55,还有绑定管脚的时候怎样明白自己的LED灯是绑定54引脚还是55?,以上图为例子,G20引脚绑定的是0口,对应的就是54引脚。
GPIO初始化:
static XGpioPs GpioPs;
static XGpioPs_Config *GpioPs_Cfg;
XGpioPs_LookupConfig()查找设备ID;
XGpioPs_CfgInitialize()初始化配置;
XGpioPs_SetDirectionPin()设置方向‘0’输入,‘1’输出;
XGpioPs_SetOutputEnablePin()使能;
工作API
XGpioPs_WritePin();输出引脚0或1,前提是该引脚方向一定是输出;XGpioPs_ReadPin();读取该引脚状态0或1,前提是该引脚方向一定是输入;
以上就这些;
谢谢~