AXI_gpio笔记

写在前面
base gongzige lesson
主要讲axi GPIO BD如何搭建,SDK怎么操作,此笔记不完整,SDK操作界面还不会

开始搭建一个AXI GPIO的BD

1 create block design -- 命名cpu
2 添加zynq ip,关掉不需要的功能(关掉时钟和复位),同时打开需要的功能(GP0打开)
alt text
一个全部展开,一个全部折叠
alt text
修改DDR配置,型号更改,目前手中小梅哥zynq7015的板子DDR是
NT5CC256M16ER-EKI
兼容:MT41K256M16RE-125
修改电压 bank0 3.3V bank1 1.8V
3 引出时钟 命名clk_100M
alt text
4 添加ip,AXI GPIO
设置enable dual channel,一个入,一个出
AXI——lite full stream
在AXI GPIO IP核内,input output的方向是相对PS而言
alt text
5 点击run connection automation, GPIO GPIO2 S_AXI 全选
alt text
删除这个不需要的ip
alt text
手动添加复位rst_n,create port
6 地址分配
PS对地址0x4120_0000的寄存器进行操作,就可以实现对AXI GPIO ip的使用
alt text
7 自从检查
右击空白--validate design
报 successful
8 保存之后,generate output,默认per IP即可
alt text
9 生成顶层 层级目录下,右击cpu,生成wrapper顶层
10 做好top.v文件后。generate bitstream 等待编译完成
11 打开SDK:file -- launch SDK
注意此一次打开SDK时,要先export handware,并勾选include bit stream,然后launch SDK

#include "gpio.h"

int main(void)
{
	XGpio_Initialize(&Gpio, GPIO_DEVICE_ID); //初始化
	XGpio_SetDataDirection(&Gpio, 1, 1);     //设置GPIO的通道和方向,此处为GPIO1 input
	XGpio_SetDataDirection(&Gpio, 2, 0);     //设置GPIO的通道和方向,此处为GPIO2 output

	u32 a = XGpio_DiscreteRead(&Gpio, 1);        //把GPIO1的值赋值给变量a
	XGpio_DiscreteWrite(&Gpio, 2, 0xaabbccdd);   //向GPIO2的赋值

	return 0;
}

操作数据应该先运行SDK,再修改数据,结合SDK的变量值查看和vivado的vio检查数据的变化


本文章使用limfx的vscode插件快速发布