Zynq PS之MIO、EMIO调试

阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6


目录

​​原理框图​​

​​ Vivado中添加&配置Zynq UltraScale+ MPSoc IP​​

​​ UART设置(仅用于调试,非必需)​​

​​MIO、EMIO设置​​

​​DDR配置​​

​​ 执行Generate Output Products​​

​​执行Create HDL Wrapper​​

​​执行File -> Export ->Export Hardware​​

​​执行Launch SDK​​

​​新建FSBL工程​​

​​新建Hello World工程​​


原理框图

本文用于点亮PS MIO52和PL L15接的LED灯。

Zynq PS之MIO、EMIO调试_EMIO

 Vivado中添加&配置Zynq UltraScale+ MPSoc IP

Zynq PS之MIO、EMIO调试_ZYNQ_02

 UART设置(仅用于调试,非必需)

Zynq PS之MIO、EMIO调试_调试_03

MIO、EMIO设置

Zynq PS之MIO、EMIO调试_调试_04

 

EMIO=1表示只选用1个EMIO,它的编号是78,通过pinL14去点D2灯。

MIO52用于点D1灯。

DDR配置

Zynq PS之MIO、EMIO调试_EMIO_05

Other Options设置如下:

Zynq PS之MIO、EMIO调试_MIO_06

 

 执行Generate Output Products

右键bd,选择Generate the Output Products。

Zynq PS之MIO、EMIO调试_MIO_07

Generate the Output Products就是vivado用IP的形式(.v)实现bd框图。

执行Create HDL Wrapper

右键bd,选择Create HDL Wrapper。

Zynq PS之MIO、EMIO调试_调试_08

 Create a HDL wrapper就是产生1个*_wrapper.v的顶层文件。

执行File -> Export ->Export Hardware

因为MIO、EMIO涉及到PS、PL的操作,因此需要执行综合和实现,并约束引脚,如下图:

Zynq PS之MIO、EMIO调试_PS_09

依次执行Generate Bitstream,Export Hardware(需勾选Include bitstream)即可。

Zynq PS之MIO、EMIO调试_MIO_10

 

执行Launch SDK

打开SDK后的Project Explorer界面如下:

Zynq PS之MIO、EMIO调试_调试_11

新建FSBL工程

File->New->Application Project,界面如下:

Zynq PS之MIO、EMIO调试_MIO_12

 Next后选择ZYNQ MP FSBL,见下图。

Zynq PS之MIO、EMIO调试_PS_13

点击Finish,Project Explorer内容更新为:

 

Zynq PS之MIO、EMIO调试_ZYNQ_14

hello_app_prj和hello_app_prj_bsp为新增的文件夹。

新建Hello World工程

File->New->Application Project,界面如下:

Zynq PS之MIO、EMIO调试_PS_15

 Next后选择Hello World,见下图:

Zynq PS之MIO、EMIO调试_ZYNQ_16

点击Finish,Project Explorer内容更新为:

Zynq PS之MIO、EMIO调试_EMIO_17

 

 打开helloworld.c内容修改为:

Zynq PS之MIO、EMIO调试_调试_18

 

#include <stdio.h>
#include "platform.h"
#include "xil_printf.h"
#include "sleep.h"
#include "xgpiops.h"

//ps_led
#define MIO52_LED 53
//pl_led
#define EMIO_78 78

#define GPIO_DEVICE_ID XPAR_XGPIOPS_0_DEVICE_ID


int main()
{
XGpioPs_Config *ConfigPtr;
XGpioPs Gpio;
init_platform();
//根据器件id,查找器件的配置信息,
ConfigPtr = XGpioPs_LookupConfig(GPIO_DEVICE_ID);
//初始化GPIO驱动
XGpioPs_CfgInitialize(&Gpio, ConfigPtr,ConfigPtr->BaseAddr);
//把gpio的方向设置为输出(0:输入,1:输出)
XGpioPs_SetDirectionPin(&Gpio, MIO52_LED, 1);
XGpioPs_SetDirectionPin(&Gpio, EMIO_78, 1);
//设置输出使能(0:关闭/1:打开)
XGpioPs_SetOutputEnablePin(&Gpio, MIO52_LED, 1);
XGpioPs_SetOutputEnablePin(&Gpio, EMIO_78, 1);
while(1){
print("Hello World\n\r");
// 写数据到GPIO的输出引脚:点亮
XGpioPs_WritePin(&Gpio, MIO52_LED, 0x0);
XGpioPs_WritePin(&Gpio, EMIO_78, 0x0);
sleep(1);
// 写数据到GPIO的输出引脚:点亮
XGpioPs_WritePin(&Gpio, MIO52_LED, 0x1);
XGpioPs_WritePin(&Gpio, EMIO_78, 0x1);
sleep(1);
}
cleanup_platform();
return 0;
}

接上串口线,执行debug或run,Run Configuration设置如下:

 

Zynq PS之MIO、EMIO调试_ZYNQ_19

因为有bit,所以需要勾选Program FPGA,测试发现不勾选PL Powerup时,EMIO的点灯不起作用。

代码经过上板实测通过。

Zynq PS之MIO、EMIO调试_MIO_20

 

阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6