如何讓TCC89x支持480x272的分辨率
//=====================================================================
//TITLE:
// 如何讓TCC89x支持480x272的分辨率
//AUTHOR:
// norains
//DATE:
// Friday 01-April-2011
//Environment:
// Visual Studio 2005
// Windows CE 6.0
// Telechips TCC8900
//=====================================================================
TCC89x是功能強(qiáng)大的多媒體CPU,其默認(rèn)支持的分辨率為800x480。如果使用的屏剛好是該分辨率,那么一切都很簡(jiǎn)單,但如果是另外的分辨率,比如480x272,那么就需要?jiǎng)右环X力了。
好吧,下面我們就來(lái)看看如何設(shè)置480x272這個(gè)分辨率吧!
一般來(lái)說(shuō),涉及到設(shè)置的問(wèn)題,我們一般習(xí)慣于打開(kāi)Magellan.bat文件。這次當(dāng)然也不例外,我們?cè)谄渲锌吹接腥缦碌拇a段:
@REM *************************************************************
@REM * Display Setting
@REM * RGB888 or RGB565 ex)set RGB888=1
@REM * Display Height ex)set LCDHEIGHT=1E0
@REM * Display Width ex)set LCDWIDTH=320
@REM *************************************************************
set RGB565=1
set LCDHEIGHT=1E0
set LCDWIDTH=320
是不是意味著只要修改LCDHEIGHT和LCDWIDTH就能夠?qū)崿F(xiàn)480x272的分辨率了呢?很遺憾,如果你設(shè)置了,并且編譯了系統(tǒng),會(huì)發(fā)現(xiàn)一切讓你很失望,一切都是依舊。在討論下一步如何去弄之前,我們先看看LCDHEIGHT和LCDWIDTH究竟影響到了哪里。
用軟件查找,發(fā)現(xiàn)該環(huán)境變量在Platform.reg中有定義使用,如下所示:
[HKEY_LOCAL_MACHINE/Drivers/Display/Magellan/CONFIG]
"DisplayDll"="Display.dll"
"LCD_Width"=dword:$(LCDWIDTH)
"LCD_Height"=dword:$(LCDHEIGHT)
但實(shí)際上,這個(gè)定義是沒(méi)有任何意義的。因?yàn)樽?cè)表LCD_Width和LCD_Height這兩個(gè)數(shù)值,會(huì)在WinCE跑起來(lái)之后,被Display驅(qū)動(dòng)設(shè)置回800x480。
打消通過(guò)修改Magellan.bat來(lái)達(dá)到變更分辨率的念頭,我們還是先實(shí)打?qū)嵉貜念^開(kāi)始如何進(jìn)行設(shè)置吧。在開(kāi)始之前,我們必須要明確一點(diǎn),從廣義上來(lái)說(shuō),顯示分為兩個(gè)部分,一個(gè)是bootloader,另一個(gè)則是WinCE開(kāi)始跑起來(lái)之后。
首先是bootloader,這里需要修改的是./Src/BOOT/lcd.h文件。要修改的有兩個(gè)地方,先開(kāi)刀的是lcd_cfg這個(gè)數(shù)組。我們需要將lcd_cfg[0]設(shè)置為所用屏的參數(shù),在這里先給出一個(gè)樣本,如果實(shí)際使用的屏與此不同,大家可自行修改:
[cpp] view plaincopystatic lcd_cfg_t lcd_cfg[3] =
{
// [A0481A 4.3 Color TFT LCD ]
{480, 272, 8, 10, 1, 1, 41, 1, 1, 0xC, 60 },
// [CLAA104XA01CW 10"4 Color TFT LCD (LVDS)]
{1024, 768, 1, 1, 1, 36, 1, 1, 318, 0xC, 60},
// [HT121WX2-103 12"1 Color TFT LCD (LVDS)]
{1280, 800, 1, 1, 3, 20, 1, 10, 150, 0xC, 60 },
};
然后還有DISP_WIDTH和DISP_HEIGHT這兩個(gè)數(shù)值。如果懶得麻煩,可以直接在文件的最后undef這兩個(gè)宏,然后再重新設(shè)置,如下所示:
[cpp] view plaincopy#undef DISP_WIDTH
#undef DISP_HEIGHT
#define DISP_WIDTH 480
#define DISP_HEIGHT 272
如果數(shù)值的設(shè)置和實(shí)際的屏一致的話(huà),那么現(xiàn)在編譯boot并燒錄,應(yīng)該已經(jīng)能看到正常的480x272的界面了。
接下來(lái)需要弄的就是WinCE的部分。正如前面所說(shuō)的,Display驅(qū)動(dòng)會(huì)自動(dòng)調(diào)用SetMode(0)函數(shù),可能這樣會(huì)給我們這樣一個(gè)感覺(jué),只要修改SetMode函數(shù)的調(diào)用就可以了。但實(shí)際上這想法是不可行的,因?yàn)樵摵瘮?shù)的調(diào)用是封裝在Telechips的自帶的某個(gè)lib中,我們是無(wú)法更改的。其實(shí),我們完全可以不用理會(huì)代碼。默認(rèn)不是調(diào)用Mode 0么?我們只要更改Display Mode 0的數(shù)值即可。也就是說(shuō),我們可以打開(kāi)platform.reg文件,將LCD_Width0和LCD_Height0分別設(shè)置為480和272即可,如下所示:
[HKEY_LOCAL_MACHINE/Drivers/Display/Magellan/CONFIG]
"LCD_Width0"=dword:1E0 ;480
"LCD_Height0"=dword:110 ;272
編譯系統(tǒng),將NK.ROM燒錄到板子,可以發(fā)現(xiàn)進(jìn)入WinCE后的界面已經(jīng)一切正常了。