zoukankan      html  css  js  c++  java
  • ZYNQ学习之二-EMIO

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

    本次试验学习和掌握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 ");
    //配置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口了。

  • 相关阅读:
    spring cloud 专题二(spring cloud 入门搭建 之 微服务搭建和注册)
    spring cloud 专题一 (spring cloud 入门搭建 之 Eureka注册中心搭建)
    mysql存储过程查询结果循环遍历 判断 赋值 游标等基本操作
    Jquery datatable 动态隐藏列(根据有无值)
    spring boot无法启动,或者正常启动之后无法访问报404的解决办法
    通过js给网页加上水印背景
    jdk动态代理原理
    关于loadrunner使用web_add_header添加HTTP信息头(比如Content-Type,token等)和使用
    IP路由及静态路由配置
    安装ie时,报:此安装不支持您的操作系统的当前语言
  • 原文地址:https://www.cnblogs.com/mouou/p/6213984.html
Copyright © 2011-2022 走看看