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 \n\r");
//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调试代码

 

 至此,基本搞定

posted @ 2019-02-13 10:59  606  阅读(1647)  评论(0编辑  收藏  举报