勾他上瘾1v1高干h,亚洲欧美一级特黄大片录像,男男黄GAY片免费网站WWW,AV黄色网站在线观看了,另类图片 五月,俺也去最新地址,日韩欧美一区国产二区在线,亚洲AV无码一区二区三区资源

技術(shù)文摘

uboot移植——GSC3280芯片logo顯示












注: 本文使用的uboot版本是2010.12版本。



一、logo顯示調(diào)用流程

現(xiàn)在來(lái)講述下logo顯示的調(diào)用流程:

board_init_r()->stdio_init()->drv_video_init()->video_init()

在video_init()函數(shù)中,首先調(diào)用了video_hw_init()函數(shù),該函數(shù)初始化GSC3280芯片的LCD控制器和GraphicDevice結(jié)構(gòu)體。然后在video_init()函數(shù)中調(diào)用video_logo()函數(shù)顯示logo圖片。

接下來(lái)主要講述video_hw_init()和video_logo()函數(shù)。







二、GSC3280 LCD初始化

芯片初始化包括初始化芯片內(nèi)部控制寄存器和設(shè)置像素信息等。

在uboot源碼的根目錄下,drivers/video/目錄下建立gsc3280_lcdfb.c文件,video_hw_init()程序如下:
1.  GraphicDevice fb;

2.   

3.  static void gsc3280_lcd_init(void)

4.  {

5.      printf("init lcd sysctl\n");

6.      lcdc_disable();

7.      lcd_sysctl();

8.      gsc3280_ctr_init();

9.      lcdc_dma_init((void *)DEFAULT_VIDEO_HW_ADDR);

10.        lcdc_monitor_para(0);

11.        lcd_enable();

12.    }

13.    void *video_hw_init(void)

14.    {

15.        memset(&fb, 0, sizeof(GraphicDevice));

16.        fb.winSizeX = MAX_VIDEO_WIDTH_LEN;

17.        fb.winSizeY = MAX_VIDEO_HIGH_LEN;

18.        //over 16M from the head of kseg1, unmapped and uncacheable ddr2 address

19.        fb.frameAdrs = DEFAULT_VIDEO_BASE_ADDR;

20.        fb.plnSizeX = fb.winSizeX;

21.        fb.plnSizeY = fb.winSizeY;

22.        fb.gdfBytesPP = COLOR_PIXEL_SIZE / 8;

23.        fb.gdfIndex = GDF_16BIT_565RGB;

24.        fb.isaBase = 0;

25.        fb.pciBase = 0;

26.        fb.memSize = fb.winSizeX * fb.winSizeY * fb.gdfBytesPP;

27.        /* Cursor Start Address */

28.        fb.dprBase = 0;

29.        fb.vprBase = 0;

30.        fb.cprBase = 0;

31.        gsc3280_lcd_init();

32.        return &fb;

33.    }

34.  







三、logo圖片顯示原理

3.1、宏定義

在顯示圖片時(shí),需要定義一些相應(yīng)宏,這些宏在顯示流程中會(huì)被使用,這些宏包括:
1.   #define CONFIG_VIDEO
2.   #define CONFIG_CMD_BMP
3.   #define CONFIG_VIDEO_LOGO
4.   #define CONFIG_CFB_CONSOLE
5.   #define CONFIG_VIDEO_BMP_LOGO
6.   #define VIDEO_FB_16BPP_WORD_SWAP
7.    
8.   #define CONFIG_GSC3280_LCD
9.   #define CONFIG_GSC3280_CMD_LCD


3.2、圖片顯示數(shù)據(jù)的制作

如果定義了VIDEO_LOGO和VIDEO_BMP_LOGO宏,編譯時(shí)會(huì)執(zhí)行tools目錄下的bmp_logo程序,讀取"tools/logos/denx.bmp"文件,在include下生成bmp_logo.h文件。注意,bmp_logo.h文件是自動(dòng)生成的,里面的數(shù)據(jù)和你設(shè)置的分辨率和denx.bmp圖片具體內(nèi)容有關(guān)。

bmp_logo.c文件中,有一個(gè)地點(diǎn)程序需要更改,如果不改,只能顯示半屏數(shù)據(jù),修改的是bmp_logo.c文件中main()函數(shù)語(yǔ)句,內(nèi)容如下:
1.   for (i=(b->height-1)*b->width; i>=0; i-=b->width) {
2.           for (x = 0; x < b->width; x++) {
3.               b->data[(
uint32_t ) i + x] = (uint8_t) fgetc (fp) \
4.                           + DEFAULT_CMAP_SIZE;
5.           }
6.       }

紅色部分即為修改內(nèi)容,原來(lái)為uint16_t。


3.3、制作bmp圖片

這個(gè)bmp文件是有要求的,位深度必須為8位,大小也有限制,自己做個(gè)logo圖片,jpeg格式就可以,使用linux下的圖片工具轉(zhuǎn)成8位的bmp文件

1.  jpegtopnm logo.jpg | ppmquant 31 | ppmtobmp -bpp 8 > denx.bmp


3.4、video_logo()函數(shù)說(shuō)明

在該函數(shù)中,會(huì)調(diào)用logo_plot (video_fb_address, VIDEO_COLS, 0, 0);函數(shù),該函數(shù)的第一個(gè)參數(shù)即為內(nèi)存中顯存緩沖區(qū)的基地址。

該函數(shù)較簡(jiǎn)單,如果顯示的屏幕分辨率為800 * 480,那么實(shí)際上該函數(shù)有兩個(gè)循環(huán),內(nèi)層循環(huán)循環(huán)800次,顯示一行,外層循環(huán)循環(huán)480次,顯示一張圖片。

注意,在調(diào)試中發(fā)現(xiàn),需要將int ycount = video_logo_height;定義為volatile類型,否則會(huì)造成外層循環(huán)退不出來(lái),即改為:volatile int ycount = video_logo_height;。







原文請(qǐng)參見:http://blog.chinaunix.net/uid-25445243-id-4144347.html