LPC1788 emWIN移植笔记(一)–LCD驱动移植

最近在学习LPC1788的LCD控制器,做完基本的显示和触屏实验后,就想着学习一下emWIN。

于是,在NXP的网站LPCware.com上下载了emWIN的库和例程。可是例程和自己的板子不是配套的,需要对其修改后才可以使用。经过好几个小时的修改,例程终于在我的LPC1788开发板上跑起来了。期间遇到了一些问题,下面就记录一下移植步骤,以供大家参考。但是仍然存在这一些问题,还望大家指教。

 

一、修改emWIN配置文件

移植emWIN需要修改GUIconf.c和LCDconf.c两个配置文件即可(GUIconf.c例程中已经写好,这部份不修改也可)。

GUIconf.c主要为emWIN分配管理空间,这一部分主要是修改GUI_X_Config函数,如下图所示。

emWIN_GUICONF 在MDK中对GUI_X_Config()中起效的是

这句话会把_aMemory数组放在名为GUI_RAM的段中,zero_init属性表示不对这片区域初始化。这需要在分散加载文件中定位。

在LCDConf.c中也有类似的存储空间分配:

LCD_CONF

__align(8) 表示对齐方式,8字节对齐,要求首地址的最后三位为0。_aVRAM数组大小为何为FB_XSIZE * FB_YSIZE / (4 / PIXEL_WIDTH)] 自己可以根据屏幕分辨率和像素位深来计算一下。

GUI_RAM段和VRAM段都需要在分散加载文件中分配好存储区域,例程的分散加载文件(FLASH.sct)如下:

可以在.map文件中看到段对应的地址

mapGUI_RAM首地址 OXA0000000 VRAM首地址0xA0C00000(因为_aMemory大小为(1024 * 1024) * 12 MByte,故偏移量为0xC00000)

下面需要修改LCDconf.c

修改其中的LCD_X_Config和LCD_X_DisplayDriver函数调用的InitController函数(如下图)

emWIN_LCD

原函数:

修改后的函数:

 

#ifndef _WINDOWS

因为暂时还没有加入触摸屏,所以把_InitTouch();也注释掉了。

此外还需把

改为

(因为原程序是靠EEPROM来配置的)

至此配置文件已经修改好了。

二、修改项目的启动文件(startup_LPC177x_8x_Keil.s)

修改上面的程序为:

三、修改主程序文件(main.c)

上面的程序改为:

在主文件中加入自己的SDRAM驱动以及LCD驱动(LCD驱动也可以写在LCDconf.C中的LCD_X_DisplayDriver函数调用的_InitController()函数里)

LPC1788 官方emWIM例程的移植修改大致就是上面的步骤,具体细节需要根据编译出现的细节对一些函数进行删减,编译后下载就可以看到如下画面:

IMG_20140601_222231

如过想尝试SEGGER公司的例程,则需要在项目中移除已存在的上面所示的演示例程,添加SEGGER官方例程,在…\NXP_emWin522_BSP\Start\Application\SEGGERDEMO文件目录下:

sample1sample2 然后添加相应的头文件目录,在主程序中添加头文件GUIDEMO.h,重新编译即可。演示程序的开关在GUIDEMO.h中,可以选择演示哪个例程。

guidemo

 

IMG_20140601_194625IMG_20140601_194708

但是编译下载后,发现LCD显示的动画会出现错位闪屏的现象,在MDK上设置use MicroLIB后情况得到较大幅度好转,但是

问依然存在,不知如何解决。

以后,将会继续添加对触摸程序的移植。

IMG_20140601_221843

IMG_20140601_221851

 

Technorati 标签: ,

7 Comments

  1. maotouxiaohuo

    请发个例程,1136105381@qq.com

    Reply

  2. 何凯

    求学习,能发个例程到我这个邮箱吗hk163hikari@163.com,谢谢了!

    Reply

  3. Coming

    你好,求发这个例程给我学习一下,邮箱353249573@qq.com 谢谢

    Reply

  4. guilcd

    【能接emWin的SPI串口屏】
    GLCD功能类似于SPI串口屏,只是SPI接口通信更快速,以至能作为emWin(第三方界面软件库)的图形显示屏,弥补emWin使用字库/图片麻烦以及刷屏慢的缺点,这样emWin做界面就更精美、便捷!
    emWin界面软件库是运行在用户CPU中的;GLCD负责储存字库和图片,以及接收由emWin发出的绘图指令,并且执行这些绘图指令以显示文字、图片、2D图形等,绘图指令代替像素操作可大大减轻用户CPU的负担;GLCD还管理触摸屏、鼠标、键盘、蜂鸣器、RTC时钟等外设。
    更多介绍请看:www.neqee.com

    Reply

  5. motine

    老兄,闪屏现象解决了吗?我的也有点闪屏,重新发同样的页给显示模块会看得到有闪动情况,之前用UCGUI不会。

    Reply

  6. lengbuding

    由衷的感谢up主,我也成功了。低谷中的贵人。你不写这篇文章,我想我一个月都不一定能搞定

    Reply

    • 一念花开

      其实这篇文章还有一个重要问题没有提及,这篇文章中图片显示的色彩其实是不正确的,一定注意自己屏幕的RGB模式。当时有配置,只是一直没有更新这篇文章。

      Reply

Leave a Reply

*