引言
S3C44B0X" title="S3C44B0X">S3C44B0X微處理器是三星公司專為手持設(shè)備和一般應(yīng)用提供的高性價(jià)比和高性能的微控制器解決方案。它使用ARM7TDMI核,,工作在66MHz,,集成了LCD" title="LCD">LCD控制器等外圍器件。它的LCD控制器具有通用性,能與大多數(shù)LCD顯示模塊接口,。接口設(shè)計(jì),、驅(qū)動(dòng)程序開(kāi)發(fā)都很簡(jiǎn)單,,廣泛應(yīng)用于智能儀表、PDA等的顯示部分,。
內(nèi)置LCD控制器介紹
概述
S3C44B0X內(nèi)置的LCD控制器的作用是將顯示緩存(在系統(tǒng)存儲(chǔ)器中)的LCD數(shù)據(jù)傳輸?shù)酵獠縇CD驅(qū)動(dòng)器,,并產(chǎn)生必須的LCD控制信號(hào)。
它支持灰度LCD和彩色LCD,。在灰度LCD上,,使用基于時(shí)間抖
動(dòng)算法(time-basedditheringalgorithm)和FRC(FrameRateControl)方法,可以支持單色,、4級(jí)灰度和16級(jí)灰度模式的灰度LCD,。在彩色LCD上,可以支持256種色彩,。不同尺寸的LCD具有不同數(shù)量的垂直和水平象素,、數(shù)據(jù)接口、數(shù)據(jù)寬度,、接口時(shí)間和刷新率,。LCD控制器可以進(jìn)行編程控制相應(yīng)的寄存器值,以適應(yīng)不同的LCD顯示板,。
LCD控制器邏輯框圖
圖1為L(zhǎng)CD控制器的邏輯框圖,。從框圖可以看出LCD控制器是用來(lái)實(shí)現(xiàn)傳輸顯示數(shù)據(jù)及產(chǎn)生必要的控制信號(hào),如VFRAME,、VLINE,、VCLK和VM。除了控制信號(hào),,還有顯示數(shù)據(jù)的數(shù)據(jù)端口VD[7:0],。
LCD控制器包括REGBANK、LCDDMA,、VIDPRCS和TIMEGEN,。 REGBANK有18個(gè)可編程寄存器,用于配置LCD控制器,。LCDDMA為專用DMA,,可以自動(dòng)地將顯示數(shù)據(jù)從幀內(nèi)存?zhèn)魉偷絃CD驅(qū)動(dòng)器中。通過(guò)專用DMA,,可以實(shí)現(xiàn)在不需要CPU介入的情況下顯示數(shù)據(jù),。VIDPRCS從LCDDMA接收數(shù)據(jù),將相應(yīng)格式的數(shù)據(jù)通過(guò)TIMEGEN(包含可編程邏輯),,以支持常見(jiàn)的LCD驅(qū)動(dòng)器所需要的不同接口時(shí)間和速率的要求,。TIMEGEN部分產(chǎn)生VFRAME,VLINE,,VCLK和VM等信號(hào),。
LCD控制器提供下列外部接口信號(hào):
VFRAME:LCD控制器和驅(qū)動(dòng)器之間的幀同步信號(hào)。通知LCD屏新的一幀顯示,,LCD控制器在一個(gè)完整幀顯示后發(fā)出VFRAME信號(hào),。
VLINE:LCD控制器和驅(qū)動(dòng)器間同步脈沖信號(hào)。LCD驅(qū)動(dòng)器通過(guò)它將水平移位寄存器的內(nèi)容顯示到LCD屏上,。LCD控制器在一整行數(shù)據(jù)全部傳輸?shù)絃CD驅(qū)動(dòng)器后發(fā)出VLINE信號(hào),。
VCLK:LCD控制器和驅(qū)動(dòng)器之間的象素時(shí)鐘信號(hào)。
VM:LCD驅(qū)動(dòng)器所使用的交流信號(hào),。驅(qū)動(dòng)器用VM打開(kāi)或關(guān)閉象素的行和列電壓極性,。
VD[3:0]:LCD象素?cái)?shù)據(jù)輸出端口。
VD[7:4]:LCD象素?cái)?shù)據(jù)輸出端口,。
LCD控制器的寄存器
LCD控制器通過(guò)18個(gè)可編程寄存器來(lái)配置LCD顯示模塊的尺寸,、顯示模式、接口數(shù)據(jù)寬度等,。
LCD控制寄存器一(LCDCON1)
LCDCON1所在地址:0x01F00000,;
屬性:R/W;
復(fù)位值:0x00000000,。
LCDCON1中各個(gè)位的意義見(jiàn)表1:
LCD控制寄存器二(LCDCON2)
LCDCON2的地址:0x01F00004,;
屬性:R/W;
復(fù)位值:0x00000000,。
LCDCON2中各個(gè)位的意義見(jiàn)表2:
LCD控制寄存器三(LCDCON3)
&n bsp; LCDCON3的地址:0x01F00040,;
屬性:R/W;
復(fù)位值:0x00,。
LCDCON3中各個(gè)位的意義見(jiàn)表3:
幀緩沖區(qū)開(kāi)始地址一(LCDSADDR1)
LCDSADDR1的地址:0x01F00008,;
屬性:R/W;
復(fù)位值:0x000000,。
LCDSADDR1中各個(gè)位的意義見(jiàn)表4:
幀緩沖區(qū)開(kāi)始地址二(LCDSADDR2)
LCDSADDR2的地址:0x01F0000C,;
屬性:R/W;
復(fù)位值:0x000000,。
LCDSADDR2中各個(gè)位的意義見(jiàn)表5:
注:用戶通過(guò)改變LCDBASEU和LCDBASEL的值來(lái)滾動(dòng)屏幕,但在幀結(jié)束時(shí),不能改變LCDBASEU和LCDBASEL的值,因?yàn)轭A(yù)取下一幀的數(shù)據(jù)優(yōu)先于改變幀,如果這時(shí)改變幀,預(yù)取的數(shù)據(jù)將無(wú)效而且顯示不正確,。為了檢查L(zhǎng)INECNT,應(yīng)當(dāng)屏蔽中斷,否則如果在讀LINECNT后,任意中斷剛好執(zhí)行,因?yàn)镮SR的執(zhí)行,LINECNT的值可能無(wú)效。
緩沖區(qū)開(kāi)始地址三(LCDSADDR3)
LCDSADDR3的地址:0x01F00010,;
屬性:R/W,;
復(fù)位值:0x000000。
LCDSADDR3中各個(gè)位的意義見(jiàn)表6:
注:PAGEWIDTH和OFFSIZE必須在ENVID=0時(shí)變化,。
內(nèi)置LCD控制器的應(yīng)用
LCD控制器能與大多數(shù)LCD顯示模塊接口,,例如DMF50081,KCS057QV1AJ等,。 KCS057QV1AJ是由KYOCERA公司生產(chǎn),,具有320 240個(gè)象素點(diǎn),、帶CFL背光的STN(超扭曲向列)256色LCD顯示模塊。它不帶LCD控制器,,很容易與S3C44B0X內(nèi)置的LCD控制器接口,。本節(jié)將詳述它與LCD控制器的硬件接口連線以及它的驅(qū)動(dòng)程序。
LCD控制器與KCS057QV1AJ接口設(shè)計(jì)
KCS057QV1AJ提供的外部接口信號(hào)線如下:
FRM:驅(qū)動(dòng)器掃描的同步信號(hào)線,;
LOAD:數(shù)據(jù)鎖存信號(hào)線,;
CP:數(shù)據(jù)移位時(shí)鐘信號(hào)線;
DISP:顯示控制信號(hào)線,;
&nbs
p; D[7:0]:8根顯示數(shù)據(jù)輸入線,。
在KCS057QV1AJ與LCD控制器之間接線時(shí),KCS057QV1AJ的FRM,、LOAD,、CP、D[7:0]分別和LCD控制器的VFRAME,、VLINE,、VCLK、VD[7:0]相連,。DISP引腳與S3C44B0X的GPIO的GPC15相連,,通過(guò)GPC15來(lái)控制LCD顯示模塊的打開(kāi)和關(guān)閉。具體接線如圖2,。
KCS057QV1AJ驅(qū)動(dòng)程序開(kāi)發(fā)
驅(qū)動(dòng)程序包括初始化S3C44B0X端口D和端口C的函數(shù),,初始化LCD控制器的函數(shù),打開(kāi)和關(guān)閉LCD顯示模塊的函數(shù),,在LCD顯示模塊上顯示條紋的函數(shù),,所有的函數(shù)都有詳細(xì)的注釋。
初始化端口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)|(119<<10)|(15<<21);
/設(shè)置確定行掃描的返回時(shí)間為15個(gè)MCLK,,設(shè)置屏為彩色320 240點(diǎn),;
LCDBANK=0xc000000>>22;/設(shè)置顯示緩沖區(qū)首地址在系統(tǒng)存儲(chǔ)器中的位置;
LCDBASEU=0x0;/設(shè)置緩沖區(qū)的開(kāi)始地址;
LCDBASEL=LCDBASEU+(160) 240;
rLCDSADDR1=(0x3<<27)|(LCDBANK<<21)|LCDBASEU;
/設(shè)置顯示模塊為彩色模式等,;
rLCDSADDR2=(0<<29)|(0<<21)|LCDBASEL;
rLCDSADDR3=(320/2)|(0<<9);/不使用虛屏,;
rREDLUT=0xfca86420;/設(shè)置紅色查表寄存器,
與特定的顯示要求有關(guān),;
rGREENLUT=0xfca86420;/設(shè)置綠色查表寄存器,,與特定的顯示要求有關(guān);
rBLUELUT=0xfffffa50;/設(shè)置蘭查表寄存器,,與特定的顯示要求有關(guān);
rLCDCON1=LCDCON1_ENVID|0<<1|0<<2|0<<3|(2<<5)
|1<<7|(0x3<<8)|(0x3<<10)|(CLKVAL<<12);
/使能視頻輸出,,8位單掃描方式,,設(shè)置WDLY,WLH,CLKVAL,;
for(i=0;i<80*240;i++)/顯示緩沖區(qū)清零,。
*(pLCDBuffer16+i)=0x0;
}
從圖2知,GPC15用來(lái)打開(kāi)關(guān)閉LCD,。打開(kāi)和關(guān)閉LCD顯示模塊的函數(shù)如下:
void LCDDisplayOpen(U8 isOpen)
{
if(isOpen){
rPDATC|=0x8000;/打開(kāi)LCD
}
else{
rPDATC&=0x7fff;/關(guān)閉LCD
}
}
在LCDBANK寄存器中已經(jīng)定義了顯示緩沖區(qū)在系統(tǒng)存儲(chǔ)器的段首地址為0xc000000,,要顯示字符、圖片只需將字符,、圖片取模得到的數(shù)據(jù)送到該緩沖區(qū)就可以了,。但是要注意,彩色LCD是8位數(shù)據(jù)表示一個(gè)象素,。對(duì)緩沖區(qū)首地址進(jìn)行如下定義:
&n
bsp; U32 pLCDBuffer16=(U32*)0xc000000;
下面舉一個(gè)在整個(gè)屏上顯示明暗相間的條紋的程序,,顯示明暗條紋函數(shù)如下:
void LCDstripe ()
{
int i,lcddata;
for(i=0;i<(320*240)/4;i++)
{
lcddata0=0x0ffff0000;
*(pLCDBuffer16+i)=lcddata;/向幀緩沖區(qū)送數(shù)據(jù),每次4個(gè)象素的數(shù)據(jù),。
}