日韩在线不卡免费视频一区,日韩欧美精品一区二区三区经典,日产精品码2码三码四码区,人妻无码一区二区三区免费,日本feerbbwdh少妇丰满

FPGA and ICer
認(rèn)證:普通會員
作者動態(tài)
ZYNQ-BOOT介紹與程序固化
1星期前
ZYNQ-搭建實(shí)現(xiàn)helloworld
2星期前
ZYNQ-調(diào)用自定義AXI接口呼吸燈IP
2星期前
ZYNQ-制作自定義AXI呼吸燈IP
2星期前
ZYNQ-利用PS引腳實(shí)現(xiàn)EMIO GPIO的驅(qū)動
3星期前

ZYNQ-調(diào)用自定義AXI接口呼吸燈IP

學(xué)習(xí)內(nèi)容

本節(jié)使用前文實(shí)現(xiàn)AXI接口的呼吸燈的IP,掛載到AXI總線調(diào)用驅(qū)動axi呼吸燈IP。

開發(fā)環(huán)境

vivado 18.3&SDK PYNQ-Z2開發(fā)板

硬件平臺搭建

新建工程,創(chuàng)建 block design。添加呼吸燈IP和ZYNQ7,對zynq進(jìn)行初始化配置,然后進(jìn)行自動連接。

完成自動連線后,

對AXI接口的led管腳進(jìn)行引腳引出定義

完整的平臺設(shè)計圖:

然后我們進(jìn)行g(shù)enerate output product 然后生成HDL封裝。接著就對應(yīng)引腳進(jìn)行引腳約束即可(這里的LED是使用的PL資源,PYNQ的粉色開發(fā)板可以直接引用這個約束):set_property -dict { PACKAGE_PIN R14 IOSTANDARD LVCMOS33 } [get_ports { led }]; #IO_L6N_T0_VREF_34 Sch=led[0]完成約束后進(jìn)行綜合布局布線,等待生成bit流文件。bit文件生成后在FILE處,點(diǎn)擊導(dǎo)出硬件資源(包含bit流文件),接著launch SDK。

軟件部分編寫

打開SDK后,新建application project。在hw_platform文件夾下,可以找到系統(tǒng)生成的驅(qū)動的實(shí)例程序,方便我們進(jìn)行代碼的編寫調(diào)試。

#define BREATH_LED_IP_mReadReg(BaseAddress, RegOffset) \
    Xil_In32((BaseAddress) + (RegOffset))
#define BREATH_LED_IP_mWriteReg(BaseAddress, RegOffset, Data) \
  	Xil_Out32((BaseAddress) + (RegOffset), (u32)(Data))
  	
XStatus BREATH_LED_IP_Reg_SelfTest(void * baseaddr_p);

使用上面的三個函數(shù),我們可以對AXI接口的呼吸燈的IP進(jìn)行控制。具體的函數(shù)的參數(shù)數(shù)據(jù),數(shù)據(jù)我們可以在頭文件中找到相關(guān)說明。BaseAddress這個參數(shù)可以在#include"xparameters.h"中尋到。這里為了方便引用,我們進(jìn)行了定義#define LED_IP_BASEADDR XPAR_BREATH_LED_IP_0_S0_AXI_BASEADDRRegOffset可以在#include"breath_led_ip.h"找到,這里我在代碼中進(jìn)行了定義#define LED_IP_REG0 BREATH_LED_IP_S0_AXI_SLV_REG0_OFFSETData這里對于寫函數(shù)來說就是配置我們的寄存器的值,這里我們也就是完成對呼吸燈IP的開關(guān)、頻率步進(jìn)等參數(shù)的設(shè)置?;乜辞拔奈覀儗δ芗拇嫫鞯脑O(shè)置,這里我僅僅使用了reg0,完成對呼吸燈IP的配置。reg0[31]設(shè)置呼吸燈頻率設(shè)置使能信號   reg0[0]設(shè)置控制開關(guān)      reg0[10:1]設(shè)置頻率

貼出完整代碼:

#include 
#include "platform.h"
#include "xil_printf.h"
#include"xparameters.h"
#include"breath_led_ip.h"
#include "xil_io.h"
#include "sleep.h"
#define LED_IP_BASEADDR XPAR_BREATH_LED_IP_0_S0_AXI_BASEADDR
#define LED_IP_REG0 BREATH_LED_IP_S0_AXI_SLV_REG0_OFFSET
int main()
{
	int led_para=0;
    init_platform();
    //自測LED IP功能是否正常
    BREATH_LED_IP_Reg_SelfTest(LED_IP_BASEADDR);
    sleep(1);
    //reg0[31]設(shè)置呼吸燈頻率設(shè)置使能信號   reg0[0]設(shè)置控制開關(guān)      reg0[10:1]設(shè)置頻率
    BREATH_LED_IP_mWriteReg(LED_IP_BASEADDR,LED_IP_REG0,0X800007FF);
    sleep(3);
    BREATH_LED_IP_mWriteReg(LED_IP_BASEADDR,LED_IP_REG0,0X800000AF);
    sleep(3);
    BREATH_LED_IP_mWriteReg(LED_IP_BASEADDR,LED_IP_REG0,0X800007FE);
    sleep(3);
    led_para=BREATH_LED_IP_mReadReg(LED_IP_BASEADDR,LED_IP_REG0);
    if(led_para==0X800007FE){
    	print("led off\n\r");
    }
    cleanup_platform();
    return0;
}

代碼完成編寫后,成功下載到板子中,首先運(yùn)行自動生成的測試程序,可以看到串口打印信息成功讀寫。接著看到我們的LED燈,先快速呼吸閃爍,然后慢速呼吸閃爍,最后關(guān)閉LED后通過讀取函數(shù)讀到正確的參數(shù)配置值,打印led off信息。

聲明:本內(nèi)容為作者獨(dú)立觀點(diǎn),不代表電子星球立場。未經(jīng)允許不得轉(zhuǎn)載。授權(quán)事宜與稿件投訴,請聯(lián)系:editor@netbroad.com
覺得內(nèi)容不錯的朋友,別忘了一鍵三連哦!
贊 2
收藏 2
關(guān)注 20
成為作者 賺取收益
全部留言
0/200
成為第一個和作者交流的人吧