[X]关闭
1

S02-CH06 AXI GPIO 实验

摘要: 软件版本:VIVADO2017.4操作系统:WIN10 64bit硬件平台:适用米联客 ZYNQ系列开发板米联客(MSXBO)论坛:www.osrc.cn答疑解惑专栏开通,欢迎大家给我提问!!6.1 概述 MIO和EMIO是直接挂在PS上的GPIO。而AXI_GPIO相 ...

软件版本: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 程序分析

接下来对程序进行分析。

首先看下面的定义

//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位。

2

路过

雷人

握手

鲜花

鸡蛋

刚表态过的朋友 (2 人)

发表评论

最新评论

引用 王不哭 2019-11-15 14:34
这个不添加约束文件么

查看全部评论(1)

本文作者
2019-9-6 19:17
  • 7
    粉丝
  • 9750
    阅读
  • 1
    回复

关注米联客

扫描关注,了解最新资讯

联系人:汤经理
电话:0519-80699907
EMAIL:270682667@qq.com
地址:常州溧阳市天目云谷3号楼北楼201B
热门评论
排行榜