005-Zynq基操之如何去玩EMIO接口(走过路过千万不要错过)

文章目录

  • 前言
  • 一、EMIO是啥含义
  • 二、两种EMIO的使用
    • 1.PS端外设引出来的EMIO
    • 2.正常的EMIO口
    • 3.PS端驱动源码
  • 总结


前言

今天分享这个主要原因是,把最基础的EMIO接口弄清楚咋操作的,咱们就可以做一些由PS端控制PL端的器件小功能,最常见的就是我们驱动某些图像传感器时,需要配置一些信号啥的,包括复位信号,休眠信号这些(对,我说的就是你,ov5640的rst和pwdn信号),学会了最基础的操作,用你聪明的小脑壳去拓展一下,多玩玩你就熟悉了。


一、EMIO是啥含义

网上一大堆对于EMIO接口的介绍,话不多说,我直接给出自己的理解。Zynq它分为PL和PS两大单元,PS其实是主要的控制单元,PL你可以看作是挂载到PS上的一个外设,专门用来做一些数据量比较大的、需要并行进行处理的工作。而PS其实跟我们的单片机差不多,带有浮点数运算,做一些对速度、实时性没什么要求的操作。

它这个PS上面引出来的接口中,有两个接口分别是MIO接口和EMIO接口,这两个整体就被称之为GPIO口。那么MIO接口其实它是固定在PS上面的,它是没有办法被映射到PL上面去的,你可以认做它是属于PS的专用接口。而EMIO不同,我觉得它就是一个外部接口,它可以被配置并且被映射到PL端去,具体怎么被映射,其实就是你在Zynq核里面把EMIO接口配置好,然后把这个接口从bd里面引出来,再到PL端的v文件把这个引脚例化出来即可。

EMIO和MIO接口都属于GPIO接口,各自有对应的引脚号,其中MIO引脚号是0-53,EMIO是54-117号引脚

二、两种EMIO的使用

1.PS端外设引出来的EMIO

我们的接口其实是可以配置成很多功能的,比如I2C,比如UART。这两种比较通用的接口就可以配置成EMIO接口输出,由于这都是直接引用的PS端代码去进行驱动的,我们只需要在PS端去写入数据即可,然后把这个引出来的EMIO接口在PL端进行例化,跟你的外设对应好。比如你如果PL端弄了一个串口,那么你就可以把tx和rx两个接口通过EMIO接口引出去,然后约束成你串口对应的引脚号,这样你PS端发送的数据就可以通过PL端的串口输出了。
在这里插入图片描述
具体就是在MIO Configuration里面将想要输出的外设口勾选,并且把MIO的接口改成EMIO接口,这样你的接口才能顺利导出到PL端。
在这里插入图片描述
在bd里面将这几个接口make external即可,这种接口一般只需要跟我们外部驱动的引脚连接在一起即可,将bd文件例化后添加到我们的顶层文件中,配置好管脚信号的约束即可。其余如果想驱动这几个管脚的话只需要在PS端进行操作,比如你串口在PL端,那么只需要在PS端操作xil_printf这个函数即可。
在这里插入图片描述

2.正常的EMIO口

另外一种EMIO口就是我们专门去设置并且引出来,同样是MIO_Configuration,我们找到GPIO口对应的地方,同时勾选EMIO GPIO,选择位宽为2位(因为此处设计是ov5640的rst和pwdn引脚),点击勾选ok以后即可。
在这里插入图片描述
cmos_control引脚就是我们要引出的cmos控制信号,我们在bd里面可以例化出来。
在这里插入图片描述
我喜欢的例化方式是通过位拼接去例化,因为这里面带着我要驱动的两个信号,例化的格式是高位在前,低位在后。因为EMIO口对应引脚号54-117,故cmos_rstn这个信号就是54引脚号,cmos_pwdn是55引脚号。
在这里插入图片描述

3.PS端驱动源码

完成了例化以后,我们就可以打开PS端了,可以直接新建一个c和h文件,名字您随意,代码我附在下面
在GPIO的c文件中,我们只需要改动XGpioPs_SetDirectionPin和XGpioPs_SetOutputEnablePin函数,其中前者是设置我们接口的方向,1代表输出,0代表输入。后者是使能我们的端口,1是使能,0是不使能。rstn和pwdn都在GPIO的h文件中定义了。

#include "gpio.h"
int PsGpioSetup()
{
	XGpioPs_Config *GPIO_CONFIG ;
	int Status ;
	GPIO_CONFIG = XGpioPs_LookupConfig(XPAR_XGPIOPS_0_DEVICE_ID) ;
	Status = XGpioPs_CfgInitialize(&Gpio, GPIO_CONFIG, GPIO_CONFIG->BaseAddr) ;
	if (Status != XST_SUCCESS)
	{
		return XST_FAILURE ;
	}
	XGpioPs_SetDirectionPin(&Gpio, rstn, 1) ;
	XGpioPs_SetOutputEnablePin(&Gpio, rstn, 1);
	XGpioPs_SetDirectionPin(&Gpio, pwdn, 1) ;
	XGpioPs_SetOutputEnablePin(&Gpio, pwdn, 1);
	return XST_SUCCESS ;
}

