uC/GUI在ARM 内核S3C44B0X的移植实例
uC/GUI是Micrigm 公司推出的用于嵌入式系统的图形用户接口(graphics user interface,GUI)软件包,由于uC/GUI完全以ANSI-C编写,因此它与处理器无关,可以很方便地移植到不同的操作系统和嵌入式微处理器上,并可支持不同尺寸的图形液晶显示器。它采用层次化的设计,功能强大,移植方便,被广泛地应用于嵌入式领域,如PDA、机顶盒以及DVD NCD播放机等。本文详细介绍了uC/GUI在ARM 内核S3C44B0X的移植。实践证明uC/GUI具有良好的实时性和稳定性以及广泛的应用前景。
1、硬件连接与液晶显示原理
本设计使用的硬件采用ARM7开发板,液晶模块为L78C64,它是7.8in 256色STN型LCD显示屏,分辨率为640×480。
LCD控制器外部接口信号的定义及其与LCD模块各信号之间的对应关系如下:
(1)VFRAME:LCD控制器与LCD驱动器之间的帧同步信号。该信号负责指出LCD屏新的一帧开始的时间。LCD控制器在一个完整帧显示完成后立即插入一个VFRAME信号,并开始新一帧的显示。该信号与LCD模块的YD信号相对应;
(2)VLINE:LCD控制器和LCD驱动器之间的线同步脉冲信号。该信号用于将LCD驱动器水平线(行)移位寄存器的内容传送给LCD屏显示。LCD控制器在整个水平线(整行)数据移入LCD控制器后,插入一个VLINE信号。该信号与LCD模块的LP信号相对应;
(3)VCLK:LCD控制器和LCD驱动器之间的像素时钟信号。由LCD控制器送出的数据在VCLK的上升沿处送出,在VCLK的下降沿被LCD驱动器采样。该信号与LCD模块的XCK信号相对应;
(4)VM:LCD驱动器的AC信号。VM信号被LCD驱动器用于改变行和列的电压极性,从而控制像素点的显示和熄灭。VM信号可以与每个帧同步,也可以与可变数量的VLINE信号同步;
(5)VD3~0 LCD:像素点的数据输入端口。与LCD模块的D3~0相对应:
(6)VD7~4 LCD:像素点的数据输入端口。与LCD模块的D7~4相对应。
液晶显示原理:写满整个屏的数据称为1个“帧”数据,YD是帧同步信号,该信号启动LCD屏的新一帧数据。两个YD脉冲之间的时间长度称为帧周期。根据LCD模块的特性,刷新时间为12~14ms,频率为70~80Hz。每一帧包括480个LP脉冲。LP为行(共480行)数据输入锁存信号,也就是行同步脉冲信号。该信号启动LCD屏的新一行数据。XCK为行数据输入信号,也就是每1行中像素点数据传输的时钟信号。每组8位的数据在XCK的下降沿被输入锁存,因此,每1行包括640×3/8个XCK脉冲信号。D0~D7是8位的显示数据输入信号。
2、驱动程序设计
下面分三步完成液晶的初始化。
(1)I/O口的初始化
由于采用S3C44B0X的PC接口和PD接口作为LCD驱动接口,因此,需要设置PC接口工作在第3功能状态和PD接口工作在第2功能状态。
(2)相应控制寄存器的设置方法
S3C44B0X包括一个LCD控制器时序发生器TIMEGEN, 由它来产生VFRAM,VLINE,VCLK和VM 控制时序。这些控制信号由寄存器LCOCON1和LCDCON2进行配置。通过对寄存器种配置项目的设置,TIMEGEN就可以产生适应于各种LCD屏的控制信号了。
VFRAM和VLINE脉冲的产生是通过对LCDCON2寄存器的HOZVAL和LINEVAL进行配置来完成的。每个域都与LCD的尺寸和显示模式有关。
其中,HOZVAL=(显示宽度/VD数据线位数)-1。
在彩色模式下,显示宽度=3×每行的像素点数。
对所选的液晶模块,HOZVAL=(640×3/8)-1;LINEVAL=(显示宽度)-1。
对所选的液晶模块,LlNEVAL=480-1。
VCLK信号的频率可以通过LCDCON1寄存器的CLKVAL域来确定,即
VCLK=MCLK/(CLKVAL×2)
LCD控制器的最大VCLK频率为16.5MHz,几乎支持所有已有的LCD驱动器。由于上述关系,CLKVAL的值决定了VCLK的频率。为了确定CLKVAL的值,应该计算一下LCD控制器向VD端口传输数据的速率,以便使VCLK的值大于数据传输的速率。
数据传输速率的公式为:
数据传输速率=HS×VS×FR×MV
其中,HS—LCD的行像素值;VS—LCD的列像素值:FR—帧速率;MV—模式值,这里取8位单扫描,彩色。
对于所选用的液晶模块:HS=640;VS=480;FR=70Hz:MV=3/8。因此,数据传输速率=640×480×70×3/8=8,064,000Hz。
VCLK值应该大于8MHz而小于16MHz,因此,CLKVAL可以取9~15。
(3)完整的液晶初始化程序
C程序
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)frameBuffe
移植 实例 S3C44B0X 内核 ARM uC GUI 相关文章:
- 嵌入式Linux内核移植相关代码分析(04-21)
- 在Ubuntu上建立Arm Linux 开发环境(04-23)
- 蓝牙无线耳机设计及VxWorks移植方法(07-21)
- U-Boot的编译与移植到QT-S3C44B0X开发板上(03-08)
- LPC2292的μC/OS-II硬件抽象层构建(04-26)
- μC/OS-Ⅱ在MSP430F149上的移植(03-01)