当前位置: 首页 > news >正文

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

或更底层的。

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

流程都是相似的:

  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 0;
}


//GPIOPS
#define GpioPsDeviceId XPAR_PS7_GPIO_0_DEVICE_ID
#define pin 0
int main()
{
    XGpioPs GpioPs;
    XGpioPs_Config *ConfigPtr;

    int Status;
    int value = 1;
        /* 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, 1);
    //value 0 -> disable   1 -> enable
    XGpioPs_SetOutputEnablePin(GpioPsPtr, pin0, 1);
        
    //write 
    XGpioPs_WritePin(&GpioPs, pin0, value);

    return 0;
}
        

 

 

 

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

 

转载于:https://www.cnblogs.com/protogenoi/p/9805418.html

相关文章:

  • bzoj 3027 [Ceoi2004]Sweet——生成函数
  • 将光源信息应用到立方体(一)
  • unity包内的内容读取
  • 栈和局部变量操作 将常量压入栈的指令
  • 将光源信息应用到立方体(二)
  • c++总结
  • DNS劫持
  • reflect vector
  • 113007
  • parallax mapping
  • 京东JData算法大赛高潜用户购买意向预测——复现(并没有),提供数据集
  • java 规范
  • 判定你的java应用是否正常(是否内存、线程泄漏)的一个简单方法
  • Java集合(本篇主要介绍List接口)
  • Shade4PointLights
  • [分享]iOS开发 - 实现UITableView Plain SectionView和table不停留一起滑动
  • [译]前端离线指南(上)
  • 【node学习】协程
  • Fabric架构演变之路
  • JavaScript DOM 10 - 滚动
  • Linux编程学习笔记 | Linux IO学习[1] - 文件IO
  • Promise面试题,控制异步流程
  • Swoft 源码剖析 - 代码自动更新机制
  • vue+element后台管理系统,从后端获取路由表,并正常渲染
  • 多线程事务回滚
  • 后端_MYSQL
  • 软件开发学习的5大技巧,你知道吗?
  • ​Kaggle X光肺炎检测比赛第二名方案解析 | CVPR 2020 Workshop
  • #我与Java虚拟机的故事#连载05:Java虚拟机的修炼之道
  • #中国IT界的第一本漂流日记 传递IT正能量# 【分享得“IT漂友”勋章】
  • %@ page import=%的用法
  • (day 12)JavaScript学习笔记(数组3)
  • (DenseNet)Densely Connected Convolutional Networks--Gao Huang
  • (Matalb回归预测)PSO-BP粒子群算法优化BP神经网络的多维回归预测
  • (仿QQ聊天消息列表加载)wp7 listbox 列表项逐一加载的一种实现方式,以及加入渐显动画...
  • (算法)N皇后问题
  • (译)2019年前端性能优化清单 — 下篇
  • (原創) 是否该学PetShop将Model和BLL分开? (.NET) (N-Tier) (PetShop) (OO)
  • (转)项目管理杂谈-我所期望的新人
  • .class文件转换.java_从一个class文件深入理解Java字节码结构
  • .net core 6 使用注解自动注入实例,无需构造注入 autowrite4net
  • .NET/C# 避免调试器不小心提前计算本应延迟计算的值
  • .NET/C# 编译期能确定的字符串会在字符串暂存池中不会被 GC 垃圾回收掉
  • .NET/C# 反射的的性能数据,以及高性能开发建议(反射获取 Attribute 和反射调用方法)
  • ::
  • @Autowired标签与 @Resource标签 的区别
  • @FeignClient 调用另一个服务的test环境,实际上却调用了另一个环境testone的接口,这其中牵扯到k8s容器外容器内的问题,注册到eureka上的是容器外的旧版本...
  • @Resource和@Autowired的区别
  • @zabbix数据库历史与趋势数据占用优化(mysql存储查询)
  • [ C++ ] STL---string类的模拟实现
  • [.net 面向对象程序设计进阶] (19) 异步(Asynchronous) 使用异步创建快速响应和可伸缩性的应用程序...
  • []利用定点式具实现:文件读取,完成不同进制之间的
  • [2016.7 test.5] T1
  • [ACL2022] Text Smoothing: 一种在文本分类任务上的数据增强方法
  • [BZOJ5125]小Q的书架(决策单调性+分治DP+树状数组)