硬件平台:黑金AXU3EG
软件平台:vivado2020.1 vitis2020.1
完成配置 选OK 在Diagram窗口中可以看到已经多了一个GPIO
选中端口 点击鼠标右键 选择Make External
在External Interface Properties 可以更改GPIO名称
Ctrl+S 保存设计
生成顶层HDL
生成Bitstream文件
对话框有OK点OK YES 点YES
完成后Ctrl+S保存管脚约束 在弹出的对话框中输入XDC文件名之后OK
生成bitstream文件 生成后弹出对话框选择如下图
可以选择查看资源使用报告
导出硬件
至此vivado部分结束
通过生成的XSA文件创建VITIS工程
使用PL端扩展的EMIO引脚 引脚号 查看使用手册推断 Pin78
MIO到77 第一个EMIO为78
代码实现PL端按键控制PS端LED
PL扩展的EMIO与MIO用法一致
#include "xparameters.h" //器件参数信息
#include "xgpiops.h" //包含PS GPIO的函数声明
#include "xstatus.h" //包含XST_FAILURE和XST_SUCCESS的宏定义
#include <xil_printf.h> //包含print()函数
#include "sleep.h" //sleep()函数
#define GPIO_DEVICE_ID XPAR_XGPIOPS_0_DEVICE_ID //定义器件ID号
#define PS_LED1 40 //PS端LED宏定义
#define PL_KEY 78 //PL端按键宏定义
XGpioPs PS_Gpio; //GPIO设备的驱动程序实例
int main(void)
{
int Status;
XGpioPs_Config *ConfigPtr; //设备配置信息结构体指针
print("EMIO test \r\n");
//查询设备器件ID号
ConfigPtr = XGpioPs_LookupConfig(GPIO_DEVICE_ID);
//XGpioPs_CfgInitialize 为PS端GPIO初始化函数 返回值为XST_FAILURE 和 XST_SUCCESS
Status = XGpioPs_CfgInitialize(&PS_Gpio, ConfigPtr,
ConfigPtr->BaseAddr);
if(Status != XST_SUCCESS)
{
return XST_FAILURE;
}
//设置LED引脚方向 LED为输出
XGpioPs_SetDirectionPin(&PS_Gpio, PS_LED1, 1);
//设置指定引脚的输出使能
XGpioPs_SetOutputEnablePin(&PS_Gpio, PS_LED1, 1);
//设置PL_KEY引脚为输入
XGpioPs_SetDirectionPin(&PS_Gpio, PL_KEY, 0);
while(1)
{
if(XGpioPs_ReadPin(&PS_Gpio,PL_KEY) == 0)
{
usleep(10000); //消抖
XGpioPs_WritePin(&PS_Gpio, PS_LED1,1);
}
else
{
usleep(10000);
XGpioPs_WritePin(&PS_Gpio, PS_LED1, 0);
}
}
//返回值为XGpioPs 实例/驱动程序初始化状态值
return XST_SUCCESS;
}