ZYNQ系列学习GPIO实验
GPIO实验
一、实验原理
调用GPIO实现PS对引脚的控制
二、实验步骤
1、建立工程
这部分是ivado的操作内容,这里不做过多说明。
2、添加ZYNQ处理器IP
在左侧菜单栏中双击Create Block Design(bd为文件),在跳出的Diagram界面添加IP核processing_system7_0(点击中间的加号后输入zynq即可筛选出来)
3、配置IP核
勾选UART1用于调试,设置DDR用于下载,具体的配置方式根据相应的芯片做出设置。
4、添加两个GPIO与总线连接的IP核
AXI-GPIO核添加和内核添加类似,直接调用IP核的库就行。
5、设置输入与输出的GPIO-AXI核类型
输入:
输出:

6、自动连接和自动
在Diagram框内出现Run Block Automation 和 Run Connection Automation两个选项,先后再前,依次执行,得到的效果图·:

7、生成例化
在资源界面顶层文件右击》generate Productor,默认生成即可。再右击选择Create HDL wrapped即可得到自动例化的文件。
8、配置引脚
双击open elaborated design,打开引脚管理器IO ports(2019的默认在右下角),根据原理图选择管脚。注意使用开发板的管教电压。
9、综合映射生成bit文件
这里本来有三个个步骤,但是可以合在一起执行。直接点击左下角的generate Bitstream即可得到bit文件。这里需要比较长的时间,需要耐心等待。映射也是需要做的。
这里说明一下bit文件的作用。
生成好的bit文件可以在file》export中输出hardware,生成的hardware可以使用sdk或者vitis平台读取,形成自定义的硬件平台。换言之,截至到这一步,所有的硬件设备已经调用完成,不能再添加硬件设计了。下面的都是基于软件的设计,不能修改硬件。所以这里需要检查所有的硬件设计是否达标。由于这里设计简单,就不做仿真了,使用过的全是IP核,具有保障。
成功的标志是生成xsa文件。
这里总是出现licence不支持的情况,如果使用是下载的licence的话,到licence管理器中刷新后重启软件好像可以解决,不确定。
10、vitis读取硬件
在2019之前的版本使用的是SDK,可以自动调用,新出的vitis好像不行,需要自己引用文件。
11、新建application project
在file》new 》application project中新建一个文件。
需要更改的设置就是platform
这里的选择Create a new platform from hardware,使用添加(加号)选择vivado生成的xsa文件(默认位于工程目录下,在生成的时候可以自己设置)

还有就是在不熟悉软件的架构之前可以使用hello word 模板,可以有效缩短时间。
12、编写代码
找到主文件(工程名.c),写入代码。
由于这部分不做代码设计的实验,就先找了一份代码作为测试:
#include <stdio.h>
#include "platform.h"
#include "xparameters.h"
#include "xscugic.h"
#include "xil_exception.h"
#include "xgpio.h"
#include <unistd.h> // usleep()
#include <stdbool.h> // bool
#define LED_DEVICE_ID XPAR_AXI_GPIO_1_DEVICE_ID
#define KEY_DEVICE_ID XPAR_AXI_GPIO_0_DEVICE_ID
XGpio LEDInst;
XGpio KEYInst;
u8 key_value_pre=0;
u8 key_value_now=0;
int main()
{
init_platform();
int status;
status = XGpio_Initialize(&KEYInst, KEY_DEVICE_ID); // initial KEY
if(status != XST_SUCCESS) return XST_FAILURE;
status = XGpio_Initialize(&LEDInst, LED_DEVICE_ID); // initial LED
if(status != XST_SUCCESS)return XST_FAILURE;
XGpio_SetDataDirection(&KEYInst, 1, 1); // set KEY IO direction as in
XGpio_SetDataDirection(&LEDInst, 1, 0); // set LED IO direction as out
XGpio_DiscreteWrite(&LEDInst, 1, 0x0);// at initial, all LED turn off
printf(">>> Press PL KEY1 ~ KEY4 one by one, and check the PL LED1 ~ LED4\n");
while(1)
{
usleep(100000); // 0.1s sleep, to debounce, in common, the meta-state will sustain no more than 20ms
key_value_pre=key_value_now;
key_value_now= XGpio_DiscreteRead(&KEYInst, 1) & 0x0F;
XGpio_DiscreteWrite(&LEDInst, 1, key_value_now);
if(key_value_pre!=key_value_now) printf("key state_changed!\n");
}
cleanup_platform();
return 0;
}
注:以上代码源自小熊猫学堂
13、调试代码
首先要搭建该工程的调试环境,使用小锤子图标可以实现。
先debug编译,再运行。编译时选择板上编译。这两个操作就是对应调试虫和开始键,接触过的人就应该知道。由于这个设计中加入了串口,所以还要加入端口,端口设置就不用多说了,做过串口实验的就会。根据这个可以得到调试的结果。如果要下载的话则调用flash即可。
三、实验结果
串口显示结果:

