zoukankan      html  css  js  c++  java
  • xilinx-zynq教程3-EMIO

     zynq-EMIO

    本教程不是商业教程,只是自己学习时,希望记录下来,可以反复查看学习,以免忘记。

    此次是希望IO输出高电平,点亮LED灯

    工程还用之前上一节创建的工程,可以新建个文件夹,把工程拷贝过来。

    打开工程,打开原理图

    设定EMIO输出,输出8个引脚

    输出前,先reset

    输出文件

    需设定引脚约束,有两种方法,一种是新建xdc文件,自己写引脚约束的代码,另一种是图形界面

    在此介绍图形界面,其实图形界面设定完后,就输出了有引脚约束代码的xdc文件

    首先把工程综合一下

    打开设计

    方法二,新建xdc文件

    写入约束引脚代码

    代码如下

    set_property PACKAGE_PIN T22 [get_ports {GPIO_0_0_tri_io[7]}]

    set_property PACKAGE_PIN T21 [get_ports {GPIO_0_0_tri_io[6]}]
    set_property PACKAGE_PIN U22 [get_ports {GPIO_0_0_tri_io[5]}]
    set_property PACKAGE_PIN U21 [get_ports {GPIO_0_0_tri_io[4]}]
    set_property PACKAGE_PIN V22 [get_ports {GPIO_0_0_tri_io[3]}]
    set_property PACKAGE_PIN W22 [get_ports {GPIO_0_0_tri_io[2]}]
    set_property PACKAGE_PIN U19 [get_ports {GPIO_0_0_tri_io[1]}]
    set_property PACKAGE_PIN U14 [get_ports {GPIO_0_0_tri_io[0]}]
    set_property IOSTANDARD LVCMOS33 [get_ports {GPIO_0_0_tri_io[7]}]
    set_property IOSTANDARD LVCMOS33 [get_ports {GPIO_0_0_tri_io[6]}]
    set_property IOSTANDARD LVCMOS33 [get_ports {GPIO_0_0_tri_io[5]}]
    set_property IOSTANDARD LVCMOS33 [get_ports {GPIO_0_0_tri_io[4]}]
    set_property IOSTANDARD LVCMOS33 [get_ports {GPIO_0_0_tri_io[3]}]
    set_property IOSTANDARD LVCMOS33 [get_ports {GPIO_0_0_tri_io[2]}]
    set_property IOSTANDARD LVCMOS33 [get_ports {GPIO_0_0_tri_io[1]}]
    set_property IOSTANDARD LVCMOS33 [get_ports {GPIO_0_0_tri_io[0]}]

    生成bit文件

    删除之前的SDK

    导出文件

    启动SDK

    新建工程

    写入代码

    代码如下

    /*
    * main.c
    *
    * Created on: 2019年2月13日
    * Author: gqj
    */

    #include "xgpiops.h"
    #include "sleep.h"

    int main()
    {

    static XGpioPs psGpioInstancePtr;
    XGpioPs_Config* GpioConfigPtr;


    int xStatus;
    // emio初始化
    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 ");
    //emio输入输出操作
    XGpioPs_SetDirectionPin(&psGpioInstancePtr,54,1);//配置EMIO输出方向
    XGpioPs_SetDirectionPin(&psGpioInstancePtr,55,1);//配置EMIO输出方向
    XGpioPs_SetDirectionPin(&psGpioInstancePtr,56,1);//配置EMIO输出方向
    XGpioPs_SetDirectionPin(&psGpioInstancePtr,57,1);//配置EMIO输出方向
    XGpioPs_SetDirectionPin(&psGpioInstancePtr,58,1);//配置EMIO输出方向
    XGpioPs_SetDirectionPin(&psGpioInstancePtr,59,1);//配置EMIO输出方向
    XGpioPs_SetDirectionPin(&psGpioInstancePtr,60,1);//配置EMIO输出方向
    XGpioPs_SetDirectionPin(&psGpioInstancePtr,61,1);//配置EMIO输出方向

    XGpioPs_SetOutputEnablePin(&psGpioInstancePtr,54,1);//配置EMIO输出使能
    XGpioPs_SetOutputEnablePin(&psGpioInstancePtr,55,1);//配置EMIO输出使能
    XGpioPs_SetOutputEnablePin(&psGpioInstancePtr,56,1);//配置EMIO输出使能
    XGpioPs_SetOutputEnablePin(&psGpioInstancePtr,57,1);//配置EMIO输出使能
    XGpioPs_SetOutputEnablePin(&psGpioInstancePtr,58,1);//配置EMIO输出使能
    XGpioPs_SetOutputEnablePin(&psGpioInstancePtr,59,1);//配置EMIO输出使能
    XGpioPs_SetOutputEnablePin(&psGpioInstancePtr,60,1);//配置EMIO输出使能
    XGpioPs_SetOutputEnablePin(&psGpioInstancePtr,61,1);//配置EMIO输出使能

    while(1)
    {
    XGpioPs_WritePin(&psGpioInstancePtr,54,1);//EMIO第0位输出1
    usleep(500000);
    XGpioPs_WritePin(&psGpioInstancePtr,54,0);//EMIO第0位输出0
    usleep(500000);

    XGpioPs_WritePin(&psGpioInstancePtr,55,1);//EMIO第1位输出1
    usleep(500000);
    XGpioPs_WritePin(&psGpioInstancePtr,55,0);//EMIO第1位输出0
    usleep(500000);

    XGpioPs_WritePin(&psGpioInstancePtr,56,1);//EMIO第2位输出1
    usleep(500000);
    XGpioPs_WritePin(&psGpioInstancePtr,56,0);//EMIO第2位输出0
    usleep(500000);

    XGpioPs_WritePin(&psGpioInstancePtr,57,1);//EMIO第3位输出1
    usleep(500000);
    XGpioPs_WritePin(&psGpioInstancePtr,57,0);//EMIO第3位输出0
    usleep(500000);

    XGpioPs_WritePin(&psGpioInstancePtr,58,1);//EMIO第4位输出1
    usleep(500000);
    XGpioPs_WritePin(&psGpioInstancePtr,58,0);//EMIO第4位输出0
    usleep(500000);

    XGpioPs_WritePin(&psGpioInstancePtr,59,1);//EMIO第5位输出1
    usleep(500000);
    XGpioPs_WritePin(&psGpioInstancePtr,59,0);//EMIO第5位输出0
    usleep(500000);

    XGpioPs_WritePin(&psGpioInstancePtr,60,1);//EMIO第6位输出1
    usleep(500000);
    XGpioPs_WritePin(&psGpioInstancePtr,60,0);//EMIO第6位输出0
    usleep(500000);

    XGpioPs_WritePin(&psGpioInstancePtr,61,1);//EMIO第7位输出1
    usleep(500000);
    XGpioPs_WritePin(&psGpioInstancePtr,61,0);//EMIO第7位输出0
    usleep(500000);
    }
    // while(1)
    // {
    //
    //// XGpioPs_WriteReg(InstancePtr->GpioConfig.BaseAddr,
    //// ((u32)(Bank) * XGPIOPS_REG_MASK_OFFSET) +
    //// XGPIOPS_OUTEN_OFFSET, OpEnable);
    // XGpioPs_WriteReg(0xE000A000,0x00000000, 0xFF7FFFFF&0xFFFF0080);
    // usleep(500000);
    // XGpioPs_WriteReg(0xE000A000,0x00000000, 0xFF7FFFFF&0xFFFF0000);
    // usleep(500000);
    // }


    return 0;

    }

    使用debug调试代码

     至此,基本搞定

  • 相关阅读:
    Maven 简单配置gpg
    航天七三一医院护理电子病历的设计与实施
    境外聚合支付中,微信和支付宝的不同理念
    技术人员如何面试?
    跨境支付中的“灰色”产业链
    用ionic快速开发hybird App(已附源码,在下面+总结见解)
    离职有感(CVTE,创业公司,求职...)
    Objective C ARC 使用及原理
    iOS开发阶段技能总结
    ubuntu12.04 gitlab搭建
  • 原文地址:https://www.cnblogs.com/wojiaxiaoguo/p/10368678.html
Copyright © 2011-2022 走看看