软件版本: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:整体连接图。
|
//axi_gpio ID #define AXI_GPIO_DEV_ID XPAR_AXI_GPIO_0_DEVICE_ID //channel1 #define BTN_CHANNEL 1 //channel2 #define LED_CHANNEL 2 XGpio Gpio; |
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灯亮起。
int main(void){ int Status; u32 Btn_val; /* 初始化 GPIO 驱动 */ Status = XGpio_Initialize(&Gpio, XPAR_AXI_GPIO_0_DEVICE_ID); if (Status != XST_SUCCESS) { xil_printf("Gpio Initialization Failed\r\n"); return XST_FAILURE; } /* 设置gpio的信号方向,设置0为输出,设置1为输入.*/ XGpio_SetDataDirection(&Gpio, BTN_CHANNEL, 1); XGpio_SetDataDirection(&Gpio, LED_CHANNEL, 0); while(1){ /*读gpio输入通道信号的值.*/ Btn_val=XGpio_DiscreteRead(&Gpio, BTN_CHANNEL); //检测 Btn_val值,如果按钮按下,灯全亮,否则灯全灭 if(Btn_val){ /*写gpio输入出信号的值.*/ XGpio_DiscreteWrite(&Gpio, LED_CHANNEL, 0x0); }else{ XGpio_DiscreteWrite(&Gpio, LED_CHANNEL, 0xf); } } } |
函数分析
分析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位。
网站内容版权所有归 米联客品牌所有,如果网站内容有侵权行为请联系客服热线0519-80699907,本站点会第一时间核对排查并处理 GMT+8, 2025-12-7 07:38