摘要:當(dāng)你興高采烈的拿到一塊新買的2440開發(fā)板,卻不知如何下手的時(shí)候,本文想通過(guò)一個(gè)屏幕顯示實(shí)驗(yàn),了解開發(fā)板的實(shí)驗(yàn)開工過(guò)程,將幫助你怎樣利用板上資源實(shí)現(xiàn)自己的設(shè)計(jì)目標(biāo)。
關(guān)鍵詞:ARM2440;漢字顯示;窗口移動(dòng)
ARM9具有比單片機(jī)強(qiáng)得多的功能,它把單片機(jī)的許多外部接口電路都集成到了芯片內(nèi)部,既降低了成本,又提高了系統(tǒng)的可靠性。但是,ARM9的使用卻異常復(fù)雜,沒(méi)有象單片機(jī)那樣的極易上手,應(yīng)用之方便了。利用ARM9開發(fā)板進(jìn)行一些二次開發(fā),不失為一種多快好省的辦法。
本文使用的開發(fā)板型號(hào)為:TQ2440,4.3吋屏幕。
一 設(shè)計(jì)目標(biāo)
在TQ2440開發(fā)板上顯示中英字文本,并能通過(guò)按鍵中斷實(shí)現(xiàn)文字窗口的上、下、左、右移動(dòng)。
二 實(shí)驗(yàn)開工
當(dāng)你買到一塊ARM9開發(fā)板的時(shí)候,一般會(huì)附送一些接口連接線和一張光盤,內(nèi)部會(huì)有一些出廠程序,這是我們應(yīng)該好好利用的。打開包裝,拿出里面的實(shí)驗(yàn)板,用隨機(jī)附帶的RS-232串口線,USB線,把ARM9開發(fā)板與電腦主機(jī)連接起來(lái),并插好開發(fā)板電源(先不要打開開發(fā)板電源)。
三 建立軟件開發(fā)環(huán)境
(1)啟動(dòng)電腦主機(jī),安裝附送光盤上的ADS1.2(在“E:\TQ2440_CD\Windows平臺(tái)開發(fā)工具包\ADS1.2”下,其中“E:”為光盤所在目錄)。
(2)安裝并設(shè)置串口工具軟件SecureCRT.exe。這是個(gè)將開發(fā)板與電腦主機(jī)建立起串行連接的串行口連接工具軟件,比超級(jí)終端好用。該軟件包在“E:\TQ2440_CD\Windows平臺(tái)開發(fā)工具包”文件夾下面,找到該軟件包并復(fù)制到“D:\”下并解壓。運(yùn)行SecureCRT.exe,單擊快速連接圖標(biāo),設(shè)置使用的協(xié)議為“Serial”,端口為“COM1”,波特率為:115200,并去掉RTS/CTS前面的鉤,單擊“連接”。將內(nèi)存選擇開關(guān)打到“NOR Flash”,打開電源,電腦屏幕提示,發(fā)現(xiàn)新硬件,需安裝開發(fā)板的USB設(shè)備驅(qū)動(dòng)程序。該驅(qū)動(dòng)程序包的路徑為“E:\TQ2440_CD\Windows平臺(tái)開發(fā)工具\USB下載驅(qū)動(dòng).rar”,解壓后,按提示安裝即可。按開發(fā)板的復(fù)位鍵,會(huì)發(fā)現(xiàn)電腦屏幕上出現(xiàn)串口工具窗口,提示選擇下載模式。
(3)安裝并設(shè)置開發(fā)板燒寫工具軟件DWN.exe。該軟件包也在“E:\TQ2440_CD\Windows平臺(tái)開發(fā)工具包”文件夾下面,找到該軟件包并復(fù)制到“D:\”下并解壓。該工具軟件的設(shè)置比較簡(jiǎn)單,運(yùn)行DWN.exe,單擊菜單 “Configuration”/“Options”,設(shè)置波特率為115200,端口為“COM2”,(如有沖突,換一個(gè)端口),下載地址為“0x3000000”。
到此,建立軟件開發(fā)環(huán)境基本完成。
四 修改原出廠鏡像
(1)修改原出廠程序默認(rèn)屏幕尺寸
1)復(fù)制并解壓光盤中自帶的測(cè)試程序TQ2440_Test_20100607.rar(在“E:\TQ2440_CD\TQ2440測(cè)試程序”下)。
2)打開開編輯項(xiàng)目文件TQ2440_test.mcp(比如說(shuō)是解壓縮在“D:\TQ2440_Test_20100607”下),只要雙擊文件名TQ2440_test.mcp ,即可打開編輯。
3)修改開發(fā)板屏幕尺寸大小。因原出廠程序默認(rèn)的屏幕尺寸為3.5吋,而實(shí)際用的,是4.3寸,要修改一下。步驟:a,在標(biāo)簽為TQ2440_test.mcp的窗口中,右擊LCD_TFT.c,選擇“編譯”;2、單擊LCD_TFT.c右邊的下拉箭頭,選擇“LCD_TFT.h”;3、將第14行中的“LCDW35”,改為:“LCDW43”,并保存文件;
(2)移植字庫(kù)
1)復(fù)制光盤中的文件:E:\TQ2440_CD\uCOS-II\uCOS-II_20091031.rar 到D盤根目錄下并解壓。
2)復(fù)制D:\uCOS-II_20091031\S3C2440\source\Font_Libs.c到D:\TQ2440_Test_20100607\src中。
3)添加字庫(kù)文件到項(xiàng)目中:只要在TQ2440_Test.mcp窗口,單擊右鍵,選擇:“Add files…”,在彈出的窗口中,打開src文件夾,選中“Font_Libs.c”,點(diǎn)擊“打開”,再點(diǎn)擊“OK”即可。
(3)讓開發(fā)板顯示漢字
1)在LCD_TFT.c 的開頭位置,添加外部數(shù)組申明:
extern unsigned char __CHS[];
extern unsigned char __VGA[];
2)打開D:\uCOS-II_20091031\uCOS-II.mcp ,再打開lcd.c ,將里面的Lcd_PutASCII( )、void Lcd_PutHZ( )、Lcd_printf()這三個(gè)函數(shù)復(fù)制到項(xiàng)目D:\TQ2440_Test_20100607\TQ2440_Test.mcp中的LCD_TFT.c 文件末尾并在開頭添加函數(shù)申明。
3)刪除 Lcd_printf ( ) 函數(shù)中開頭的這幾行(或加上“// ”):
// char __LCD_Printf_Buf[256];
// va_list ap;
// unsigned char *pStr = (unsigned char *)__LCD_Printf_Buf;
unsigned int i = 0;
// va_start(ap,fmt);
// vsprintf(__LCD_Printf_Buf,fmt,ap);
// va_end(ap);
4)將 void Lcd_printf(unsigned int x,unsigned int y,unsigned int c,unsigned int bk_c,unsigned int st,char *fmt,...) 改為:void Lcd_printf(unsigned int x,unsigned int y,unsigned int c,unsigned int bk_c,unsigned int st,char *pStr) ,可避免許多編譯錯(cuò)誤。
(4)讓開發(fā)板全屏顯示漢字并實(shí)現(xiàn)窗口移動(dòng)
1)在void KeyScan_Test(void) 函數(shù)中,加入:
void KeyScan_Test(void)
{
Uart_Printf(\"\nKey Scan Test,press ESC key to exit ?。躰\");
rGPBUP = rGPBUP ~0x03f0|0x03f0;// LED [8:5] => UP En
rGPBCON = rGPBCON ~0x3d57fc|0x3d57fc;//LED[8:5] => OUTPUT;
rGPFCON = rGPFCON (~((3<<4)|(3<<0)|(3<<8)|(3<<2))) | ((2<<4)|(2<<0)|(2<<8)|(2<<2)) ;//GPF4,2,1,0 set EINT
rEXTINT0 = ~(7|(7<<4)|(7<<8)|(7<<16));
rEXTINT0 |= (0|(0<<4)|(0<<8)|(0<<16)); //set eint0,1,2,4 falling edge int
rEINTPEND |= (1<<4);//clear eint 4
rEINTMASK = ~(1<<4);//enable eint 4
ClearPending(BIT_EINT0|BIT_EINT1|BIT_EINT2|BIT_EINT4_7);
pISR_EINT0 = pISR_EINT1 = pISR_EINT2 = pISR_EINT4_7 = (U32)Key_ISR;
EnableIrq(BIT_EINT0|BIT_EINT1|BIT_EINT2|BIT_EINT4_7);
i=0;
j=0;
flag=0;
while (1)
{
Lcd_ClearScr((0x1f<<11) | (0x3f<<5) | (0x00));
Lcd_printf(16*i,16*j+16*0,0x0000,(0x1f<<11) | (0x3f<<5) | (0),1,\" 海燕\");
Lcd_printf(16*i,16*j+16*1,0x0000,(0x1f<<11) | (0x3f<<5) | (0),1,\" 在蒼茫的大海上,狂風(fēng)卷集著烏云。在烏云和大海之間,海燕象黑色的閃電\");
……
……
Lcd_printf(16*i,16*j+16*31,0x0000,(0x1f<<11) | (0x3f<<5) | (0),1,\" --讓暴風(fēng)雨來(lái)得/更猛烈些吧!....\");
while(!flag)
{
Delay(200);
}
flag=0;
} // while (1) 循環(huán)結(jié)束
}
2)在鍵盤中斷處理函數(shù)中作如下修改:
static void __irq Key_ISR(void)
{
U8 key;
U32 r;
EnterCritical(r);
if(rINTPND==BIT_EINT1)
{
if (flag==0)
{
j=j+1;
flag=1;
}
ClearPending(BIT_EINT1);
}
if(rINTPND==BIT_EINT4_7)
{
ClearPending(BIT_EINT4_7);
if(rEINTPEND(1<<4))
{
Uart_Printf(\"eint4\n\");
if (flag==0)
{
j=j-1;
flag=1;
}
rEINTPEND |= 1<< 4;
}
}
if(rINTPND==BIT_EINT0)
{
Uart_Printf(\"eint0\n\");
if (flag==0)
{
i=i-1;
flag=1;
}
ClearPending(BIT_EINT0);
}
if(rINTPND==BIT_EINT2)
{
Uart_Printf(\"eint2\n\");
if (flag==0)
{
i=i+1;
flag=1;
}
ClearPending(BIT_EINT2);
}
}
3)在keyscan( ) 函數(shù)中,添加全局變量定義:
int i,j,flag ;
4)在標(biāo)簽為TQ2440_test.mcp的窗口中,選中所有文件,單擊“Project”/“Compile”,重新編譯文件。再單擊“Project”/“Make”,連接文件;如發(fā)現(xiàn)“0”個(gè)錯(cuò)誤,這說(shuō)明一切正常。檢查“D:\TQ2440_Test_20100607\TQ2440_Test_Data\DebugRel ”目錄下,有沒(méi)有“TQ2440_Test.bin ”文件,這就是可用于開發(fā)板燒寫的文件。
(5)燒寫目標(biāo)文件
步驟:1)連接好串行口線、USB線,開發(fā)板電源;
2)打開串口工具SecureCRT,內(nèi)存選擇開頭打到Norflash ,打開開發(fā)板電源或按復(fù)位鍵,在串口工具窗口中,選擇a 進(jìn)入等待下載狀態(tài);
3)打開燒寫工具DNW ,單擊菜單項(xiàng)“USB Port”/“Transmit ”,找到需要燒寫的 .bin 文件,雙擊,即可完成目標(biāo)文件燒寫至NandFlash 中。
(6)檢查燒寫成果
將內(nèi)存選擇開關(guān)打到“NandFlash ”,按開發(fā)板上的復(fù)位鍵重新啟動(dòng),在SecureCRT 窗口中,會(huì)顯示剛燒寫的測(cè)試程序功能選擇菜單,選擇功能:“4:Test interupt and key scan ”,即可在開發(fā)板屏幕上顯示剛才輸入的漢字,按開發(fā)板上的上、下、左、右鍵,還能移動(dòng)文字窗口。