S3C44B0X微處理器內(nèi)置LCD控制器
KCS057QV1AJ驅(qū)動程序開發(fā)
驅(qū)動程序包括初始化S3C44B0X端口D和端口C的函數(shù),初始化LCD控制器的函數(shù),打開和關(guān)閉LCD顯示模塊的函數(shù),在LCD顯示模塊上顯示條紋的函數(shù),所有的函數(shù)都有詳細的注釋。
初始化端口D和端口C函數(shù)如下:
void Port_Init(void)
{
rPCONC=0x5f55ffff;/GPC15為輸出端口,GPC4-GPC7分配給LCD數(shù)據(jù)線VD7-VD4;
rPUPC=0x0;/端口C所有的引腳上拉允許;
rPDATC=0x3fff; /端口C所有的引腳初始化為高電平;
rPCOND=0xaaaa;/端口D所有的引腳分配給LCD控制器;
rPUPD=0x0;/端口D所有的引腳上拉允許;
rPDATD=0xff;/端口D所有的引腳初始化為高電平。
}
初始化LCD控制器函數(shù)如下:
void LCD_Init()
{
int i;
U32 LCDBASEU,LCDBASEL,LCDBANK;
LCDDisplayOpen(FALSE);/關(guān)閉LCD;
rLCDCON1=(0);/關(guān)閉視頻輸出;
rLCDCON2=(239)|(11910)|(1521);
/設(shè)置確定行掃描的返回時間為15個MCLK,設(shè)置屏為彩色320 240點;
LCDBANK=0xc000000>>22;/設(shè)置顯示緩沖區(qū)首地址在系統(tǒng)存儲器中的位置;
LCDBASEU=0x0;/設(shè)置緩沖區(qū)的開始地址;
LCDBASEL=LCDBASEU+(160) 240;
rLCDSADDR1=(0x327)|(LCDBANK21)|LCDBASEU;
/設(shè)置顯示模塊為彩色模式等;
rLCDSADDR2=(029)|(021)|LCDBASEL;
rLCDSADDR3=(320/2)|(09);/不使用虛屏;
rREDLUT=0xfca86420;/設(shè)置紅色查表寄存器, 與特定的顯示要求有關(guān);
rGREENLUT=0xfca86420;/設(shè)置綠色查表寄存器,與特定的顯示要求有關(guān);
rBLUELUT=0xfffffa50;/設(shè)置蘭查表寄存器,與特定的顯示要求有關(guān);
rLCDCON1=LCDCON1_ENVID|01|02|03|(25) |17|(0x38)|(0x310)|(CLKVAL12);
/使能視頻輸出,8位單掃描方式,設(shè)置WDLY,WLH,CLKVAL;
for(i=0;i80*240;i++)/顯示緩沖區(qū)清零。
*(pLCDBuffer16+i)=0x0;
}
從圖2知,GPC15用來打開關(guān)閉LCD。打開和關(guān)閉LCD顯示模塊的函數(shù)如下:
void LCDDisplayOpen(U8 isOpen)
{
if(isOpen)
{
rPDATC|=0x8000;/打開LCD
}
else{
rPDATC=0x7fff;/關(guān)閉LCD
}
}
在LCDBANK寄存器中已經(jīng)定義了顯示緩沖區(qū)在系統(tǒng)存儲器的段首地址為0xc000000,要顯示字符、圖片只需將字符、圖片取模得到的數(shù)據(jù)送到該緩沖區(qū)就可以了。但是要注意,彩色LCD是8位數(shù)據(jù)表示一個象素。對緩沖區(qū)首地址進行如下定義:
U32 pLCDBuffer16=(U32*)0xc000000;
下面舉一個在整個屏上顯示明暗相間的條紋的程序,顯示明暗條紋函數(shù)如下:
void LCDstripe ()
{
int i,lcddata;
for(i=0;i(320*240)/4;i++)
{
lcddata0=0x0ffff0000;
*(pLCDBuffer16+i)=lcddata;/向幀緩沖區(qū)送數(shù)據(jù),每次4個象素的數(shù)據(jù)。
}
評論