uC/GUI在ARM 內(nèi)核S3C44B0X的移植實例
uC/GUI是Micrigm 公司推出的用于嵌入式系統(tǒng)的圖形用戶接口(graphics user interface,GUI)軟件包,由于uC/GUI完全以ANSI-C編寫,因此它與處理器無關(guān),可以很方便地移植到不同的操作系統(tǒng)和嵌入式微處理器上,并可支持不同尺寸的圖形液晶顯示器。它采用層次化的設(shè)計,功能強大,移植方便,被廣泛地應(yīng)用于嵌入式領(lǐng)域,如PDA、機(jī)頂盒以及DVD NCD播放機(jī)等。本文詳細(xì)介紹了uC/GUI在ARM 內(nèi)核S3C44B0X的移植。實踐證明uC/GUI具有良好的實時性和穩(wěn)定性以及廣泛的應(yīng)用前景。
本文引用地址:http://www.ex-cimer.com/article/150012.htm1、硬件連接與液晶顯示原理
本設(shè)計使用的硬件采用ARM7開發(fā)板,液晶模塊為L78C64,它是7.8in 256色STN型LCD顯示屏,分辨率為640×480。
LCD控制器外部接口信號的定義及其與LCD模塊各信號之間的對應(yīng)關(guān)系如下:
(1)VFRAME:LCD控制器與LCD驅(qū)動器之間的幀同步信號。該信號負(fù)責(zé)指出LCD屏新的一幀開始的時間。LCD控制器在一個完整幀顯示完成后立即插入一個VFRAME信號,并開始新一幀的顯示。該信號與LCD模塊的YD信號相對應(yīng);
(2)VLINE:LCD控制器和LCD驅(qū)動器之間的線同步脈沖信號。該信號用于將LCD驅(qū)動器水平線(行)移位寄存器的內(nèi)容傳送給LCD屏顯示。LCD控制器在整個水平線(整行)數(shù)據(jù)移入LCD控制器后,插入一個VLINE信號。該信號與LCD模塊的LP信號相對應(yīng);
(3)VCLK:LCD控制器和LCD驅(qū)動器之間的像素時鐘信號。由LCD控制器送出的數(shù)據(jù)在VCLK的上升沿處送出,在VCLK的下降沿被LCD驅(qū)動器采樣。該信號與LCD模塊的XCK信號相對應(yīng);
(4)VM:LCD驅(qū)動器的AC信號。VM信號被LCD驅(qū)動器用于改變行和列的電壓極性,從而控制像素點的顯示和熄滅。VM信號可以與每個幀同步,也可以與可變數(shù)量的VLINE信號同步;
(5)VD3~0 LCD:像素點的數(shù)據(jù)輸入端口。與LCD模塊的D3~0相對應(yīng):
(6)VD7~4 LCD:像素點的數(shù)據(jù)輸入端口。與LCD模塊的D7~4相對應(yīng)。
液晶顯示原理:寫滿整個屏的數(shù)據(jù)稱為1個“幀”數(shù)據(jù),YD是幀同步信號,該信號啟動LCD屏的新一幀數(shù)據(jù)。兩個YD脈沖之間的時間長度稱為幀周期。根據(jù)LCD模塊的特性,刷新時間為12~14ms,頻率為70~80Hz。每一幀包括480個LP脈沖。LP為行(共480行)數(shù)據(jù)輸入鎖存信號,也就是行同步脈沖信號。該信號啟動LCD屏的新一行數(shù)據(jù)。XCK為行數(shù)據(jù)輸入信號,也就是每1行中像素點數(shù)據(jù)傳輸?shù)臅r鐘信號。每組8位的數(shù)據(jù)在XCK的下降沿被輸入鎖存,因此,每1行包括640×3/8個XCK脈沖信號。D0~D7是8位的顯示數(shù)據(jù)輸入信號。
2、驅(qū)動程序設(shè)計
下面分三步完成液晶的初始化。
(1)I/O口的初始化
由于采用S3C44B0X的PC接口和PD接口作為LCD驅(qū)動接口,因此,需要設(shè)置PC接口工作在第3功能狀態(tài)和PD接口工作在第2功能狀態(tài)。
(2)相應(yīng)控制寄存器的設(shè)置方法
S3C44B0X包括一個LCD控制器時序發(fā)生器TIMEGEN, 由它來產(chǎn)生VFRAM,VLINE,VCLK和VM 控制時序。這些控制信號由寄存器LCOCON1和LCDCON2進(jìn)行配置。通過對寄存器種配置項目的設(shè)置,TIMEGEN就可以產(chǎn)生適應(yīng)于各種LCD屏的控制信號了。
VFRAM和VLINE脈沖的產(chǎn)生是通過對LCDCON2寄存器的HOZVAL和LINEVAL進(jìn)行配置來完成的。每個域都與LCD的尺寸和顯示模式有關(guān)。
其中,HOZVAL=(顯示寬度/VD數(shù)據(jù)線位數(shù))-1。
在彩色模式下,顯示寬度=3×每行的像素點數(shù)。
對所選的液晶模塊,HOZVAL=(640×3/8)-1;LINEVAL=(顯示寬度)-1。
對所選的液晶模塊,LlNEVAL=480-1。
VCLK信號的頻率可以通過LCDCON1寄存器的CLKVAL域來確定,即
VCLK=MCLK/(CLKVAL×2)
LCD控制器的最大VCLK頻率為16.5MHz,幾乎支持所有已有的LCD驅(qū)動器。由于上述關(guān)系,CLKVAL的值決定了VCLK的頻率。為了確定CLKVAL的值,應(yīng)該計算一下LCD控制器向VD端口傳輸數(shù)據(jù)的速率,以便使VCLK的值大于數(shù)據(jù)傳輸?shù)乃俾省?/p>
數(shù)據(jù)傳輸速率的公式為:
數(shù)據(jù)傳輸速率=HS×VS×FR×MV
其中,HS—LCD的行像素值;VS—LCD的列像素值:FR—幀速率;MV—模式值,這里取8位單掃描,彩色。
對于所選用的液晶模塊:HS=640;VS=480;FR=70Hz:MV=3/8。因此,數(shù)據(jù)傳輸速率=640×480×70×3/8=8,064,000Hz。
VCLK值應(yīng)該大于8MHz而小于16MHz,因此,CLKVAL可以取9~15。
(3)完整的液晶初始化程序
void LCD_Init_Controler()
{
rLCDCON1=(0)|(25)|(MVAL_USED7)|(0x38)|(0x310)|(CLKVAL_COLOR12);
//disable,8B_SNGL_SCAN,WDLY=8clk,WLH=8clk,rLCDCON2=(LINEVAL)|(HOZVAL_COLOR10)|(1021);
//LINEBLANK=10(without any calculation)
rLCDSADDR1= (0x327) | (((U32)frameBuffer256>>22)21)|M5D((U32)frameBuffer256>>1);
//256-color,LCDBANK,LCDBASEU
rLCDSADDR2=M5D((((U32)frameBuffer256+(SCR_XSIZE*LCD_YSIZE))>>1))|(MVAL21);
rLCDSADDR3= (LCD_XSIZE/2) | (((SCR_XSIZE-LCD_XSIZE)/2)9);
//The following value
has to be changed forbetter display.
rREDLUT =0xfdb96420;
rGREENLUT=0xfdb96420;
rBLUELUT=0xfb40;
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;
rLCDCON1= (1)|(25)|(07)|(0x38)|(0x310)|(412);
}
經(jīng)過以上幾步,就完成了液晶的硬件驅(qū)動,下面就是移植軟件包,調(diào)用底層驅(qū)動,完成復(fù)雜的顯示任務(wù)。
3、uC/GUI軟件包的移植
3.1 uC/GUI特點
(1)支持任何8位、16位和32位的CPU,只要求CPU具有相應(yīng)的ANSI-C編譯器即可;
(2)所有硬件接口定義都使用可配置的宏;
(3)字符、位圖可顯示與LCD的任意點,并不限制與字節(jié)長度的整數(shù)倍數(shù)地址;
(4)所有程序在長度和速度方面都進(jìn)行了優(yōu)化,結(jié)構(gòu)清晰;
(5)對于慢速的LCD控制器,可以使用緩沖存儲器減少訪問時間,提高顯示速度。
相關(guān)推薦
技術(shù)專區(qū)
- FPGA
- DSP
- MCU
- 示波器
- 步進(jìn)電機(jī)
- Zigbee
- LabVIEW
- Arduino
- RFID
- NFC
- STM32
- Protel
- GPS
- MSP430
- Multisim
- 濾波器
- CAN總線
- 開關(guān)電源
- 單片機(jī)
- PCB
- USB
- ARM
- CPLD
- 連接器
- MEMS
- CMOS
- MIPS
- EMC
- EDA
- ROM
- 陀螺儀
- VHDL
- 比較器
- Verilog
- 穩(wěn)壓電源
- RAM
- AVR
- 傳感器
- 可控硅
- IGBT
- 嵌入式開發(fā)
- 逆變器
- Quartus
- RS-232
- Cyclone
- 電位器
- 電機(jī)控制
- 藍(lán)牙
- PLC
- PWM
- 汽車電子
- 轉(zhuǎn)換器
- 電源管理
- 信號放大器
評論