软件版本:VIVADO2017.4 操作系统:WIN10 64bit 硬件平台:适用米联客 ZYNQ系列开发板 米联客(MSXBO)论坛:www.osrc.cn答疑解惑专栏开通,欢迎大家给我提问!! 6.1 概述MIO和EMIO是直接挂在PS上的GPIO。而AXI_GPIO相当于GPIO的IP核,是通过AXI总线挂在PS上的GPIO上。本课节通过一个按钮控制LED亮暗讲解AXI GPIO IP的使用。 6.2 搭建BD工程Step1:新建一个名为为Miz_sys的工程。 Step2:创建一个BD文件,并命名为system,添加并且配置好ZYNQ IP。读者需要根据自己的硬件类型配置好输入时钟频率、内存型号、串口,连接时钟等。新手不清楚这些内容个,请参考“CH01 HelloWold/DDR/网口测试及固化”这一节课。 Step3:添加AXI GPIO IP,点击 Add IP,输入AXI GPIO,双击添加AXI GPIO IP。 Step4:AXI GPIO可以使用两个通道,分别是GPIO和GPIO2。我们使用两个通道,一个通道实现按键输入,另外一个通实现LED输出。 双击AXI GPIO IP,进行配置。使能双通道,设置通道1位宽为1,用于一路按键输入。设置通道2位宽为4,用于4路LED输出。 Step5:然后单击Run Block Automation ,进行勾选,单击OK。 Step6:修改管脚名称。 Step7:整体连接图。 Step6:右击工程,选择Debug as ->Debug configuration。 Step7:选中system Debugger,双击创建一个系统调试,并进行设置,点击Apply,点击Debug,并且运行程序 6.4 实验结果按下SW1按键,LED亮起。松开SW1按键,LED熄灭。 6.5 程序分析接下来对程序进行分析。 首先看下面的定义
XPAR_AXI_GPIO_0_DEVICE_ID 是AXI GPIO 的ID号。选中右键查看,在xparameters.h中查看到其值。 BTN_CHANNEL定义为1,LED_CHANNEL定义为2,分别表示通道1和通道2。XGpio Gpio表示定义一个Xgpio的指针实例。 下面分析一下main函数,main函数主要实现一路按钮输入,控制4路led输出,按钮按下,led灯亮起。
函数分析 分析1 函数:int XGpio_Initialize(XGpio * InstancePtr, u16 DeviceId) 功能:初始化Xgpio实例 参数:参数1 :XGpio * InstancePtr ,指向GPIO实例的指针; 参数2:u16 DeviceId ID号,自动生成,在xparameters.h文件中定义; 返回值:int值,返回初始化状态,成功还是失败。 分析2 函数:void XGpio_SetDataDirection(XGpio *InstancePtr, unsigned Channel,u32 DirectionMask) 功能:设置GPIO为输入/输出 参数:参数1 :XGpio * InstancePtr,指向GPIO实例的指针; 参数2:unsigned Channel,设置GPIO的通道,为1或2; 参数3:u32 DirectionMask 设置IO方向,0为输出,1为输入。 分析3 函数:u32 XGpio_DiscreteRead(XGpio * InstancePtr, unsigned Channel) 功能:读取GPIO通道的值。 参数:参数1 :XGpio * InstancePtr,指向GPIO实例的指针; 参数2:unsigned Channel,设置GPIO的通道,为1或2; 返回值:u32值,读取的值,最多32位。 分析4 函数:void XGpio_DiscreteWrite(XGpio * InstancePtr, unsigned Channel, u32 Data) 功能:写入GPIO通道的值。 参数:参数1 :XGpio * InstancePtr,指向GPIO实例的指针; 参数2:unsigned Channel,设置GPIO的通道,为1或2; 返回值:u32值,写入的值,最多32位。 |
扫描关注,了解最新资讯