---恢复内容开始---

本次试验学习和掌握zynq的emio的使用,是通过PS控制PL端的GPIO。 1、创建硬件工程,主要就是添加EMIO就可以。当然了创建工程的时候还要注意DDR的设置,根据自己板子的DDR设置相应的参数。依次设置如下参数:

这里设置了3个EMIO口,最多可以设置成64个,具体看应用而定。

设置DDR3参数

2、既然是PL端,那就必需有管脚约束文件了,添加一个管脚约束文件。在管脚约束文件xdc中添加PL的管脚映射。

到这里就有个问题来了,什么知道管脚映射到哪里呢。不着急,打开刚刚生成的顶层文件,在这个顶层文件中可以看到刚刚引出的EMIO的对应GPIO

看到gpio_0_tri_io[0]、gpio_0_tri_io[1]、gpio_0_tri_io[2]就是对应的EMIO的GPIO口,就是要链到PL的硬件管脚上去。管脚约束文件如下:

  set_property PACKAGE_PIN R14 [get_ports {gpio_0_tri_io[0]}]
  set_property PACKAGE_PIN Y17 [get_ports {gpio_0_tri_io[1]}]
  set_property PACKAGE_PIN Y16 [get_ports {gpio_0_tri_io[2]}]
  set_property IOSTANDARD LVCMOS33 [get_ports {gpio_0_tri_io[2]}]
  set_property IOSTANDARD LVCMOS33 [get_ports {gpio_0_tri_io[1]}]
  set_property IOSTANDARD LVCMOS33 [get_ports {gpio_0_tri_io[0]}]

完成以上步骤就可以编译生成bit文件了,到这里硬件就创建完成了。

2、导入SDK工程文件,并创建一个APP工程。应用程序如下:

#include <stdio.h>
#include "xgpiops.h"
#include "sleep.h"
int main()
{
static XGpioPs psGpioInstancePtr;
XGpioPs_Config* GpioConfigPtr;
int iPinNumber= 54; 
u32 uPinDirection = 0x1; //1表示输出,0表示输入
int xStatus;

//初始化
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");
//配置IO
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;
}

  下载到板子可以看到一个灯闪烁了。

问题又来了,int iPinNumber= 54; 为什么是54呢?因为PS端有了53的IO口,所以通过EMIO扩展的就从54开始,一定是从54开始的,如刚才设置了3个EMIO,那么这三个就对应54、55、56。在PL的顶层文件中有gpio_0_tri_io[0]、gpio_0_tri_io[1]、gpio_0_tri_io[2],那么对应的关系如下:

gpio_0_tri_io[0]->54

gpio_0_tri_io[1]->55

gpio_0_tri_io[2]->56

依次这样的对应关系。知道了这样的对应关系,就可以了自如的操作EMIO口了。

ZYNQ学习之二-EMIO的更多相关文章

  1. crawler4j 学习(二)

    crawler4j 学习(二) 实现控制器类以制定抓取的种子(seed).中间数据存储的文件夹.并发线程的数目: public class Controller { public static voi ...

  2. 从零开始学习jQuery (二) 万能的选择器

    本系列文章导航 从零开始学习jQuery (二) 万能的选择器 一.摘要 本章讲解jQuery最重要的选择器部分的知识. 有了jQuery的选择器我们几乎可以获取页面上任意的一个或一组对象, 可以明显 ...

  3. Android Animation学习(二) ApiDemos解析:基本Animators使用

    Android Animation学习(二) ApiDemos解析:基本Animatiors使用 Animator类提供了创建动画的基本结构,但是一般使用的是它的子类: ValueAnimator.O ...

  4. AspectJ基础学习之二搭建环境(转载)

    AspectJ基础学习之二搭建环境(转载) 一.下载Aspectj以及AJDT 上一章已经列出了他的官方网站,自己上去download吧.AJDT是一个eclipse插件,开发aspectj必装,他可 ...

  5. WPF的Binding学习笔记(二)

    原文: http://www.cnblogs.com/pasoraku/archive/2012/10/25/2738428.htmlWPF的Binding学习笔记(二) 上次学了点点Binding的 ...

  6. AJax 学习笔记二(onreadystatechange的作用)

    AJax 学习笔记二(onreadystatechange的作用) 当发送一个请求后,客户端无法确定什么时候会完成这个请求,所以需要用事件机制来捕获请求的状态XMLHttpRequest对象提供了on ...

  7. MyBatis学习系列二——增删改查

    目录 MyBatis学习系列一之环境搭建 MyBatis学习系列二——增删改查 MyBatis学习系列三——结合Spring 数据库的经典操作:增删改查. 在这一章我们主要说明一下简单的查询和增删改, ...

  8. MyBatis学习 之 二、SQL语句映射文件(2)增删改查、参数、缓存

    目录(?)[-] 二SQL语句映射文件2增删改查参数缓存 select insert updatedelete sql parameters 基本类型参数 Java实体类型参数 Map参数 多参数的实 ...

  9. MyBatis学习 之 二、SQL语句映射文件(1)resultMap

    目录(?)[-] 二SQL语句映射文件1resultMap resultMap idresult constructor association联合 使用select实现联合 使用resultMap实 ...

随机推荐

  1. Lae程序员小漫画(二),仅供一乐

    Lae软件开发,快乐程序员!

  2. sql server 里类似replace的字符串子串删除

     做如下替换: 将字符串asd#sdf#sdfsf中含# …# 形式的子串删除,写出sql语句   sql语句如下: UPDATE MM SET name =substring(name,0,CHAR ...

  3. tomcat 7.0 之文件配置

  4. texturepacker打包图片,场景切换时背景图有黑边

    在使用TexturePacker打包图片之后,背景图在场景切换(有切换动画)时,明显能看到有黑边,在百度之后解决了. 知乎上边有网友贴出了两种解决方法,我抄过来如下: 第一种: 修改 ccConfig ...

  5. 创建js对象的属性和方法

    按照如下的创建对象的方法,可以节省内存.记录一下方便日后使用 <!Doctype html><html> <head> <title></titl ...

  6. FPGA书籍

    Xilinx FPGA开发实用教程(第2版) 徐文波,田耘 著

  7. Node.JS 学习路线图

    转载自:http://www.admin10000.com/document/4624.html 从零开始nodejs系列文章, 将介绍如何利Javascript做为服务端脚本,通过Nodejs框架w ...

  8. LeetCode----Linked List

    Swap Nodes in Pairs 思路:需要构造一个头指针,指向链表.一次比较两个指针,将其翻转,临界条件是pre != null(链表长度为偶数) && pre.next != ...

  9. api接口签名验证

    由于http是无状态的,所以正常情况下在浏览器浏览网页,服务器都是通过访问者的cookie(cookie中存储的jsessionid)来辨别客户端的身份的,当客户端进行登录服务器也会将登录信息存放在服 ...

  10. 【python】遍历类的所有成员

    # -*- coding: utf-8 -*- #sharejs.com提供代码,转载请注明出处 class Site(object): def __init__(self): self.title ...