P2中ZYNQ的PS控制PL端LED

第一個ZYNQ的實驗,用於熟悉開發環境和板卡,通過GPIO控制LED,由於P2在ps端沒有LED,所以需要通過axi總線控制PL端LED。

1、參考設計

參考的是黑金的《PL 端和 PS 端的協同設計流水燈實驗 》。

2、新建工程

新建一個工程,選擇zynq的FPGA,然後Create Block Design,然後右擊Add ip,輸入zynq,如下圖所示:

然後更改裏面配置,首先將時鐘設置爲50M,如下圖所示:

爲了使用SDK中的hellow world例程,需要選擇一路串口,U0和U1都可以,P2使用的是U0, ZEDBOARD使用的是U1打印。

再添加GPIO

步驟就是RunBlockAutomation-->GenerateOutputProducts-->GenerateOutputProducts

最後添加約束文件xdc

set_property IOSTANDARD LVCMOS33 [get_ports {gpio_rtl_tri_o[0]}]

set_property IOSTANDARD LVCMOS33 [get_ports {gpio_rtl_tri_o[1]}]

set_property IOSTANDARD LVCMOS33 [get_ports {gpio_rtl_tri_o[2]}]

set_property IOSTANDARD LVCMOS33 [get_ports {gpio_rtl_tri_o[3]}]

 

set_property PACKAGE_PIN R14 [get_ports {gpio_rtl_tri_o[0]}]

set_property PACKAGE_PIN P14 [get_ports {gpio_rtl_tri_o[1]}]

set_property PACKAGE_PIN N16 [get_ports {gpio_rtl_tri_o[2]}]

set_property PACKAGE_PIN M14 [get_ports {gpio_rtl_tri_o[3]}]

生成bit文件,然後export,同時export bit文件,最後launch SDK。

3、SDK端設計

SDK的界面類似於eclipse,新建APP。

然後輸入隨意的名稱,選擇hello world的工程。

修改main文件如下所示:

#include <stdio.h>

#include "platform.h"

#include "xil_printf.h"

#include "xparameters.h"

#include "xgpio.h"

 

XGpio GpioOutput;

 

int main()

{

 u32 Delay;

 u32 Ledwidth;

 

init_platform();

 

XGpio_Initialize(&GpioOutput,XPAR_AXI_GPIO_0_DEVICE_ID);

 

XGpio_SetDataDirection(&GpioOutput, 1, 0x0);

 

XGpio_DiscreteWrite(&GpioOutput, 1, 0x0);

 

while (1)

{

 for(Ledwidth =0x0;Ledwidth < 4; Ledwidth++)

 {

   XGpio_DiscreteWrite(&GpioOutput,1,1<< Ledwidth);

   for(Delay = 0; Delay < 8000000; Delay++);

   XGpio_DiscreteClear(&GpioOutput,1, 1 <<Ledwidth);

 }

 

 

 

}

cleanup_platform();

 return 0;

 

}

首先下載bit,然後運行軟件,流水燈就亮了。

4、問題解決

一開始SDK一直提示無法停止after reset,需要將SD卡取下來,並按SRST,就可以了。

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章