Zynq PS之MIO、EMIO调试
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灯。
1.1.1 Vivado中添加&配置Zynq UltraScale+ MPSoc IP
1.1.1.1 UART设置(仅用于调试,非必需)
1.1.1.2 MIO、EMIO设置
EMIO=1表示只选用1个EMIO,它的编号是78,通过pinL14去点D2灯。
MIO52用于点D1灯。
1.1.1.3 DDR配置
硬件设计中选择的DDR4型号是MT40A2G8VA-062E IT,DDR配置如下图:
Other Options设置如下:
1.1.2 执行Generate Output Products
右键bd,选择Generate the Output Products。
Generate the Output Products就是vivado用IP的形式(.v)实现bd框图。
1.1.3 执行Create HDL Wrapper
右键bd,选择Create HDL Wrapper。
Create a HDL wrapper就是产生1个*_wrapper.v的顶层文件。
1.1.4 执行File -> Export ->Export Hardware
因为MIO、EMIO涉及到PS、PL的操作,因此需要执行综合和实现,并约束引脚,如下图:
依次执行Generate Bitstream,Export Hardware(需勾选Include bitstream)即可。
1.1.5 执行Launch SDK
打开SDK后的Project Explorer界面如下:
1.1.6 新建FSBL工程
File->New->Application Project,界面如下:
Next后选择ZYNQ MP FSBL,见下图。
点击Finish,Project Explorer内容更新为:
hello_app_prj和hello_app_prj_bsp为新增的文件夹。
1.1.7 新建Hello World工程
File->New->Application Project,界面如下:
Next后选择Hello World,见下图:
点击Finish,Project Explorer内容更新为:
hello_world和hello_world_bsp为新增的文件夹。
打开helloworld.c内容修改为:
#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设置如下:
因为有bit,所以需要勾选Program FPGA,测试发现不勾选PL Powerup时,EMIO的点灯不起作用。
代码经过上板实测通过。
Recommend
About Joyk
Aggregate valuable and interesting links.
Joyk means Joy of geeK