上次搭好了硬件平臺,后面立馬開始了軟件方面的調(diào)試。
本文引用地址:http://www.ex-cimer.com/article/193059.htm因為以前做的都是些用HDL做過顯示,比如VGA,以及最近用FPGA做的LVDS屏的顯示。其工作原理的就是講數(shù)據(jù)寫入到顯存(DRAM)中,然后再按照行場模式或者是使能DE模式讀出DRAM中的數(shù)據(jù),按照屏的顯示時序,發(fā)送給屏完成顯示。
具體的功能框圖如下:
ZYNQ作為整個系統(tǒng)的控制核心,提供HDMI的顯示數(shù)據(jù),以及時讀寫顯存的控制,以及DDC的數(shù)據(jù)產(chǎn)生。PL部分主要是ADV7511的控制,還有將24bit的RGB數(shù)據(jù)轉(zhuǎn)換為16bit的YCBCR422的數(shù)據(jù)發(fā)送給ADV7511
EDK中的數(shù)據(jù)到顯存的函數(shù)如下:
#define img_length 2073600 //1920*1080
void ddr_video_wr(u32 write_addr){
u32 n;
u32 dcnt;
u32 dcnt;
dcnt = 0;
xil_printf(DDR write start:nr);
for (n=0; n img_length; n++){
Xil_Out32((write_addr+(dcnt*4)),write_data); //RGB
dcnt = dcnt + 1;
}
Xil_DCacheFlush();
xil_printf(DDR write: completed (total %d)nr, dcnt);
}
xil_printf(DDR write start:nr);
for (n=0; n img_length; n++){
Xil_Out32((write_addr+(dcnt*4)),write_data); //RGB
dcnt = dcnt + 1;
}
Xil_DCacheFlush();
xil_printf(DDR write: completed (total %d)nr, dcnt);
}
說明:write_data的數(shù)據(jù)位十六進制的RGB數(shù)據(jù)的組合。整個一幅圖片的RGB值的大小為1920*1080的數(shù)據(jù)。
因為此時沒有存取數(shù)據(jù)的地方,所以測試的圖片顯示的時候,將write_data 設(shè)定為固定值,讓全篇顯示紅色的背景。
于是在zynq_fsbl/src/下看到了關(guān)于SD卡兩個文件,sd.c以及sd.h
在SD.C中看到了能使用的3個函數(shù),如下:
1.InitSD(char *filename) 功能是讀取sd中的指定的文件
2.u32 SDAccess( u32 SourceAddress,u32 DestinationAddress,u32 LengthWords); 功能就是講原地的數(shù)據(jù),復(fù)制一定長度的數(shù)據(jù)到目的地址。算作讀數(shù)據(jù)。
3.void ReleaseSD(void); 功能就是算作釋放掉SD卡操作完成。
于是就想用來試試看,新建了一個功能,當(dāng)然還是用14.2.
程序如下:
#include stdio.h>
#include platform.h
#include sd.h
#include xbasic_types.h
#include platform.h
#include sd.h
#include xbasic_types.h
void xil_printf( const char *ctrl1, ...);
int main(){
u32 data;
init_platform();
InitSD(“123.bin”);
init_platform();
InitSD(“123.bin”);
xil_printf(@@read 123.bin success!@@@);
cleanup_platform();
return(0);
};
cleanup_platform();
return(0);
};
功能就是讀取SD卡文件中的123.bin的文件。記過一編譯就開始缺少文件,然后我就在電腦里找啊找,找了7.8文件的.h
到目前為止還剩下ff.h下的integer.h還沒找到。
我想既然能從SD卡boot啟動,應(yīng)該可以自己操作SD卡,可是遇到這文件找不到,一切都沒轍了。上次AET提醒過14.2容易少靜態(tài)庫,這次編譯的時候特地選上所有standalone。
評論