7.0难度系数★☆☆☆☆☆☆

7.1硬件截图

7.1.1 PCB上的位置

7.1.1 PCB上的位置

7.2电路分析

本次实验用到的是LD_A0~LD_A3,管脚定义如下表所示。

LD_A0:F17

LD_A1:J15

LD_A2:G14

LD_A3:D18

7.3 EMIO 和MIO的对比介绍

上次讲到MIO的使用,初步熟悉了EDK的使用,这次就来说说EMIO的使用。如你所见zynq的GPIO,分为两种,MIO(multiuse I/O)和EMIO(extendable multiuse I/O)

MIO分配在bank0和bank1直接与PS部分相连,EMIO分配在bank2和接和PL部分相连。除了bank1是22-bit之外,其他的bank都是32-bit。所以MIO有53个引脚可供我们使用,而EMIO有64个引脚可供我们使用。

使用EMIO的好处就,当MIO不够用时,PS可以通过驱动EMIO控制PL部分的引脚,接下来就来详细介绍下EMIO的使用。

EMIO的使用和MIO的使用其实是非常相似的。区别在于,EMIO的使用相当于,是一个PS + PL的结合使用的例子。所以,EMIO需要分配引脚,以及编译综合生成bit文件。

7.4 ZYNQ核的添加及配置

Step1:新建一个名为为Miz701_sys的工程

Step2:选择RTL Project 勾选Do not specify source at this time

Step3:选择芯片型号xc7z010clg400-1

Step4:单击Finish

7.5使用IP Integrator创建硬件系统

Step1:单击Create Block Design

Step2:输入system

Step3:单击下图中添加IP按钮

Step4:搜素单词z选择ZYNQ7 Processing System,然后双击

Step5:添加进来了ZYNQ CPU IP,双击ZYNQ CPU IP。

Step6: 修改时钟输入为50MHZ,可以看到ARM时钟为650MHZ DDR为525MHZ(1050MHZ),并且修改FCLK_CLK0 为100MHZ

step7:修改内存型号为MT41K256M16RE-125 M,单击OK。

Setp8:选择MIO Configuration选项卡,再看到I/O Peripherals 中的GPIO一栏,勾选上其中的EMIO一栏,并选择4位引脚输出(最多可以选择64位,但是这个使用只需要4位足够了)。

Setp10:按照上图设置好了之后,点击OK,仔细观察发现的zynq核心多出一组引脚名为GPIO_0,这个正是我们刚刚设置的一组EMIO,我们右击该引脚,选择make external把GPIO_0引脚引出(或者单击该引脚处,按快捷键Ctrl +t,也可以将引脚引出)。效果如下图所示:

step11::单击Run Block Automation 进行自动连线,VIVADO软件会根据信号的命名规则智能连线。

Step12:在你点击了OK后,你会发现DDR以及FICED_IO自动的延伸出来,然后把时钟FCLK_CLK0和M_AXI_GPI0_ACLK连接,其实就是给M_AXI_GP0_ACLK提供一个时钟。方法:当把鼠标靠近的时候会自动连接。

7.6产生HDL和约束文件

Setp1:接下来依然是,右键单击Block文件,文件选择Generate the Output Products,是文件得到一定的约束

Setp2:弹出如下对话框,直接点击Generate

Setp3:继续右键单击Block文件,选择Create a HDL wrapper,根据Block文件内容产生一个HDL 的顶层文件:

Setp4:并选择让vivado自动完成

Setp5:这里我们看到,Vivado给我创建了这样的顶层文件,其中的gpio_0_tri_io就是我们配置的EMIO

7.7 EMIO的管脚约束修改

我们发现,之前引出的EMIO叫做GPIO_0,到了顶层他的名字gpio_0_tri_io,而不是GPIO_0。所以分配引脚的时候就要注意了名字别错了,创建一个约束文件,分配引脚如下:

set_property PACKAGE_PIN  F17  [get_ports {gpio_0_tri_io[0]}]

set_property IOSTANDARD LVCMOS33 [get_ports {gpio_0_tri_io[0]}]

set_property PACKAGE_PIN  J15  [get_ports {gpio_0_tri_io[1]}]

set_property IOSTANDARD LVCMOS33 [get_ports {gpio_0_tri_io[1]}]

set_property PACKAGE_PIN  G14  [get_ports {gpio_0_tri_io[2]}]

