上次搭好了硬件平臺(tái),后面立馬開始了軟件方面的調(diào)試。
因?yàn)橐郧白龅亩际切┯肏DL做過(guò)顯示,比如VGA,以及最近用FPGA做的LVDS屏的顯示。其工作原理的就是講數(shù)據(jù)寫入到顯存(DRAM)中,然后再按照行場(chǎng)模式或者是使能DE模式讀出DRAM中的數(shù)據(jù),按照屏的顯示時(shí)序,發(fā)送給屏完成顯示。
具體的功能框圖如下:
ZYNQ作為整個(gè)系統(tǒng)的控制核心,提供HDMI的顯示數(shù)據(jù),以及時(shí)讀寫顯存的控制,以及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;
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);
}
說(shuō)明:write_data的數(shù)據(jù)位十六進(jìn)制的RGB數(shù)據(jù)的組合。整個(gè)一幅圖片的RGB值的大小為1920*1080的數(shù)據(jù)。
因?yàn)榇藭r(shí)沒(méi)有存取數(shù)據(jù)的地方,所以測(cè)試的圖片顯示的時(shí)候,將write_data 設(shè)定為固定值,讓全篇顯示紅色的背景。
當(dāng)時(shí)的設(shè)想是從SD卡中國(guó)讀取過(guò)數(shù)據(jù),畢竟以前用HDL語(yǔ)言做過(guò)讀取SD的數(shù)據(jù),實(shí)際上就是把他單過(guò)flah來(lái)操作。
于是在zynq_fsbl/src/下看到了關(guān)于SD卡兩個(gè)文件,sd.c以及sd.h
在SD.C中看到了能使用的3個(gè)函數(shù),如下:
1.InitSD(char *filename) 功能是讀取sd中的指定的文件
2. u32 SDAccess( u32 SourceAddress,u32 DestinationAddress,u32 LengthWords); 功能就是講原地的數(shù)據(jù),復(fù)制一定長(zhǎng)度的數(shù)據(jù)到目的地址。算作讀數(shù)據(jù)。
3.void ReleaseSD(void); 功能就是算作釋放掉SD卡操作完成。
于是就想用來(lái)試試看,新建了一個(gè)功能,當(dāng)然還是用14.2.
程序如下:
#include <stdio.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”);
xil_printf("@@read 123.bin success!@@@");
cleanup_platform();
return(0);
};
功能就是讀取SD卡文件中的123.bin的文件。記過(guò)一編譯就開始缺少文件,然后我就在電腦里找啊找,找了7.8文件的.h
到目前為止還剩下ff.h下的integer.h還沒(méi)找到。
我想既然能從SD卡boot啟動(dòng),應(yīng)該可以自己操作SD卡,可是遇到這文件找不到,一切都沒(méi)轍了。上次AET提醒過(guò)14.2容易少靜態(tài)庫(kù),這次編譯的時(shí)候特地選上所有standalone。