ZYNQ学习笔记_GPIO实例:通过EMIO实现按键控制LED
ZYNQ学习笔记_GPIO实例:通过EMIO实现按键控制LED
- 总体思路
- Block Design界面配置IP核并导出硬件配置
- 在SDK中编写C代码
- 下载PS和PL的联合工程到开发板
总体思路
首先需要先导出硬件环境到SDK中。
因为是通过EMIO接口,所以这次要使用PL端的引脚,不只是单纯的PS端设计,导出前要生成Bit流并在导出时要勾选包含bit文件。
其次在SDK设计中要将一个引脚设置为输入,另一个设置为输出,并将输入读到的值传给输出。
(没有先做MIO的实例是因为PYNQ-Z2上没有PS端的LED和按键…
Block Design界面配置IP核并导出硬件配置
从0到1的配置过程在Hello World那一节已经讲过了,所以这里直接贴出不一样的部分。
勾选UART0,GPIO_MIO和GPIO_EMIO,勾选MIO是因为UART0(14、15)是PS端的引脚。
因为仅需要用到2个EMIO引脚,一个按键和一个LED,所以EMIO接口数量选择2。
确认后可以发现多了一个GPIO_0的接口。
同时,打开RTL原理图可以看到,GPIO_EMIO引脚是一个输入输出引脚,向内连接着两个三态门。
配置好后写约束文件将这两个引脚连接到PL端的LED和按键上,再生成bit流文件即可导出硬件配置,之后的开发则在SDK中进行。
需要注意的是导出时需要勾选包含bit流文件。
在SDK中编写C代码
废话不多说,先贴代码再做解释。
#include "stdio.h"
#include "xparameters.h"
#include "xgpiops.h"#define GPIO_DEVICE_ID XPAR_XGPIOPS_0_DEVICE_ID#define EMIO_LED 54
#define EMIO_key 55XGpioPs Gpio;XGpioPs_Config * ConfigPtr;int main(){printf("GPIO EMIO TEST!\n\r");u32 key_value;//根据器件的ID,查找器件的配置信息ConfigPtr = XGpioPs_LookupConfig(GPIO_DEVICE_ID);//初始化GPIO驱动XGpioPs_CfgInitialize(&Gpio, ConfigPtr,ConfigPtr->BaseAddr);//把GPIO的方向设置为输入(0:输入/1:输出)XGpioPs_SetDirectionPin(&Gpio, EMIO_key, 0);//把GPIO的方向设置为输出(0:输入/1输出)XGpioPs_SetDirectionPin(&Gpio, EMIO_LED, 1);//设置输出使能(0:关闭/1:打开)XGpioPs_SetOutputEnablePin(&Gpio, EMIO_LED, 1);while (1){key_value = XGpioPs_ReadPin(&Gpio,EMIO_key);XGpioPs_WritePin(&Gpio, EMIO_LED, key_value);}return 0;
}
下面对代码中的一些定义和函数做出说明
#define GPIO_DEVICE_ID XPAR_XGPIOPS_0_DEVICE_ID
这是一个宏定义,按住Crtl并点击右边的XPAR_XGPIOPS_0_DEVICE_ID
会跳转到xparameters.h
头文件内,可以看到GPIO的ID为0,地址为0xE000A000。这让我想起了上一篇文章中的一句话:
软件通过一组存储映射(memory-mapped)的寄存器来控制GPIO
之后的一条代码正是通过这个ID来查询设备(GPIO)的地址
ConfigPtr = XGpioPs_LookupConfig(GPIO_DEVICE_ID);
查到的这个0xE000A000地址和ID一起传给了ConfigPtr
结构体指针,该结构体的定义如下:
typedef struct {u16 DeviceId; /**< Unique ID of device */u32 BaseAddr; /**< Register base address */
} XGpioPs_Config;
有了GPIO的配置信息,将GPIO通过XGpioPs_CfgInitialize(&Gpio, ConfigPtr,ConfigPtr->BaseAddr);
函数进行初始化。
初始化完毕就可以开始设置具体的GPIO引脚的输入输出了。
void XGpioPs_SetDirectionPin(const XGpioPs *InstancePtr, u32 Pin, u32 Direction)
该函数即可对引脚的输入输出进行配置,0为输入,1为输出。
之前我们对寄存器的知识学习时就知道,引脚配置为输出之后,还需要对引脚使能输出,即下面这个函数:
void XGpioPs_SetOutputEnablePin(const XGpioPs *InstancePtr, u32 Pin, u32 OpEnable)
下载PS和PL的联合工程到开发板
代码编写完毕后,要将工程下载到开发板上,之前因为仅有PS端所以只用右键工程文件夹后Run As→Launch On Hardware。现在除了要进行这个操作以外,还需要下载bit流文件到开发板,只需点击下面这个按钮。
ZYNQ学习笔记_GPIO实例:通过EMIO实现按键控制LED相关推荐
- ZYNQ学习笔记_GPIO之输入输出
ZYNQ学习笔记_GPIO之输入输出 GPIO介绍 MIO介绍 EMIO介绍 控制GPIO接口的寄存器原理_输入输出部分 GPIO介绍 GPIO的英文全称为General-purpose input/ ...
- STM32学习笔记——EXTI外部中断,光敏传感器控制LED灯
中断系统 中断:在主程序运行过程中,当出现了特定的中断触发条件,CPU就可以暂停当前正在运行的程序去处理中断程序,并把当前程序的地址压入堆栈,中断程序处理完成后把地址弹出堆栈,回到刚刚暂停的位置继续执 ...
- 28335学习笔记4——F28335之3*3按键控制(包含按键消抖和按键检测方法介绍)
1.按键消抖 通常的按键所用开关为机械弹性开关,当机械触点断开. 闭合时, 电压信号如下图所示 由于机械点的弹性作用,按键开关在闭合时不会马上稳定的接通,在断开时也不会一下子断开.在闭合和断开的瞬间均 ...
- expect学习笔记及实例详解【转】
1. expect是基于tcl演变而来的,所以很多语法和tcl类似,基本的语法如下所示: 1.1 首行加上/usr/bin/expect 1.2 spawn: 后面加上需要执行的shell命令,比如说 ...
- zynq开发系列4:EMIO连接按键控制MIO连接的灯
EMIO是负责PL端和PS端通信,PL侧按键可以通过连接EMIO来控制连接到MIO的PS侧的LED.原理和实验3 zynq开发系列3:GPIO连接MIO通过按键控制LED灯亮起 类似,只是由MIO侧的 ...
- 51单片机学习笔记5 流水灯实现及蜂鸣器控制
51单片机学习笔记5 流水灯实现及蜂鸣器控制 一.流水灯 1. 硬件电路 2. 代码实现 (1) 点亮一个LED的基本操作 (2) 使用算术左移实现流水灯 (3) 使用库文件左移函数 二.蜂鸣器 1. ...
- STM32F072 Nucleo笔记2-利用STM32CuBeMX创建工程并用按键控制LED的亮灭
STM32F072 Nucleo学习笔记2-利用STM32CuBeMX创建工程并用按键控制LED的亮灭 本文例子用到: 1. STM32F072 Nucleo开发板 2. STM32CubeMX软 ...
- petalinux zynq spi_ZYNQ 系列 01 | PL 实现按键控制 LED(1)
注:本篇文章由[开源骚客:OpenSoc]公众号首发,现转载至头条号. 新的开始,这一篇文章,就算是使用 Vitis 开发 ZYNQ 的第一篇文章吧. 计划把 ZYNQ 开发写成一个系列,所使用的的软 ...
- STM32学习:按键控制LED
STM32学习:按键控制LED 文章目录 前言 一.所用知识点复习 1.stm32工作模式(*注意上下拉输入的区别*) 2.按键抖动与常见按键接法 按键抖动: 按键消抖: 常见按键接法: 3.GPIO ...
最新文章
- Linux下如何查看硬件信息?
- 第10课--10_04_LVM之二
- 防火墙(二)SNAT和DNAT
- javascript滚动文字
- TensorFlow Serving 尝尝鲜
- java跨用问题怎么解决_跨浏览器问题的五种解决方案
- 【语义分割】数据增强方法(原图与标签同时扩增)
- Go Web开发之Revel - 返回值
- 刷机精灵Android版V3.0,刷机精灵V3.0版发布,开启全新刷机时代
- 使用Python爬取百度热搜榜
- ios 融云 重写对话列表_iOS开发融云即时通讯集成详细步骤
- 2019年 CCF 中国计算机学会推荐国际学术会议和期刊目录 最新版
- 单片机实验:外部中断系统实验 如何1357,2468灯交替亮
- 共阳极数码管显示0~9_《显示器件应用分析精粹》之(3)数码管静态显示
- JAVA Oracle插入大量数据优化
- 木纹标识lisp_LISP架构中一种新的移动性管理方案研究
- 《弃子长安》第十一章 一路向西
- [再寄小读者之数学篇](2014-05-30 对数不等式)
- 【ELMAN预测】基于粒子群算法改进ELMAN动态递归神经网络实现数据预测matlab源码
- strcpy函数和strcat函数