zcu102_4_AXI_GPIO实现按钮控制LED及PS响应PL中断

本文配套原码工程已上传至https://download.csdn.net/download/botao_li/10909283

AXI_GPIO

AXI GPIO模块将PL端连接的GPIO信号通过AXI接口与PS模块连接,PS通过AXI接口的地址映射对PL端的GPIO信号进行读写等控制

与EMIO可以实现相同的功能,区别主要在于EMIO对于少数GPIO接口进行单独的控制,而AXI GPIO可以对多个GPIO接口合并成的总线进行整体读写控制

Block Design

建立zcu102的Vivado工程,建立Block Design,添加zynq模块,2个AXI GPIO模块和1个ILA模块(用于debug)

zynq模块保持默认设置并添加uart0,uart1用于串口调试,以及pl至ps的中断用于响应按钮操作
在这里插入图片描述
在这里插入图片描述

其实1个axi_gpio模块可以定义2个GPIO通道独立工作,为了演示操作,本试验使用的2个axi_gpio模块都只使用其中1个通道

配置图中GPIO通道在SDK编程的API函数中被认为是1通道,GPIO2通道在API中被认为是2通道

将axi_gpio_0模块双击设置为led输出,使用Board Interface可以不用手动添加管脚约束
在这里插入图片描述

将axi_gpio_1模块设置为按钮输入,使用Board Interface可以不用手动添加管脚约束
在这里插入图片描述

使能中断会添加ip2intc_irpt端口,将此端口连接至PS模块的PL中断输入端口即可在SDK中响应当前axi_gpio模块的中断

注意:axi_gpio的中断会在任一GPIO接口数值变化时产生一段时间的高电平,无论数值由0变1还是由1变0,因此按钮按下并弹起实际会产生2次中断的高电平

ILA模块的添加即用于验证上述说明,

使用Block Design的自动连线及手动连线后,Block Design内容如下图所示:
在这里插入图片描述

对Block Design先Generate Output Products,再Create HDL Wrapper

在Flow Navigator中选择Generate Bitstream,直到完成(由于使用Board Interface配置2个axi_gpio,因此不用进行手动管脚约束)

在File菜单选择Export Hardware,勾选Include Bitstream

之后在File菜单选择Launch SDK

SDK

进入SDK后,以Empty Application模板建立工程(为演示操作才选Empty,HelloWorld模板更方便)
在这里插入图片描述

在BSP工程上点击右键,选择Board Support Package Settings
在这里插入图片描述

在standalone页设置标准输入输出为uart0,用于串口调试
在这里插入图片描述

在axi_gpio_test工程的src文件夹上右键选择新建source file
在这里插入图片描述

在弹出窗口中设置源文件名和生成模板,注意文件名需要加上.c扩展名,模板选择C source
在这里插入图片描述

双击打开建立的main.c文件,写入代码

具体编程原理可以查看代码注释或者从BSP工程的system.mss文件导入示例工程查看

#include <stdio.h>
#include "xparameters.h"
#include "xgpio.h"
#include "sleep.h"
#include "xscugic.h"
#include "xil_exception.h"

//在中断中赋值控制LED闪烁模式
//中断中控制的标志变量用volatile声明表示不用cache
volatile u8 mode = 0;

//中断函数声明为static,可以加快速度
static void handler_btn(void* Callback)
{
   
	//在XScuGic_Connect设置XGpio对象指针作为参数送入
	XGpio* g = (XGpio*)Callback;

	//读出按钮状态
	u32 r;
	r = XGpio_DiscreteRead(g, 1);
	printf("%08x\n\r", r);

	//设置工作模式
	//由于AXI GPIO中断无论接口由0变1还是由1变0都会产生高电平中断给PS,根据当前逻辑不能响应接口由1变0的中断
	switch (r)
	{
   
	case 0b1:
		mode = 0;
		break;
	case 0b10:
		mode 
  • 3
    点赞
  • 33
    收藏
    觉得还不错? 一键收藏
  • 8
    评论
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值