#ifndef _GPIO_H_
#define _GPIO_H_
#include "xgpiops.h"
#define rstn	54
#define pwdn	55
XGpioPs Gpio;
int PsGpioSetup() ;
#endif 

在我们的主函数中进行调用即可,格式如下面的代码所示,这样就可以对rstn和pwdn进行配置了。

	PsGpioSetup() ;
	XGpioPs_WritePin(&Gpio, rstn, 0) ;//cmos_rstn
	usleep(10000);
	XGpioPs_WritePin(&Gpio, pwdn, 0) ;//cmos_pwdn
	usleep(1000000);
	XGpioPs_WritePin(&Gpio, rstn, 1) ;//复位成功,正式进行配置
	usleep(1000000);

总结

今天晚上本来点卤肉饭来着,结果店家说没有了,给我换了猪脚饭,味道还可以,就是肉稍微肥了一点,配上一杯酸梅汁儿,味道真不错。人生三大乐事,写代码,健身,吃饭

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/301331.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

SqueezeNet:通过紧凑架构彻底改变深度学习

一、介绍 在深度学习领域,对效率和性能的追求往往会带来创新的架构。SqueezeNet 是神经网络设计的一项突破,体现了这种追求。本文深入研究了 SqueezeNet 的复杂性,探讨其独特的架构、设计背后的基本原理、应用及其对深度学习领域的影响。 在创…

vue项目中的录屏插件recordrtc且带声音

vue项目中的录屏插件recordrtc且带声音 一、效果图二、安装插件三、直接上代码 一、效果图 其中窗口录屏不带声音&#xff0c;chrome标签和整个屏幕的录屏是带声音的 二、安装插件 npm i recordrtc 三、直接上代码 <template><div class"record-page">…

Qt优秀开源项目之二十:RedPanda-CPP(小熊猫C++)

小熊猫C是跨平台、轻量易用的开源C/C集成开发环境。 官网&#xff1a;http://royqh.net/redpandacpp github&#xff1a;https://github.com/royqh1979/RedPanda-CPP 小熊猫C&#xff08;原名小熊猫Dev-C 7)是基于Qt开发的Dev-C替代版本。和经典的Dev-C 5.11、新的Embarcadero …

Minio部署在服务器上,分享图片等文件提示,签名不对

问题描述: 上传没问题 下载没问题 就是分享有问题,签名有问题 找了很多解释,什么nginx代理问题啊,什么端口问题啊 什么防火墙问题啊 都是扯淡,一点用没有 最后发现,我的分享链接是127.0.0.1的地址,并不是我的服务器本机的地址 我访问图片都是要把ip改了再去访问,但是一开始并没…

C#,数值计算,求平方根之巴比伦算法(Babylonian algorithm)的源代码

平方根的巴比伦算法。 1 巴比伦算法介绍一 巴比伦算法可能算是最早的用于计算$sqrt{S}$的算法之一&#xff0c;因为其可以用牛顿法导出&#xff0c;因此在很多地方也被成为牛顿法。其核心思想在于为了计算x的平方根&#xff0c;可以从某个任意的猜测值g开始计算。在真实的运算…

【docker】centos 使用 Nexus Repository 搭建私有仓库

Nexus Repository 是一种流行的软件仓库管理工具&#xff0c;它可以帮助您搭建私有仓库&#xff0c;以便在内部网络或私有云环境中存储、管理和分发各种软件包和组件。 它常被用于搭建Maven的镜像仓库。本文演示如何用Nexus Repository搭建docker 私有仓库。 使用Nexus Repos…

【AIGC工具】我找到了使用大模型问答的最短路径!

大家好&#xff0c;我是豆小匠~ 好久没介绍提高效率的工具啦&#xff0c;这次来介绍一个UTools的骚操作&#xff0c;可以极速打开LLM进行提问&#xff01; 完成后的效果是&#xff1a; 快捷键调出输入框&#xff1b;2. 输入问题&#xff1b;3. 选择模型&#xff1b;4. 回车提…

基于单片机设计的智慧农业大棚检测系统

一、设计目标 本项目基于单片机设计一个智慧农业大棚检测系统&#xff0c;以提供实时监测和管理大棚环境的关键参数。系统支持环境温度、湿度检测&#xff0c;光照强度检测&#xff0c;并能根据预设的阀值进行报警提示。为了实现数据的显示和管理&#xff0c;该系统还利用Qt开…

【数据结构】队列

