![]() ![]() 在移植前, 仔细阅读UC/GUI 3.90的用户手册中关于显示驱动与UC/GUI底层配置信息. 在UC/GUI用户手册中, UC/GUI按接口连接类型分成了几大类, 分别为完全总线型, 简单总线型, 4脚SPI, 3脚SPI, IIC型. 从手册中得知, 本电路中TFT4267与ARM的连接方式属于简单总线型.
移植工作主要是修改LCDConf.h和LCD驱动文件的编写, UC/GUI也提供了一些芯片的驱动文件, 可以从中选择一个接口连接类型相同的芯片驱动文件来修改. 本移植使用LCDSLin.c驱动文件作为参照. LCDConf.h文件的修改 LCD的大小、颜色,对应的LCD控制器以及与硬件连接有关的LCD读写函数在该文件中定义, 按照UC/GUI 的规定,底层的读写LCD函数包括LCD_WRITE_A1()(即写LCD命令)、LCD_WRITE_A0()(写LCD数据)、 LCD_READ_A0()(读LCD状态)、LCD_READ_A1()(读LCD数据),以及LCD初始化函数 LCD_CONTROLLER_INIT(), 这些函数的实现与底层硬件有关,必须根据硬件连接的具体情况编写这些函数。其中LCD的四个读写函数不是都要编写的, 通常根据情况三个就可以了, LCD_READ_A0读状态函数在LCD_WAIT()中使用, 如果LCD写数据不需要等待, 该函数可以定义为空操作. LCD_READ_A1读数据函数在获取像素点颜色值_GetPixel()中时调用, 如果UC/GUI的显示缓存选项打开, 此函数也可定义为空操作. LCD_CONTROLLER_INIT()宏在LCD_L0_Init()函数中调用, 以初始化LCD, 此宏也非必需, 如果没有定义该宏, 必须提供一个LCD初始化函数给LCD_L0_Init()函数调用. 本文具体实现如下: #define S6D0129_CMD (*((volatile unsigned short *) 0x83200000)) #define S6D0129_DAT (*((volatile unsigned short *) 0x83200002)) #define LCD_WRITE_A1(dat) LCD_Write01(dat) //write command #define LCD_WRITE_A0(dat) LCD_Write00(dat) //write data #define LCD_READ_A1() LCD_Read01() //read data void LCD_Write00(unsigned short dat) { S6D0129_DAT = dat; } void LCD_Write01(unsigned short dat) { S6D0129_CMD = dat; } unsigned short LCD_Read01(void) { unsigned short r; r= S6D0129_DAT; return(r); } 驱动文件的编写 下表中的函数为UC/GUI上层各模块调用硬件功能的接口函数, 而它们又调用用户编写的几个基本的函数如画点, 获取单个像素的颜色值等, 因此最基本的移植只需向UC/GUI提供画点函数_SetPixel()和获取像素信息_GetPixel()函数. 下列函数中关于像素点位置坐标都为int型, 须注意与这些函数传递参数时的数据类型, 及发生类型传换时编译器的行为. 表1 硬件接口函数的名称和功能 函数名称 功 能 LCD_L0_InIt() 显示初始化 LCD_L0_ReInIt() 重新初始化而不擦除显示内容 LCD_L0_OFF 关显示 LCD_L0_ON 开显示 LCD_L0_DrawBitmap() 画图 LCD_L0_DrawPixel() 以指定颜色画点 LCD_L0_DrwaVline() 画水平线 LCD_L0_DrwaVline() 画垂直线 LCD_L0_FillRect() 填充一矩形 LCD_L0_XorPixel() 翻转指定点颜色 根据不同的硬件特性, 可以对上表中一些函数实现进行优化, 比如UC/GUI提供的LCDSLin.c文件, 其中LCD_L0_DrawBitmap函数调用了一个DrawBitLine1BPP()画1BPP位图的函数, 驱动必须向DrawBitLine1BPP()提供XY20FF位置转换函数及LCD_WRITE, XY20FF的像素坐标(x,y)转换为显示缓冲的偏移量, LCD_WRITE根据偏移量进行画点的函数. 移植工作最基本的工作实现_SetPixel()和_GetPixel()函数两个函数就可以, 优化可以慢慢熟悉后再进行. |
|