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))

或更底层的。

我更喜欢高级的读写方式,因为更多信息都在函数中表现出来了,下面是读写方式。

流程都是相似的:

  1. 定义Gpio或GpioPs结构体。
  2. 初始化配置。
  3. 设置读写方向、使能。
  4. 读写。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的更多相关文章

  1. Zynq GPIO 中断

    /* * Copyright (c) 2009-2012 Xilinx, Inc. All rights reserved. * * Xilinx, Inc. * XILINX IS PROVIDIN ...

  2. Linux Zynq GPIO中断

    注册中断:对每个pin进行循环遍历for (pin_num = 0; pin_num < min_t(int, ZYNQ_GPIO_NR_GPIOS,  (int)chip->ngpio) ...

  3. 第十章 MIZ702 ZYNQ制作UBOOT固化程序

    10.0难度系数★☆☆☆☆☆☆ 10.1是什么是固化 我们前几章将的程序都是通过JTAG先下载bit流文件,再下载elf文件,之后点击Run As来运行的程序.JTAG的方法是通过TCL脚本来初始化P ...

  4. S02_CH14_ EMIO_OLED 实验

    S02_CH14_ EMIO_OLED 实验 本章将使用EMIO模拟OLED的时序来驱动OLED,本方案对米联系列Miz702,Miz702N和Miz701N全兼容. 14.1板载OLED硬件原理 M ...

  5. Zynq 7020笔记之 GPIO MIO 和EMIO的学习

    1 参考 Xilinx ZYNQ 7000+Vivado2015.2系列(四)之GPIO的三种方式:MIO.EMIO.AXI_GPIO 2 理论指示 在PS侧,有PS自己的IO pin,称为MIO,共 ...

  6. 【转】ZYNQ中三种实现GPIO的方式

    版权声明:本文为博主原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明. 本文链接:https://blog.csdn.net/husipeng86/article/det ...

  7. ZYNQ笔记(3):GPIO的使用(MIO、EMIO)——led灯

    一.GPIO原理 1.GPIO介绍 程序员通过软件代码可以独立和动态地对每个 GPIO 进行控制,使其作为输入.输出或中断. (1)通过一个加载指令,软件可以读取一个 GPIO 组内所有 GPIO 的 ...

  8. ZYNQ入门实例——三种GPIO应用、中断系统及软硬件交叉触发调试

    一.前言 Xlinx的ZYNQ系列SOC集成了APU.各种专用外设资源和传统的FPGA逻辑,为ARM+FPGA的应用提供助力,降低功耗和硬件设计难度的同时极大提高两者间传输的带宽.之前在研究生课题中使 ...

  9. ZYNQ 中PS端GPIO EMIO使用

    ZYNQ 中PS端GPIO EMIO使用 在使用ZYNQ进行开发设计时,往往需要对一些GPIO引脚进行配置,传统的配置方法通常在PL端进行管脚约束之后在Verilog代码中对相应引脚进行配置.这样如果 ...

随机推荐

  1. Scrum立会报告+燃尽图(Final阶段第七次)

    此作业要求参见:https://edu.cnblogs.com/campus/nenu/2018fall/homework/2486 项目地址:https://coding.net/u/wuyy694 ...

  2. C语言版本:单链表的实现

    slist.h #ifndef __SLIST_H__ #define __SLIST_H__ #include<cstdio> #include<malloc.h> #inc ...

  3. 剑指offer:包含min函数的栈

    题目描述: 定义栈的数据结构,请在该类型中实现一个能够得到栈中所含最小元素的min函数(时间复杂度应为O(1)). 解题思路: 相当与在保留原栈的同时,去维护一个最小栈.利用一个辅助栈来完成.对于每个 ...

  4. Hyper-V下WINXP无网卡问题解决

  5. [OSChina]VirtualBox 6.0.0 发布,改进对高端显示器的 HiDPI 支持--尝试一下

    VirtualBox 6.0.0 发布,改进对高端显示器的 HiDPI 支持 https://www.oschina.net/news/102838/virtualbox-6-0-0-released ...

  6. 解决sublime text3下中文无法输入的问题(Ubuntu)

    sublime-text-imfix,非常无脑.就喜欢这样的.

  7. 异构数据库之间完全可以用SQL语句导数据

    告诉你一个最快的方法,用SQLServer连接DBF 在SQLServer中执行 SELECT * into bmk FROM OpenDataSource( ‘Microsoft.Jet.OLEDB ...

  8. 继承自NSObject的不常用又很有用的函数(1)

    初始化阶段 —— load 和 initialize load函数 原型: +(void)load 当类被引用进程序的时候会执行这个函数. 在一个程序开始运行之前(在main函数开始执行之前),在库开 ...

  9. python 实现二叉树的深度 & 广度优先遍历

    什么是树 在计算器科学中,树(英语:tree)是一种抽象数据类型(ADT)或是实现这种抽象数据类型的数据结构,用来模拟具有树状结构性质的数据集合.它是由n(n>0)个有限节点组成一个具有层次关系 ...

  10. BZOJ4036 HAOI2015按位或(概率期望+容斥原理)

    考虑min-max容斥,改为求位集合内第一次有位变成1的期望时间.求出一次操作选择了S中的任意1的概率P[S],期望时间即为1/P[S]. 考虑怎么求P[S].P[S]=∑p[s] (s&S& ...