set_property IOSTANDARD LVCMOS33 [get_ports {gpio_0_tri_io[2]}]

set_property PACKAGE_PIN  D18  [get_ports {gpio_0_tri_io[3]}]

set_property IOSTANDARD LVCMOS33 [get_ports {gpio_0_tri_io[3]}]

7.8 产生bit文件

此时可以,开始生成bit文件了:

7.9 导出bit文件

编译成功之后,依然是导出硬件:

7.10加载到SDK

打开SDK,然后新建一个工程,以及添加一个main.C文件,具体过程参考前面章节。

添加程序如下:

#include <stdio.h>

#include "xgpiops.h"

#include "sleep.h"

int main()

{

static XGpioPs psGpioInstancePtr;

XGpioPs_Config* GpioConfigPtr;

int iPinNumber= 54; //想想为什么是54

u32 uPinDirection = 0x1; //1表示输出,0表示输入

int xStatus;

//--MIO的初始化

    GpioConfigPtr = XGpioPs_LookupConfig(XPAR_PS7_GPIO_0_DEVICE_ID);

if(GpioConfigPtr == NULL)

return XST_FAILURE;

xStatus = XGpioPs_CfgInitialize(&psGpioInstancePtr,GpioConfigPtr, GpioConfigPtr->BaseAddr);

if(XST_SUCCESS != xStatus)

print(" PS GPIO INIT FAILED \n\r");

//--MIO的输入输出操作

     XGpioPs_SetDirectionPin(&psGpioInstancePtr, iPinNumber,uPinDirection);//配置IO输出方向

XGpioPs_SetOutputEnablePin(&psGpioInstancePtr, iPinNumber,1);//配置IO的输出

while(1)

{

XGpioPs_WritePin(&psGpioInstancePtr, iPinNumber, 1);//输出1

sleep(1);//延时

XGpioPs_WritePin(&psGpioInstancePtr, iPinNumber, 0);//输出0

sleep(1);//延时

}

    return 0;

}

我们发现,驱动EMIO和MIO基本是一模一样的,唯一不同的地方就是iPinNumber此时的数字是54,上一节中是7。

再次看到这张图:

应为MIO和EMIO是同一编号的MIO共54个,从0~53。而从54开始就开始是EMIO了的范围了。之前我们应出了8个引脚gpio_0_tri_io[0]~gpio_0_tri_io[7],他们其实就依次对应54~61这几个序号,同时也对应了我们开发板上的8个LED(这是引脚约束的结果)。

你可以把iPinNumber的值从54换成55试试,看看实验结果有什么不同。

Ctrl + B编译通过后(软件默认设置是自动编译,即修改了源代码保存后就自动编译)

7.11 SDK环境下载bit文件

连接下载器,通过SDK先下载bit文件到开发板:

7.12 SDK下启动调试

然后,直接调试,就能看到你的EMIO控制的LED开始闪烁了。

7.13 实验效果

可以看到LD0一闪一闪

7.14 本章小结

通过本章的学习,我们掌握了在MIO不够使用的情况下,通过PL部分扩展EMIO增加IO的使用量。并且通过一个简单的例子演示了如果添加EMIO IP 并且启动SDK 通过JTAG下载调试的方法。

