当前位置:首页 > 单片机 > 单片机
[导读] uC/GUI是MICrigm公司推出的用于嵌入式系统的图形用户接口(graphics user interface,GUI)软件包,由于uC/GUI完全以ANSI-C编写,因此它与处理器无关,可以很方便地移植到不同的操作系统和嵌入式微处理

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)|(2<<5)|(MVAL_USED<<7)|(0x3<<8)|(0x3<<10)|(CLKVAL_COLOR<<12);

//dISAble,8B_SNGL_SCAN,WDLY=8clk,WLH=8clk,rLCDCON2=(LINEVAL)|(HOZVAL_COLOR<<10)|(10<<21);

//LINEBLANK=10(without any calculation)

rLCDSADDR1= (0x3<<27) | (((U32)frameBuffer256>>22)<<21)|M5D((U32)frameBuffer256>>1);

//256-color,LCDBANK,LCDBASEU

rLCDSADDR2=M5D((((U32)frameBuffer256+(SCR_XSIZE*LCD_YSIZE))>>1))|(MVAL<<21);

rLCDSADDR3= (LCD_XSIZE/2) | (((SCR_XSIZE-LCD_XSIZE)/2)<<9);

//The following valuehas 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)|(2<<5)|(0<<7)|(0x3<<8)|(0x3<<10)|(4<<12);

}

经过以上几步,就完成了液晶的硬件驱动,下面就是移植软件包,调用底层驱动,完成复杂的显示任务。

3、uC/GUI软件包的移植

3.1 uC/GUI特点

(1)支持任何8位、16位和32位的CPU,只要求CPU具有相应的ANSI-C编译器即可;

(2)所有硬件接口定义都使用可配置的宏;

(3)字符、位图可显示与LCD的任意点,并不限制与字节长度的整数倍数地址;

(4)所有程序在长度和速度方面都进行了优化,结构清晰;

(5)对于慢速的LCD控制器,可以使用缓冲存储器减少访问时间,提高显示速度。

3.2 uC/GUl移植步骤

在使用uC/GUI时,可以按照以下几个步骤来进行:

(1)按照需要,定制uC/GUI;

(2)指定硬件设备的地址,编写接口驱动代码;

(3)编译、链接、调试例子程序;

(4)修改例子程序,并测试增加需要的功能;

(5)编写自己的应用程序。

3.3 具体实现

(1)首先介绍uC/GUI的目录结构和基本配置。

uC/GUI主要目录如下:

GUI/ConvertMono 使用黑白显示设备时,所要使用的灰度转换函数

GUI/ConvertColor 使用彩色显示设备时,使用的色彩转换函数

GUI/Config 包含了对uC/GUI进行配置的一些文件

GUI/Core uC/GUI核心代码

GUI/Font uC/GUI与字体相关的代码文件

GUI/LCDDriver LCD驱动代码文件

GUI/MemDev 内存设备支持文件代码

GUI/Touch 输入设备支持的文件代码

GUI/Widget uC/GU1支持的控件代码,包括编辑框、列表框、按钮和选择框等

GUI/WM uC/GUI窗口管理部分代码

(2)修改uC/GUI,使之适于移植。

在ADS环境中新建一个工程,将上述gui文件夹下的所有文件加入工程。

将Config文件夹下的3个文件GUIConf.h、

GUITouchConf.h和LCDConf.h加入新工程,如下修改LCDConf.h的内容:

C程序

/*LCDConf.h*/

#ifndef LCDCONF_H

#define LCDCONF_H

#define LCDG4 //lcd颜色数,必须定义,LCDMONO(单色),LCDG4(四级灰度),LCDG16(16级灰度)

#define LCD_XSIZE(640) /* LCD水平分辨率 */

#define LCD_YSIZE(480) /* LCD垂直分辨率 */

#define LCD BITSPERPIXEL(8)#endif /*LCDC0NF_H*//*以下是S3C44B0X LCD控制器的配置*/

#include "..incoption.h"

#define SCR_XSIZE (640) //视窗屏幕大小

#define SCR_YSIZE (480)#define LCD_XSIZE (640) //液晶屏幕大小

#define LCD_YSIZE (480)#define M5D(n)((n)&0x1fffff)

#define ARRAY_SIZE_G4(SCR_XSIZE/4*SCR_YSIZE)

#define HOZVAL (LCD_XSIZE/4-1)

#define HOZVAL_COLOR (LCD_XSIZE*3/8-1)

#define LINEVAL (LCD_YSIZE-1)

#define MVAL (13)

#define CLKVAL_G4 (10)

#define MVAL_USED 0

#endif /*LCDCONF_H */

(3)加载LCD驱动。

LCD驱动程序如前面所述,保存在lcd44b0.c中。出了底层的初始化函

本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除。
换一批
延伸阅读

ARM系统几乎都采用Linux的操作系统,而且几乎所有的硬件系统都要单独构建自己的系统,与其他系统不能兼容,这也导致其应用软件不能方便移植,这一点一直严重制约了ARM系统的发展和应用。GOOGLE开发了开放式的Andro...

关键字: Linux x86 ARM

随着计算需求的多样化,尤其是随着移动设备、嵌入式系统和云计算的兴起,ARM 和 x86 架构之间的争论变得更加突出。ARM(高级 RISC 机器)和 x86 代表两种不同类型的处理器架构,每种架构都针对不同的工作负载和用...

关键字: Linux x86 ARM

从画质优化 (NSS) 到帧率提升 (NFRU) 和光线追踪(NSSD),Arm 计划覆盖移动端图形处理的多个维度,推动边缘 AI 图形革命。而未来通过持续的技术迭代,Arm也将保持在移动计算领域的技术领先,满足手游、A...

关键字: ARM 神经图形技术 GPU AI ML

7月31日消息,据媒体报道,芯片架构提供商Arm Holdings首席执行官Rene Haas宣布,公司正加大投入开发自有芯片产品,此举标志着其从传统IP授权模式向提供实体芯片的战略重大转变。

关键字: ARM META

7月28日消息,2025年,中国AI硬件市场规模将首次突破万亿元大关。

关键字: AI ARM

受生成式 AI 驱动, RISC-V 芯片市场快速发展。预计到2030年,RISC-V SoC出货量将达到1618.1亿颗,营收将达到927亿美元。其中,用于AI加速器的RISC-V SoC出货量将达到41亿颗,营收将达...

关键字: RISC-V CPU AI CUDA ARM 推理
关闭