ZYNQ. GPIO
GPIO
General Purpose I/O ,网上能找到很多关于znyq gpio 的文章。

分类:EMIO 、MIO 、AXI_GPIO
硬件系统
MIO和EMIO是在zynq核中配置的,MIO是固定的,EMIO是可选的使用PL的引脚。
AXI_GPIO是在PL端使用的GPIO,挂在znyq核的M_AXI_GP接口下使用。
需要zynq核,AXI_GPIO的使用PL端的模块,如AXI_GPIO
软件部分
SDK的库封装是多层次的,
可以使用高层次的
- xgpio.h 使用AXI_GPIO需要
- xgpiops.h 使用MIO和EMIO需要
或者是底层的
- xgpio_l.h
- xil_io.h
在高层次中模块被封装成结构体实例,使用时调用实例,初始化读写。
而低层次中就是直接对地址进行读写,如下:
//write
XGpio_WriteReg(BaseAddress, RegOffset, Data)
XGpio_Out32((BaseAddress) + (RegOffset), (u32)(Data))
//read
XGpio_ReadReg(BaseAddress, RegOffset)
XGpio_In32((BaseAddress) + (RegOffset))
或更底层的。
我更喜欢高级的读写方式,因为更多信息都在函数中表现出来了,下面是读写方式。
流程都是相似的:
- 定义Gpio或GpioPs结构体。
- 初始化配置。
- 设置读写方向、使能。
- 读写。GpioPs有Pin和Bank两种方式。
code:
//GPIO #define GPIO0_ADDR XPAR_AXI_GPIO_0_BASEADDR
#define GPIO0_ID XPAR_AXI_GPIO_0_DEVICE_ID int main()
{
XGpio Gpio0;
XGpioPs_Config *ConfigPtr; int Status;
u32 value = 0xa;
/* Initialize the GPIO driver */
Status = XGpio_Initialize(&Gpio0, GPIO0_ID);
if (Status != XST_SUCCESS) {
xil_printf("Gpio Initialization Failed\r\n");
return XST_FAILURE;
}
Status = XGpioPs_CfgInitialize(GpioPsPtr,ConfigPtr,
ConfigPtr->BaseAddr);
if (Status != XST_SUCCESS)
{
xil_printf("Cfg init err\n");
return XST_FAILURE;
} /* Set the direction */
XGpio_SetDataDirection(&Gpio0, CHANNEL, 0x00000000);//output // XGpio_Out32((GPIO1_ADDR) + (0), (u32)(value));
// XGpio_WriteReg(GPIO_ADDR, 0, value);
XGpio_DiscreteWrite(&Gpio0, CHANNEL, value); return ;
} //GPIOPS
#define GpioPsDeviceId XPAR_PS7_GPIO_0_DEVICE_ID
#define pin 0
int main()
{
XGpioPs GpioPs;
XGpioPs_Config *ConfigPtr; int Status;
int value = ;
/* Initialize the Gpio driver. */
ConfigPtr = XGpioPs_LookupConfig(GpioPsDeviceId);
if (ConfigPtr == NULL) {
xil_printf("ERROR\n");
return XST_FAILURE;
}
Status = XGpioPs_CfgInitialize(GpioPsPtr,ConfigPtr,
ConfigPtr->BaseAddr);
if (Status != XST_SUCCESS) {
xil_printf("Cfg init err\n");
return XST_FAILURE;
} //set pin direction
//value 0 -> input 1 -> output
XGpioPs_SetDirectionPin(GpioPsPtr, pin0, );
//value 0 -> disable 1 -> enable
XGpioPs_SetOutputEnablePin(GpioPsPtr, pin0, ); //write
XGpioPs_WritePin(&GpioPs, pin0, value); return ;
}
via :
ug585 CH14 General Purpose I/O
https://blog.csdn.net/husipeng86/article/details/52123465
https://blog.csdn.net/yc461515457/article/details/40954363
https://blog.csdn.net/xzyiverson/article/details/19934837
https://blog.csdn.net/luoqindong/article/details/43017773?utm_source=blogxgwz0
ZYNQ. GPIO的更多相关文章
- Zynq GPIO 中断
/* * Copyright (c) 2009-2012 Xilinx, Inc. All rights reserved. * * Xilinx, Inc. * XILINX IS PROVIDIN ...
- Linux Zynq GPIO中断
注册中断:对每个pin进行循环遍历for (pin_num = 0; pin_num < min_t(int, ZYNQ_GPIO_NR_GPIOS, (int)chip->ngpio) ...
- 第十章 MIZ702 ZYNQ制作UBOOT固化程序
10.0难度系数★☆☆☆☆☆☆ 10.1是什么是固化 我们前几章将的程序都是通过JTAG先下载bit流文件,再下载elf文件,之后点击Run As来运行的程序.JTAG的方法是通过TCL脚本来初始化P ...
- S02_CH14_ EMIO_OLED 实验
S02_CH14_ EMIO_OLED 实验 本章将使用EMIO模拟OLED的时序来驱动OLED,本方案对米联系列Miz702,Miz702N和Miz701N全兼容. 14.1板载OLED硬件原理 M ...
- Zynq 7020笔记之 GPIO MIO 和EMIO的学习
1 参考 Xilinx ZYNQ 7000+Vivado2015.2系列(四)之GPIO的三种方式:MIO.EMIO.AXI_GPIO 2 理论指示 在PS侧,有PS自己的IO pin,称为MIO,共 ...
- 【转】ZYNQ中三种实现GPIO的方式
版权声明:本文为博主原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明. 本文链接:https://blog.csdn.net/husipeng86/article/det ...
- ZYNQ笔记(3):GPIO的使用(MIO、EMIO)——led灯
一.GPIO原理 1.GPIO介绍 程序员通过软件代码可以独立和动态地对每个 GPIO 进行控制,使其作为输入.输出或中断. (1)通过一个加载指令,软件可以读取一个 GPIO 组内所有 GPIO 的 ...
- ZYNQ入门实例——三种GPIO应用、中断系统及软硬件交叉触发调试
一.前言 Xlinx的ZYNQ系列SOC集成了APU.各种专用外设资源和传统的FPGA逻辑,为ARM+FPGA的应用提供助力,降低功耗和硬件设计难度的同时极大提高两者间传输的带宽.之前在研究生课题中使 ...
- ZYNQ 中PS端GPIO EMIO使用
ZYNQ 中PS端GPIO EMIO使用 在使用ZYNQ进行开发设计时,往往需要对一些GPIO引脚进行配置,传统的配置方法通常在PL端进行管脚约束之后在Verilog代码中对相应引脚进行配置.这样如果 ...
随机推荐
- MSSQL批量写入数据方案
近来有一个项目Feature需要有批量写入数据的场景,正巧整理资料发现自己以前也类似实现的项目,在重构的同时把相关资料做了一个简单的梳理,方便大家参考. 循环写入(简单粗暴,毕业设计就这样干的)(不推 ...
- Pandas笔记目录
速查笔记 使用实例 Pandas-数据导入 (未完成) Pandas-数据探索 基础属性 shape indexs columns values dtype/dtypes 汇总和计算描述统计 coun ...
- Python Kivy 中文教程:安装(Windows)
Kivy 是一套用于跨平台快速应用开发的开源框架,只需编写一套代码,便可运行于各大桌面及移动平台上(包括 Linux, Windows, OS X, Android, iOS, 以及 Raspberr ...
- C# 多线程初级汇总
异步委托 创建线程的一种简单方式是定义一个委托,并异步调用它 委托是方法的类型安全的引用 Delegate类还支持异步地调用方法.在后台,Delegate类会创建一个执行任务的线程 投票,并检查委托是 ...
- MongoDB高级操作(2)
查询方法-常用查询方法 查询多条数据 --db.集合名称.find({条件文档}) 查询一条数据 --db.集合名称.findOne({条件文档}) 结果格式化 --pretty()方法 --db.集 ...
- c++/ boost 库常见错误及解决方法总结
1. error LNK2019: 无法解析的外部符号 "class boost::system::error_category const & __cdecl boost::sys ...
- Integration Guide
This document, along with the samples and Javadoc™ in the IBM Sametime Software Development Kit (SDK ...
- Luogu2257 YY的GCD/BZOJ2818 Gcd加强版(莫比乌斯反演+线性筛)
一通套路之后得到 求出中间那个函数的前缀和的话就可以整除分块了. 暴力求的话复杂度其实很优秀了,大约在n~nlogn之间. 不过可以线性筛做到严格线性.考虑其最小质因子,如果是平方因子那么只有其有贡献 ...
- 【BZOJ1434】[ZJOI2009]染色游戏(博弈论)
[BZOJ1434][ZJOI2009]染色游戏(博弈论) 题面 BZOJ 洛谷 题解 翻硬币的游戏我似乎原来在博客里面提到过,对于这类问题,当前局面的\(SG\)函数就是所有反面朝上的硬币单一存在时 ...
- 前端学习 -- Css -- 文本标签
em和strong - 这两个标签都表示一个强调的内容, em主要表示语气上的强调,em在浏览器中默认使用斜体显示 strong表示强调的内容,比em更强烈,默认使用粗体显示 <!DOCTYPE ...