第七章 ZYNQ-MIZ701 GPIO使用之EMIO的更多相关文章

  1. 第七章Bulk设备

    小川工作室编写,本书为LM3S的USB芯片编写,上传的均为草稿,还有没修改,可能还有很多地方不足,希望各位网友原谅! QQ:2609828265 TEL:15882446438 E-mail:paul ...

  2. 精通Web Analytics 2.0 (9) 第七章:失败更快:爆发测试与实验的能量

    精通Web Analytics 2.0 : 用户中心科学与在线统计艺术 第七章:失败更快:爆发测试与实验的能量 欢迎来到实验和测试这个棒极了的世界! 如果Web拥有一个超越所有其他渠道的巨大优势,它就 ...

  3. 《Entity Framework 6 Recipes》中文翻译系列 (38) ------ 第七章 使用对象服务之动态创建连接字符串和从数据库读取模型

    翻译的初衷以及为什么选择<Entity Framework 6 Recipes>来学习,请看本系列开篇 第七章 使用对象服务 本章篇幅适中,对真实应用中的常见问题提供了切实可行的解决方案. ...

  4. 《Entity Framework 6 Recipes》中文翻译系列 (41) ------ 第七章 使用对象服务之标识关系中使用依赖实体与异步查询保存

    翻译的初衷以及为什么选择<Entity Framework 6 Recipes>来学习,请看本系列开篇 7-7  标识关系中使用依赖实体 问题 你想在标识关系中插入,更新和删除一个依赖实体 ...

  5. Java语言程序设计(基础篇) 第七章 一维数组

    第七章 一维数组 7.2 数组的基础知识 1.一旦数组被创建,它的大小是固定的.使用一个数组引用变量,通过下标来访问数组中的元素. 2.数组是用来存储数据的集合,但是,通常我们会发现把数组看作一个存储 ...

  6. objective-c第七章课后练习2

    题:改变第七章例子中print方法,增加bool参数,判断如果是YES则对分数进行约简 @interface Fraction : NSObject { //int num,den; } @prope ...

  7. 读《编写可维护的JavaScript》第七章总结

      第七章 事件处理 7.1 典型用法 作者首先给了个我们一个处理事件的方法.看起来也没啥俩样,不过后来给出的优化方法很值得学习: // 不好的写法 function handleClick(even ...

  8. 第七章 LED将为我们闪烁:控制发光二极管

     第七章 LED将为我们闪烁:控制发光二极管 本章我们将会看到一个完整的linux驱动程序,通过linux驱动程序控制LED的四个小灯,通俗的说就是通过向linux驱动程序来控制LED小灯的开关.用到 ...

  9. Getting Started With Hazelcast 读书笔记(第七章)

    第七章 部署策略 Hazelcast具有适应性,能根据不同的架构和应用进行特定的部署配置,每个应用可以根据具体情况选择最优的配置: 数据与应用紧密结合的模式(重点,of就是这种) 胖客户端模式(最好用 ...

随机推荐

  1. CF1217B

    CF1217B 题意: 有一个有 $ x $ 个头的龙,你有 $ n $ 种方案,每种方案中包含你可以砍掉的头 $ d_i $ 和龙会生长的头 $ h_i $ 找到一种方案,使得操作数最少. 解法: ...

  2. windows环境下启动mongodb服务

    方法一1.打开命令窗口,切换到mongodb安装目录下的“bin”目录中. 输入命令:cd E:\software\MongoDB\Server\3.4\bin 2.启动服务.输入命令:”mongod ...

  3. 计算机中buffer和cache的理解

    Linux中Buffer和Cache的区别 Cache 和 Buffer的区别 作者:知乎用户链接:https://www.zhihu.com/question/26190832/answer/323 ...

  4. 感知机和BP神经网络

    一.感知机 1.感知机的概念 感知机是用于二分类的线性分类模型,其输入是实例的特征向量,输出是实例的类别,类别取+1和-1二个值,+1代表正类,-1代表负类.感知机对应于输入空间(特征空间)中将实例分 ...

  5. docker swarm和 k8s对比

    Swarm的优势:swarm API兼容docker API,使得swarm 学习成本低,同时架构简单,部署运维成本较低.Swarm的劣势:同样是因为API兼容,无法提供集群的更加精细的管理.在网络方 ...

  6. <JavaScript> 稳妥构造函数模式与工厂模式的区别

    稳妥构造函数模式的代码应该是这样的: function Person(name, age, job) { var o = new Object(); // private members var na ...

  7. BitmapDrawable

    对Bitmap的一种封装,可以设置它包装的bitmap在BitmapDrawable区域中的绘制方式,有: 平铺填充,拉伸填或保持图片原始大小!以<bitmap>为根节点! 可选属性如下: ...

  8. C之枚举

    #include<stdio.h>#include<stdlib.h>enum WeekDay{ Monday,Tuesday,Wednesday,Thursday,Frida ...

  9. CentOS7使用yum安装mysql5.7

    提前说一下,网速不好不要用yum安装,等得时间太长. 第一步.获取yum源 [root@youxi1 ~]# rpm -ivh https://repo.mysql.com/yum/mysql-5.7 ...

  10. centos下如何关闭xdebug扩展

    因为只要加载XDEBUG都会导致系统太慢,所以只有在需要调试系统程序的时候才加载XDEBUG扩展.平时一定要把它给注释掉. 只需要在php.ini文件中注释掉xdebug即可. 即: 前面加一个分号即 ...