xilinx-zynq教程2-MIO

zynq-MIO

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

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

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

打开工程,打开原理图

设置MIO输出

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

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

首先把工程综合一下

然后打开设计

输出文件

 

生成bit文件

导出硬件

启动SDK

新建工程

新建main.c文件

这是代码


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

int main()
{

static XGpioPs psGpioInstancePtr;
XGpioPs_Config* GpioConfigPtr;

int iPinNumber = 7;
u32 uPinDirection = 0x1;
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);//配置MIO输出方向
XGpioPs_SetOutputEnablePin(&psGpioInstancePtr,iPinNumber,1);//配置MIO的第7位输出

// while(1)
// {
// XGpioPs_WritePin(&psGpioInstancePtr,iPinNumber,1);//MIO第7位输出1
// usleep(500000);
// XGpioPs_WritePin(&psGpioInstancePtr,iPinNumber,0);//MIO第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;

}

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

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

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

打开工程,打开原理图

设置MIO输出

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

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

首先把工程综合一下

然后打开设计

输出文件

 

生成bit文件

导出硬件

启动SDK

新建工程

新建main.c文件

这是代码


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

int main()
{

static XGpioPs psGpioInstancePtr;
XGpioPs_Config* GpioConfigPtr;

int iPinNumber = 7;
u32 uPinDirection = 0x1;
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);//配置MIO输出方向
XGpioPs_SetOutputEnablePin(&psGpioInstancePtr,iPinNumber,1);//配置MIO的第7位输出

// while(1)
// {
// XGpioPs_WritePin(&psGpioInstancePtr,iPinNumber,1);//MIO第7位输出1
// usleep(500000);
// XGpioPs_WritePin(&psGpioInstancePtr,iPinNumber,0);//MIO第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;

}

猜你喜欢

转载自www.cnblogs.com/wojiaxiaoguo/p/10368488.html