简单不先于复杂&#xff0c;而是在复杂之后。 文章目录 1. 队列1.1 队列的概念及结构1.2 队列的实现 2.栈和队列面试题3.概念选择题 1. 队列 1.1 队列的概念及结构 队列&#xff1a;只允许在一端进行插入数据操作&#xff0c;在另一端进行删除数据操作的特殊线性表&#xff0c…

Kibana错误【Kibana server is not ready yet】

docker部署kibana成功后&#xff0c;访问http://localhost:5601 ,页面返回“Kibana server is not ready yet” 运行 docker logs kibana 后提示 该错误提示为kibana的版本和es的版本不一致&#xff0c;将两个组件的版本更新一致即可 还有另外一种错误 在kibana的kibana.yml配…

本地部署 gemini-openai-proxy,使用 Google Gemini 实现 Openai API

本地部署 gemini-openai-proxy&#xff0c;使用Google Gemini 实现 Openai API 0. 背景1. 申请 Google Gemini API key2. (Optional)Google Gemini 模型说明3. gemini-openai-proxy Github 地址4. 本地部署 gemini-openai-proxy5. 测试 0. 背景 使用 Google Gemini 实现 Opena…

在pycharm中执行 os.makedirs 提示用户名或密码不正确

问题&#xff1a;在pycharm中运行脚本&#xff0c;在 \10.0.21.249\share 共享目录下创建目录提示错误 发现&#xff1a;手动在该目录下创建目录没有问题。 解决方法&#xff1a; 切换到cmd 命令行运行该脚本成功创建 猜测&#xff1a;感觉应该是pycharm中使用的用户名和密码存…

算法的复杂度分析

[王有志](https://www.yuque.com/wangyouzhi-u3woi/dfhnl0/hqrch62un0cc9sp2?singleDoc# 《&#x1f525;快来关注我》)&#xff0c;一个分享硬核Java技术的互金摸鱼侠加入Java人的提桶跑路群&#xff1a;[共同富裕的Java人](https://www.yuque.com/wangyouzhi-u3woi/dfhnl0/n…

C++CLI——4数组、泛型、集合与属性

CCLI——4数组、泛型、集合与属性 C数组 在c中&#xff0c;数组的大小必须在编译时确定&#xff0c;并且将数组传递给函数时&#xff0c;传递的只是数组起始地址&#xff0c;所以要想办法连同数组大小一同传递给函数。 int arr[4] { 1,2,3,4 }; int arr1[] { 1,2,3,4 }; i…

平仓是交易者功力的终极考验

这里的平仓主要针对盈利头寸的平仓&#xff0c;讨论了在什么情况下、如何平仓以使盈利最大化的问题。对于亏损头寸&#xff0c;反而更容易处理&#xff0c;只需在止损位将其平掉即可。开仓时需要考虑风险&#xff0c;平仓时则关注利润。所有风险都源于开仓&#xff0c;而所有利…

java火车查询管理系统Myeclipse开发mysql数据库web结构java编程计算机网页项目

一、源码特点 java Web火车查询管理系统是一套完善的java web信息管理系统&#xff0c;对理解JSP java编程开发语言有帮助&#xff0c;系统具有完整的源代码和数据库&#xff0c;系统主要采用B/S模式开发。开发环境为 TOMCAT7.0,Myeclipse8.5开发&#xff0c;数据库为Mysql…

Basal前端梳理

Basalt前端逻辑梳理 TBB安装参考 https://zhuanlan.zhihu.com/p/480823197 代码注释参考 https://blog.csdn.net/qq_39266065/article/details/106175701#t7 光流追踪参考 https://blog.csdn.net/weixin_41738773/article/details/130282527 VI Odometry KLT tracking 原理 …

【面试高频算法解析】算法练习2 回溯(Backtracking)

前言 本专栏旨在通过分类学习算法&#xff0c;使您能够牢固掌握不同算法的理论要点。通过策略性地练习精选的经典题目&#xff0c;帮助您深度理解每种算法&#xff0c;避免出现刷了很多算法题&#xff0c;还是一知半解的状态 专栏导航 二分查找回溯&#xff08;Backtracking&…

C++ 学习笔记之运算符重载+案例

目录 一、C 运算符重载 二、定义一个成员函数或全局函数 三、计算时间 1.计算时间差 2.时间加减 四、一个运算符重载实例 一、C 运算符重载 是一种特性&#xff0c;它允许程序员重新定义已有的运算符的行为&#xff0c;以适应自定义类型的操作。通过运算符重载&#xff0…

LDD学习笔记 -- Linux字符设备驱动

LDD学习笔记 -- Linux字符设备驱动 虚拟文件系统 VFS设备号相关Kernel APIs动态申请设备号动态创建设备文件内核空间和用户空间的数据交换系统调用方法readwritelseek 写一个伪字符设备驱动在主机上测试pcd(HOST)在目标板上测试pcd(TARGET) 字符驱动程序用于与Linux内核中的设备…