PYNQ-Z2 AXI_GPIO实现按键控制led

前言

本文着重总结了使用PYNQ-Z2板子在配置zynq PS ip核的过程,我之前因为此处配置不对出了很多错,比如无法生成bit,下载程序出错等,看了很多博客,这样配置目前是不会出错的。

另外我之前尝试使用emio控制pl的按键和led,按键输入没问题,但是输出有小问题:不接led,就可以正常输出1,接上led就输出就一直是0,没找到原因,所以只能使用axi来实现按键控制led的功能。

本人水平有限,文中有任何不对的地方,欢迎指正!^-^

注意:本文使用的是pynq板文件,如果使用的是芯片文件,配置过程会有所不同,需要注意

c5ba116660e84f74adbdb1abf2868ba5.png

实验任务

利用AXI GPIO IP核,实现PS读取PL端的四个按键状态,并输出到PL端的四个led,实现一个按键控制一个led灯

硬件设计

块设计

添加zynq与axi gpio ip核

zynq 配置:

1.常规配置:

开启uart0:

437a73530edf4451afb7f62d3509e4da.png

配置DDR,这里pynq电路图里的ddr3型号其实并不包含在这里面,但选用这个也可以正常使用,可能是兼容的,注意需要设置16bit

67548e032a9745d187415e297bea76eb.png

2.pynq独特配置

在用户手册里可以看到,需要更改时钟为50Mhz

d37e1b2520574eb49b59f7959e2b5749.png

7bf2a633509940bd8ccf9982f2432e3b.png

MIO中bank1改为1.8v,也可以在电路图中找到:

1e02c1563b7542ddb7a2cb0e82eafb98.png

3e8e88beeac0415384a0db703eac275d.png

7d4ab2f2b6de4e629d6f9c125419b2cb.png

zynq 配置结束

axi gpio ip核配置如下,因为用的板文件,这里直接按提示选择led和按键就行:

7e7c04d929194d1e931a5c5ea0ba4d92.png

自动连接IP核:

efd9cee7a35d4690b45ebca5edf1c3a0.png

这里会自动添加两个ip核,一个是AXI互联,一个是提供复位信号的,这里可以不过多了解

验证之后就可以生成顶层 HDL

管脚定义

由于前面自动选择了led与按键,可以看到这里系统已经自动配置好了管脚:
d870c7bf42ea4846bd07c750d6bdfcdc.png

导出硬件

生产bit流并导出到SDK

软件设计

主函数代码如下:

#include "xil_printf.h"
#include "xil_io.h"
#include "xgpio.h"
#include "xparameters.h"

int main()
{
	print("Hello World\n\r");

	//实例变量
    XGpio led_key;

	//初始化器件驱动
	XGpio_Initialize(&led_key,XPAR_AXI_GPIO_0_DEVICE_ID);

	//设置io方向 Bits set to 0 are output and bits set to 1 are input.
    XGpio_SetDataDirection(&led_key,1,0b0000);
    XGpio_SetDataDirection(&led_key,2,0b1111);

    XGpio_DiscreteWrite(&led_key,1,0b0000);

    while(1)
    {
    	int a=XGpio_DiscreteRead(&led_key,2);
    	XGpio_DiscreteWrite(&led_key,1,a);
    }

    return 0;
}

实验现象

ad4ab2adf2e4420f97bfec20f884065a.png

 286b6c4da534462c892294ebf9ea2ad4.pngc392e1f6af8a44cebb0cdf4e0e448a61.pngb908614306044af19b494965a71afb01.png63d8f8cc0b8f478390a4a1484e074eff.png

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值