
本文用于點亮PSMIO52和PLL15接的LED燈。
EMIO=1表示只選用1個EMIO,它的編號是78,通過pinL14去點D2燈。
(資料圖片)
MIO52用于點D1燈。
硬件設計中選擇的DDR4型號是MT40A2G8VA-062E IT,DDR配置如下圖:
Other Options設置如下:
右鍵bd,選擇Generate the Output Products。
Generate the Output Products就是vivado用IP的形式(.v)實現bd框圖。
右鍵bd,選擇Create HDL Wrapper。
Create a HDL wrapper就是產生1個*_wrapper.v的頂層文件。
因為MIO、EMIO涉及到PS、PL的操作,因此需要執行綜合和實現,并約束引腳,如下圖:
依次執行Generate Bitstream,Export Hardware(需勾選Include bitstream)即可。
打開SDK后的Project Explorer界面如下:
File->New->Application Project,界面如下:
Next后選擇ZYNQ MP FSBL,見下圖。
點擊Finish,Project Explorer內容更新為:
hello_app_prj和hello_app_prj_bsp為新增的文件夾。
File->New->Application Project,界面如下:
Next后選擇Hello World,見下圖:
點擊Finish,Project Explorer內容更新為:
hello_world和hello_world_bsp為新增的文件夾。
打開helloworld.c內容修改為:
#include#include "platform.h"#include "xil_printf.h"#include "sleep.h"#include "xgpiops.h"http://ps_led#define MIO52_LED 53//pl_led#define EMIO_78 78#define GPIO_DEVICE_ID XPAR_XGPIOPS_0_DEVICE_IDint 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的點燈不起作用。
代碼經過上板實測通過。