ARM内核的移植实例
256>>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 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)|(25)|(07)|(0x38)|(0x310)|(412);
}
经过以上几步,就完成了液晶的硬件驱动,下面就是移植软件包,调用底层驱动,完成复杂的显示任务。
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中。出了底层的初始化函数LCD_Init_Controler()以外,还需要做以下修改,这里只提关键部分。
主要进行相关的寄存器配置,以及和GUI的接口程序。这里只提及关键部分。
① 定义显示缓冲区时使用的char数据类型,它是8bit的:
unsigned char Bmp[ARRAY_SIZE_G16];//液晶显示缓冲数组
② 定义读写缓冲区时使用的数据类型,也是8bit的U8:
#define LCD_READ_MEM (Off)*((U8*)(frameBuffer256+(((U32)(Off)))))
#define LCD_WRRITE_MEM(Off,data)*((U8*)frameBuffer256+(((U32)(Off)))))=data
#define LCD_WRITE_REG(Off,data)
⑧ 定义液晶总线宽度定义位8bit:
#ifndef LCD_BUSWIDTH
#define LCD_BUSWIDTH(8)
#endif
④ 定义字节顺序:
#define LCD_SWAP_BYTE_ORDER(0)
至此uC/GUI的移植基本上已经完成了。当然这里只提供了移植的关键部分,更多更完整的移植还需要做不少的工作,如触控屏的移植、键盘鼠标的移植以及中文字体的移植等。详情请参阅uC/GUI手册中Getting Started一章。
4、数据显示程序设计
数据显示程序主要是基于uC/GUI平台的GUI函数库,完成字符、曲线的绘制。与画线相关的GUI函数有:
GUI DrawHLine()
原型:void GUI_DrawLine(int x0,int y0,int x1,int y1);
其中,x0、y0、x1、y1分别为UGI坐标系下的起点和终点的横坐标和纵坐标。
GUI DispDec()
原型:void GUI_DispDec(
- 国外现场总线应用实例两则(12-21)
- 三菱PLC编程技巧及实例图解(12-19)
- 单片机的七个创意设计实例(从易到难),附电路图、源代码、演示视频(06-11)
- PCI驱动程序开发实例(02-21)
- 51单片机做信号发生器实例编程(01-16)
- 简单的单片机I/O口扩展实例(05-18)