欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 教育 > 幼教 > ZYNQ笔记(四):AXI GPIO

ZYNQ笔记(四):AXI GPIO

2025/4/16 15:11:30 来源:https://blog.csdn.net/2303_76814451/article/details/147111519  浏览:    关键词:ZYNQ笔记(四):AXI GPIO

版本:Vivado2020.2(Vitis)

任务:使用 AXI GPIO IP 核实现按键 KEY 控制 LED 亮灭(两个都在PL端)

目录

一、介绍

二、硬件设计

三、软件设计

四、效果


一、介绍

        AXI GPIO (Advanced eXtensible Interface General Purpose Input/Output) 是 Xilinx 提供的一个可配置的通用输入输出 IP 核(通过 PL 资源实现的 GPIO,不同于 GPIO (E)MIO 是硬件固有的),用于在基于 AXI 总线的系统中实现 GPIO 功能。

主要特性:

  1. 双通道设计:通常提供两个独立的GPIO通道(Channel 1和Channel 2)

  2. 可配置数据宽度:每个通道的数据宽度可独立配置(1-32位)

  3. 输入/输出方向:每个位可独立配置为输入或输出

  4. 中断支持:可配置中断生成功能

二、硬件设计

        (1)配置ZYNQ 需要注意 AXI GPIO 使用了 AXI协议接口,所以 AXI接口、PL端时钟接口、复位接口都需要保留,此外的一些配置如Bank电压、UART串口配置(用于debug)、去掉未使用端口等等不再赘述。注意虽然使用了PL端按键,因为是通过AXI GPIO实现的不需要配置EMIO。

        (2)KEY 和 LED 都单独用一个 AXI GPIO IP(也可以只用一个,只不过分开方便区分),两者配置相同以 KEY 为例配置界面如图所示:

1.后面通过软件设置io的输入输出方向(不勾选All In/Outputs)

2.各只用了1个引脚,故设置1通道(不勾选Enable Dual Channel)、位宽1位(GPIO Width )

3.没有使用中断(不勾选Enable Interruput)

       (3)IP都配置好后点击上面的自动运行和连接,同时会自动补全其他的所需的IP

        (4)最后整体 bd 设计部分如图所示:设计检查、Generate Output Products、 Create HDL Wrapper、管脚约束、Gnerate Bitstream、Export Hardware(包含比特流文件)、启动Vitis

三、软件设计

        AXI GPIO 软件设计相对来说比 MIO、EMIO简单一点,因为是PL端资源实现,输出直接通过拉高引脚电平和清零实现的,不过配置细节上还是有一些区别

        此外AXI GPIO器件ID需要与硬件设计相对应,可以CTRL+左键器件ID跳转到 xparameters.h 查看器件对应情况(或者直接CTRL+左键 xparameters.h 再去翻)

#include "stdio.h"
#include "xil_printf.h"
#include "xparameters.h"
#include "xgpio.h"
#include "sleep.h"//AXI GPIO是软核的gpio所以不用定义管脚,是通过所在通道和掩码来确定控制AXI GPIO哪一位的,通过软件进行置位输出与读取//======================用户自定义宏======================//#define KEY_AXI_GPIO_ID  	XPAR_GPIO_0_DEVICE_ID	//宏定义KEY AXI GPIO 器件ID
#define KEY_CHANNEL  		1						//宏定义KEY所在的axi gpio通道
#define KEY_MASK            0x01   				    //宏定义KEY所在通道掩码(用哪位就置0,这里掩码为了直观取反了,这里表示启用第0位)#define LED_AXI_GPIO_ID  	XPAR_GPIO_1_DEVICE_ID   //宏定义LED AXI GPIO 器件ID
#define LED_CHANNEL  		1						//宏定义LED所在的axi gpio通道
#define LED_MASK            0x01   					//宏定义LED所在通道掩码(用哪位就置0,这里掩码为了直观取反了,这里表示启用第0位)//======================实例化======================//XGpio LED_AXI_GPIO;				//定义LED AXI GPIO驱动实例
XGpio KEY_AXI_GPIO;				//定义KEY AXI GPIO驱动实例//======================函数声明======================//static void AXI_Gpio_Init();    //AXI GPIO初始化//======================主函数======================//
int main()
{print("AXI GPIO Test\r\n");AXI_Gpio_Init();while(1){if (XGpio_DiscreteRead(&KEY_AXI_GPIO, KEY_CHANNEL)) //如果按键按下(读取键值,不过这里整个通道都读了){	//写1XGpio_DiscreteWrite(&LED_AXI_GPIO, LED_CHANNEL, 0x01);}else{//清0XGpio_DiscreteClear(&LED_AXI_GPIO, LED_CHANNEL, 0x01);}}return 0;
}//======================AXI GPIO初始化函数======================//
void AXI_Gpio_Init()
{//初始化器件驱动XGpio_Initialize(&LED_AXI_GPIO, LED_AXI_GPIO_ID);XGpio_Initialize(&KEY_AXI_GPIO, KEY_AXI_GPIO_ID);//GPIO方向设置(不同于GPIO (E)MIO , AXI GPIO是 0输出/1输入)XGpio_SetDataDirection(&LED_AXI_GPIO, LED_CHANNEL, ~LED_MASK);XGpio_SetDataDirection(&KEY_AXI_GPIO, KEY_CHANNEL, KEY_MASK);
}

四、效果

        上板串口打印"AXI GPIO Test"debug信息,之后按下按键时LED点亮,松开熄灭

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词