TFT-LCD控制器RA8889ML3N的显示控制功能如何移植到emWin中-教程

描述

前言
瑞佑科技RA8889ML3N是一款功能强大的彩色液晶显示控制器,内置128Mb SDRAM, 支持1366x2048高分辨率液晶显示屏,单片机MCU端支持8080/6800 8/16-bit接口,以及¾线SPI 或IIC接口。 RA8889支持多图层应用、画几何图形引擎、2D图形加速引擎(BTE)、画中画(PIP 实现弹窗利器)、支持BMP、JPEG格式图片显示,并内置了视频解码功能。

如何将RA8889强大的显示控制功能移植到emWin平台,以求做出流畅、炫酷的UI操作界面,接下来就说明我们如何将RA8889的应用驱动移植到emWin GUI Library里,实现在emWin平台上使用RA8889内置的液晶显示控制功能。

以下范例是基于使用瑞福科技的RA8889 EV Board开发板,使用STM32F103VET6 MCU,和使用Keil MDK 编译。

TFT

详细步骤如下:

一、 获得 emWin Graphic Library
1. 安装 Keil MDK,在 C:Keil_v5ARMSeggeremWin 路径下获得 emWin library

TFT


 

2. 在 C:Keil_v5ARMSeggeremWinDoc 获得 emWin User&Reference Guide 

TFT

3. 与瑞佑科技的深圳分公司(深圳瑞福科技-Q2851189731)联络,以获得最新版的RA8889_API_Demo_Vxx范例。
二、开始移植

RA8889_API_emwin546_stm32f103_8080IF 范例是由 RA8889_API_Demo_Vxx 加入emWin Library 产生的,以下修改说明请参考范例程序项目。
1. 首先新增 3 个文件夹 emwin_config, emwin_inc, emwin_lib 

TFT

1) 在 C:Keil_v5ARMSeggeremWinSampleConfig,复制 GUIConf.c 、GUIConf.h 、 LCDConf.c 、 LCDConf.h 4 个文件到emwin_config 文件夹内。
(2) 在 C:Keil_v5ARMSeggeremWinSampleDisplayDriver,复制GUIDRV_Template.c 文件到 emwin_config 文件夹内。
(3) 在 C:Keil_v5ARMSeggeremWinSampleGUI_X,复制 GUI_X.c 文件到emwin_config 文件夹内。
(4) 在 C:Keil_v5ARMSeggeremWinInclude,复制所有的.h 文件到 emwin_inc 文件夹内。
(5) 在 C:Keil_v5ARMSeggeremWinLib,复制 GUI_CM3.lib 文件到 emwin_lib 文件夹内。 (由于我们的 STM32F103 是 CM3核心,所以选用 CM3)。
(6) 在 C:Keil_v5ARMSeggeremWinSampleApplicationGUIDemo 内,复制全部的文件夹到 emwin_demo 文件夹内。 
 

2. 打开 Keil 项目,在 Manage Project Items 内建立 emwin_config 、 emwin_lib 、emwin_demo 3 个 Groups 并加入文件,如下图。

TFT

在 Option for Target 里面的 Include Paths 新增 3 个 include paths 如下图。 
 

TFT

3. 以上设定完后,我们编译时应该会产生以下错误: 
Error: L6218E: Undefined symbol GUI_X_GetTaskId (referred from gui_task.o).
Error: L6218E: Undefined symbol GUI_X_InitOS (referred from gui_task.o).
Error: L6218E: Undefined symbol GUI_X_Lock (referred from gui_task.o).
Error: L6218E: Undefined symbol GUI_X_Unlock (referred from gui_task.o). 
由于本范例没使用 OS 操作系统,所以我们先忽略这个问题,为了让编译可以正常进行,我们在 GUI_X.c 内加入这几个函数,如下图。 
 

TFT

4. emWin GUI 时基源
emWin GUI 需要一个时基源并须1ms递增,即OS_TimeMS变数在GUI_X.c文件内声明,MCU必须先提供一个1ms的timer tick,通常在Cortex-M由SysTick的设定由SysTick_Handler{}中断函数去递增变量来实现,而本文范例采用MCU TIMER中断来提供1ms的tick,在stm32f10x_it.c内TIM3_IRQHandler()中断函数实现tick递增。
5 分配内存给emWin系统

在GUIConf.c文件内设定,内存大小会影响效能,须根据MCU的内存大小去配置。

TFT

6. GUIDRV_Template.c修改

使用GUIDRV_Template.c 作为新增一个GUI设备的驱动文件,emWin实现屏幕的驱动主要在于写一个点与读一个点,我们必须修改static void _SetPixelIndex(GUI_DEVICE * pDevice, int x, int y, LCD_PIXELINDEX PixelIndex)与static LCD_PIXELINDEX_GetPixelIndex(GUI_DEVICE * pDevice, int x, int y)两个主要函数,如下图。

TFTTFT

引入的 putPixel()与 getPixel()函数来自 RA8889_API.h,在这个范例选用 16bit RGB565 或24bit RGB888 数据格式,参考 UserDef.h 选用如下设定:
支持 16bit RGB565 (使用 emWin GUICC_M565)
#define Parallel_8080
#define MCU_16bit_ColorDepth_16bpp
支持 24bit RGB888 (使用 emWin GUICC_M888)
#define Parallel_8080
#define MCU_16bit_ColorDepth_24bpp_Mode_2 
另外为了优化填充效率, 在 GUIDRV_Template.c 文件新增定义 Add2D_Optimize, 使用 RA8889 内建 2D 绘图加速功能并增加到_FillRect()、 _DrawHLine()、 _DrawVLine()函数内, 如下图: 
 

TFTTFT

7. 修改LCDconf.c 如下图:

TFT

上述设定完成后,在 main.c 加入以下内容,开始运行 GUIDEMO。 

TFT

运行效果图如下: 
 

TFT

三、在emWin平台上移植RA8889显示控制功能的优势

1)显示效果优化

利用RA8889内建DRAM与BTE功能取代emWin Memory Device功能,可实现刷新显示时不闪屏,具体如何应用,可与瑞福科技联系-Q2851189731;

2) 多缓存应用

利用RA8889内建的128Mbit DRAM ,分配内存给emWin在RA8889的显存上操作,即可实现:缓存1用于液晶屏的显示(即显示区)、缓存2 用于emWin的读写操作内存、另外可分配缓存3、缓存4…等等,比如缓存3可用于显示挂在RA8889上的Flash的图片,当需要显示时,即可用BTE的复制粘贴到显示区显示,比如缓存4用作视频的缓存纽带,可完美实现emWin窗口+视频播放的显示搭配效果;以上实现具体原理,以及代码例程,可与瑞福科技联系Q2851189731技术交流。

总结:在emWin平台上配合使用瑞佑科技的液晶显示控制器芯片RA8889ML3N,即使低端的MCU,也可驱动高分辨率(1366*2048)液晶显示屏, 可做出流畅、炫酷的UI操作界面。
 

  审核编辑:汤梓红
 
打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分