开发板显示结果:
ZYNQ系列学习GPIO实验的更多相关文章
- S02_CH10_ User GPIO实验
S02_CH10_ User GPIO实验 在之前的第四章课程中,我们详细的讲解了如何在VIVADO软件下封装一个简单的流水灯程序.在ZYNQ开发过程中,有时候我们可能会需要与ARM硬核进行通信,在这 ...
- Cortex-M3学习日志(一)-- GPIO实验
因为项目所需,所以不得不开始研究M3,我用的是NXP公司的LPC1768这个芯片,它是具有三级流水线的哈佛结构,带独立的本地指令和数据总线以及用于外设的稍微低性能的第三条总线,还包含一个支持随机跳转的 ...
- S02_CH08_ ZYNQ 定时器中断实验
S02_CH08_ ZYNQ 定时器中断实验 上一章实现了PS接受来自PL的中断,本章将在ZYNQ的纯PS里实现私有定时器中断.每隔一秒中断一次,在中断函数里计数加1,通过串口打印输出. 8.1中断原 ...
- GPIO实验之c语言
上一章节进行实验使用的是汇编进行编程的,本次实验是使用c语言进行编写的. (1)点亮一个led灯 1)启动文件: crt.S .text .global _start _star ...
- Beaglebone Back学习四(GPIO实验)
GPIO Beaglebone Back开发板引出了92个引脚,其中只有65个GPIO口可通过配置使用,由于引脚具有“复用”的特性,大约每个引脚有8种工作模式(Beagle System Refere ...
- GPIO实验(二)
=============第三个实验============用c语言轮流点亮3个LED=================== 1.crt0.S.text.global _start_start: ...
- GPIO实验(一)
目标:点亮LED1.看原理图,找到对应的引脚和寄存器2.a.配置寄存器为输入/出引脚 GPFCON[9:8]=0b01 b.设置输出高/低电平 GPDAT[4]=0b0 1.预处理2.编 ...
- 02-JZ2440裸机学习之GPIO实验【转】
本文转载自:http://blog.csdn.net/fengyuwuzu0519/article/details/54910717 版权声明:本文为博主原创文章,转载请注明http://blog.c ...
- GPIO实验
一.目标:点亮led 1.看原理图:怎样点亮led 2.怎样GPF4输出0/1 a.配置功能 输出/输入/其他功能(中断或者其他) b.设置输出高电平/低电平 操作寄存器--->看芯片手册 A ...
- Vivado设计二:zynq的PS访问PL中的自带IP核(基于zybo)
1.建立工程 首先和Vivado设计一中一样,先建立工程(这部分就忽略了) 2.create block design 同样,Add IP 同样,也添加配置文件,这些都和设计一是一样的,没什么区别. ...
随机推荐
- Activiti7+SpringBoot
1. 版本问题 1.1. Activiti版本 7.1.0-M6是最后一个支持JDK1.8的版本,此后的版本都要求JDK11以上 目前,Activiti最新版本是7.6.0,它是用JDK11编译的,因 ...
- Java并发编程实例--1.创建和运行一个线程
从这一篇开始写Java并发编程实例,内容都翻译整理自书籍:<Java 7 Concurrency Cookbook> 谈到线程,无法逃避的一个问题就是: 并发(concurrency)和并 ...
- 硬件开发笔记(八): 硬件开发基本流程,制作一个USB转RS232的模块(七):创建基础DIP元器件(晶振)封装并关联原理图元器件
前言 有了原理图,可以设计硬件PCB,在设计PCB之间还有一个协同优先动作,就是映射封装,原理图库的元器件我们是自己设计的.为了更好的表述封装设计过程,本文描述了创建晶振封装(DIP),将原理图的 ...
- Celey异步发送邮件时报django.core.exceptions.ImproperlyConfigured的解决办法
原main.py入口文件 #Celery的入口 from celery import Celery #创建Celery实例 生产者 celery_app = Celery('meiduo') #加载配 ...
- java+mysql数据库实现的学生管理系统
说明: java+mysql数据库实现的学生管理系统 功能 实现增加学生.删除学生.修改学生.学生列表.查询学生功能 截图: 开发工具/技术 java eclipse 价格:50元,有需要联系 微信 ...
- 第128篇:浏览器存储(cookie、webStorage、 IndexedDB)
好家伙,本篇为<JS高级程序设计>第二五章"浏览器存储"学习笔记 我们先来讲个故事 一个"薅羊毛"的故事 (qq.com) 概括一下,就是 有个人通 ...
- Java Reactive Programming
Java Reactive Programming 响应式编程 在 Spring Boot 中,支持了响应式编程,带来了性能和内存使用方面的优化. 详见: Spring: Blocking vs no ...
- [golang] 概念: struct vs interface
struct vs interface go语言的简化哲学: class = struct + receiver method set 注意: go 语言的struct,在参数传递中,是值拷贝. st ...
- 【主流技术】日常工作中关于 JSON 转换的经验大全(Java)
目录 前言 一.JSON 回顾 1.1结构形式 二.其它类型 -> JSON相关 2.1 JavaBean 转 JsonObject 2.2 JavaBean 转 Json 字符串 2.3 Li ...
- [学习笔记] Rocket.Chat 安装与设置启动项
这篇文章主要介绍手动安装的方式来安装Rocket.Chat,在Rocket.Chat官方有三种安装方式, 面向开发人员的直接使用meteor部署 传统的源码编译安装 Docker方式部署 接下来分别介 ...