5

Zynq PS之MIO、EMIO调试

 1 year ago
source link: https://blog.51cto.com/u_15927439/5991758
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

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

Zynq PS之MIO、EMIO调试_MIO

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

Zynq PS之MIO、EMIO调试_ZYNQ_02

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

Zynq PS之MIO、EMIO调试_ZYNQ_03

1.1.1.2 MIO、EMIO设置

Zynq PS之MIO、EMIO调试_MIO_04

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

MIO52用于点D1灯。

1.1.1.3 DDR配置

硬件设计中选择的DDR4型号是MT40A2G8VA-062E IT,DDR配置如下图:

Zynq PS之MIO、EMIO调试_EMIO_05

Other Options设置如下:

1.1.2 执行Generate Output Products

右键bd,选择Generate the Output Products。

Zynq PS之MIO、EMIO调试_LED_06

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

1.1.3 执行Create HDL Wrapper

右键bd,选择Create HDL Wrapper。

Zynq PS之MIO、EMIO调试_MIO_07

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

1.1.4 执行File -> Export ->Export Hardware

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

Zynq PS之MIO、EMIO调试_LED_08

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

Zynq PS之MIO、EMIO调试_MIO_09

1.1.5 执行Launch SDK

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

Zynq PS之MIO、EMIO调试_EMIO_10

1.1.6 新建FSBL工程

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

Zynq PS之MIO、EMIO调试_ZYNQ_11

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

Zynq PS之MIO、EMIO调试_灯_12

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

Zynq PS之MIO、EMIO调试_LED_13

hello_app_prj和hello_app_prj_bsp为新增的文件夹。

1.1.7 新建Hello World工程

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

Zynq PS之MIO、EMIO调试_灯_14

Next后选择Hello World,见下图:

Zynq PS之MIO、EMIO调试_MIO_15

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

Zynq PS之MIO、EMIO调试_MIO_16

hello_world和hello_world_bsp为新增的文件夹。

打开helloworld.c内容修改为:

Zynq PS之MIO、EMIO调试_灯_17
#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调试_LED_18

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

代码经过上板实测通过。

Zynq PS之MIO、EMIO调试_EMIO_19

About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK