Zynq emio总结

还是上个图,BANK0BANK154MIOBANK2BANK364EMIO

想要使用EMIO就需要PS+PL两部分结合,EMIO需要引脚分配。

  以下以zturn 开发板控制RED三色为实验。

1. 硬件搭建

硬件主要配置EMIO以及DDR,同时进行对应的管脚约束。

Zynq emio总结

形成的系统结构如下图所示。

Zynq emio总结

1. 软件编程

 

#include "xgpiops.h"

#include "sleep.h"

 

int main()

{

static XGpioPs psGpioInstancePtr;

XGpioPs_Config* GpioConfigPtr;

int iPinNumber= 54; //第一个RGB_Led连接的是EMIO0

int iPinNumber1 = 55;//第一个RGB_Led连接的是EMIO1

int iPinNumber2 = 56;//第一个RGB_Led连接的是EMIO2

u32 uPinDirection = 0x1; //1表示输出,0表示输入

int xStatus;

 

//--MIO的初始化

GpioConfigPtr = XGpioPs_LookupConfig(XPAR_PS7_GPIO_0_DEVICE_ID);

if(GpioConfigPtr == NULL)

return XST_FAILURE;

if(XST_SUCCESS != xStatus)

print(" PS GPIO INIT FAILED \n\r");

//--MIO的输入输出操作

XGpioPs_SetDirectionPin(&psGpioInstancePtr, iPinNumber,uPinDirection);//配置EMIO0输出方向

XGpioPs_SetOutputEnablePin(&psGpioInstancePtr, iPinNumber,1);//配置EMIO0的第1位输出

 

XGpioPs_SetDirectionPin(&psGpioInstancePtr, iPinNumber1,uPinDirection);//配置EMIO1输出方向

XGpioPs_SetOutputEnablePin(&psGpioInstancePtr, iPinNumber1,1);//配置EMIO1的第1位输出

 

XGpioPs_SetDirectionPin(&psGpioInstancePtr, iPinNumber2,uPinDirection);//配置EMIO2输出方向

XGpioPs_SetOutputEnablePin(&psGpioInstancePtr, iPinNumber2,1);//配置EMIO2的第1位输出

 

while(1)

{

XGpioPs_WritePin(&psGpioInstancePtr, iPinNumber, 1);//熄灭EMIO0的输出1

XGpioPs_WritePin(&psGpioInstancePtr, iPinNumber1, 1);//熄灭EMIO1的输出1

XGpioPs_WritePin(&psGpioInstancePtr, iPinNumber2, 1);//熄灭EMIO2的输出1

usleep(500000); //延时

XGpioPs_WritePin(&psGpioInstancePtr, iPinNumber, 0);//点亮EMIO0的输出0

XGpioPs_WritePin(&psGpioInstancePtr, iPinNumber1, 0);//点亮EMIO1的输出0

XGpioPs_WritePin(&psGpioInstancePtr, iPinNumber2, 0);//点亮EMIO2的输出1

usleep(500000); //延时

}

   return 0;

}

 

    从以上程序看出,PS操作EMIO同控制MIO一样,只是有两点注意:(1)控制多少个EMIO都是从iPinNumber=54开始的,即第54位,而依靠硬件引脚映射完成;(2)控制EMIOMIO的灯相反,1是熄灭,0是点亮。

相关文章: