基于嵌入式處理器S3C44B0X的μC/GUI設計
硬件平臺中,S3C44B0X為顯示單獨分配一個(gè)專(zhuān)用DMA通道,這樣可大大節省CPU資源,使系統速度更快。內存方面,系統分配一個(gè)規定大小的內存作為實(shí)屏顯示內存,處理器按指定的刷新頻率使用專(zhuān)用DMA通道將內存中的數據寫(xiě)入LCD的顯示緩沖區,實(shí)現LCD的圖形界面顯示。
4. μC/GUI在S3C44B0X上的移植
4.1 移植步驟
一般的移植過(guò)程可分為以下步驟進(jìn)行:
(1)定制自己需要的μC/GUI;(2)指定硬件設備的地址,編寫(xiě)接口驅動(dòng)代碼;(3)編譯、鏈接、調試子程序;(4)測試、修改、增加自己需要的功能;(5)編寫(xiě)自己的應用程序;限于篇幅限制,本文只給出移植的核心步驟:接口驅動(dòng)程序代碼的編寫(xiě)。
4.2 μC/GUI與輸入輸出設備驅動(dòng)接口模塊設計
本文以L(fǎng)CD驅動(dòng)接口模塊設計為例介紹在μC/GUI移植過(guò)程中LCD驅動(dòng)程序的編寫(xiě),以最終實(shí)現圖形顯示。
驅動(dòng)程序主要是LCD初始化,這個(gè)函數完成對44B0X LCD控制器的配置、顯存的映射等。本文以筆者使用320×240彩色LCD為例給出初始化程序的編寫(xiě)。具體如下:
void LCD_Init(void)
{int i;
LCD_DisplayOpen(FALSE);// /* 關(guān)LCD顯示 */
for(i=0; i320*240; i++) /* 初始化顯存 */
*(pLCDBuffer256+i) = 0x0;
rPDATD = 0xff;;
rPCOND = 0xaaaa; /* PDATD[7 :0]: 此處初始化為0xff */
rPUPD = 0x00; /* PCOND[15:0]: 配置為功能端 */
/* PUPD [7 :0]: 允許相應位的上拉電阻(0=允許, 1=禁止) */
rLCDCON1 = (0)|(DISMODE5)|(WDLY8)|(WLH10)|(CLKVAL12);
/* disable,8B_SNGL_SCAN,WDLY=16clk,WLH=16clk, CLKVAL=10*/
rLCDCON2 = (LINEVAL)|(HOZVAL10)|(LINEBLANK21);
/* 使用彩色模式, LCDBANK=0xc000000, LCDBASEU=0x0 */
rLCDSADDR1= (MODESEL27) | (((U32)pLCDBuffer256>>22)21) |
M5D((U32)pLCDBuffer256>>1);
rLCDSADDR2= M5D(((U32)pLCDBuffer256+(LCDWIDTH*LCDHEIGHT))>>1) |
(MVAL21);
rLCDSADDR3= PAGEWIDTH | (OFFSIZE9);
rREDLUT = 0xfdb97531;
rGREENLUT = 0xfdb97531; /* 設置紅綠藍三色的顏色值*/
rBLUELUT = 0xfb73;
rDITHMODE = 0x0;
rDP1_2 = 0xa5a5;
rDP4_7 = 0xba5da65;
rDP3_5 = 0xa5a5f;
rDP2_3 = 0xd6b;
rDP5_7 = 0xeb7b5ed;
rDP3_4 = 0x7dbe;
rDP4_5 = 0x7ebdf;
rDP6_7 = 0x7fdfbfe; /* 使能8位單掃描/
rLCDCON1 = (1)|(DISMODE5)|(WDLY8)|(WLH10)|(CLKVAL12);
Delay(5000);
LCD_BkLight(TRUE); /* 開(kāi)背光 */
LCD_DisplayOpen(TRUE); /* 打開(kāi)LCD顯示 */}
完成如上LCD驅動(dòng)以后, 再設置相應的中斷服務(wù)子程序(IS), μC/GUI即可以穩定地運行在S3C44B0X硬件平臺上。
評論