原创 S3c2410,ARM平台上对uCGUI的移植实践

2009-3-27 13:40 5142 10 12 分类: MCU/ 嵌入式

uC/GUIMicrium公司的用户图形界面。它给可以方便的移植到基于uC/OS程序上。uC/GUI提供了2D图形库,字库,视窗管理器WMPC外观控件,以及鼠标与触摸屏的支持。对于一些简单的基于嵌入式平台的应用程序设计可以采用它。


下面我来谈谈移植的过程:


1.       虽然uC/GUI可以使用在单任务环境中,但是它可以很好的和uC/OS兼容,所以我推荐先将uC/OS移植好。我的另一篇文章有实践的说明。


2.       写一个没有操作系统下的LCD驱动,我使用的是NECNL2432DR22-12B。我博客也有相关的介绍。


这里我再强调一下要点,因为GUI移植成败与它直接相关:


1)  初始化LCDIO


2)  开启LCD的背光


3)  配置LCDCON1,他主要设置的是vclkhclk/(clkval+1*2clkval自定义),vclk‘一般应该大于6.5M。设置选择了TFT,16bbp的颜色深度等等


4)  配置LCDCON234。根据时序图(LCD液晶datasheet相关)例如:


   <?xml:namespace prefix = v ns = "urn:schemas-microsoft-com:vml" /><?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />


设置:一下的字域:他们直接影响屏幕的偏移,可以手动慢慢调试也可以计算:


#define VFPD            (1)          //垂直同步信号的前肩


#define VSPW           (1)          //垂直同步信号的脉宽


 


#define HBPD            (22)        //水平同步信号的后肩


#define HFPD            (18)        //水平同步信号的前肩


#define HSPW           (18)        //水平同步信号的脉宽


a8e9a7a5-1a4d-4a04-98b8-1a36a2c806e2.jpg


方法如下:


VBPD:确定帧同步信号和帧数据传输前的一段延迟时间,是帧数据传输前延迟时间和行同步时钟间隔宽度的比值,如图,VBPD=t3t6=1.02 mS31.77μs=32


VFPD:确定帧数据传输完成后到下一帧同步信号到来的一段延迟时间,


是帧数据传输后延迟时间和行同步时钟间隔宽度的比值,如图,VFPD=t5t6=0.35 ms31.77μs=11


VSPW:确定帧同步时钟脉冲宽度,是帧同步信号时钟宽度和行同步时钟间隔宽度的比值。如图,VSPW=t2t6=0.06 ms31.77μs=2


HBPD:确定行同步信号和行数据传输前的一段延迟时间,描述行数据传输前延迟时间内VCLK脉冲个数,如图,VBPD=t7×VCLK=1.89 μs×25MHz=47


HFPD:确定行数据传输完成后到下一行同步信号到来的一段延迟时间,描述行数据传输后延迟时间内VCLK脉冲个数,如图,HFPD=t9×VCLK=0.94 μs×25 MHz="24"


      HSPW:确定行同步时钟脉冲宽度。描述行同步脉冲宽度时间内VCLK脉冲个数,如图,HSPW=3.77μs×25 MHz="94"


  


3.正式开始移植uC/GUI:


     1)配置config下的LCDConf.h。设置LCDXsizeYsize


       #define LCD_XSIZE      (320)   /* X-resolution of LCD, Logical coor. */


#define LCD_YSIZE      (240)   /* Y-resolution of LCD, Logical coor. */


  设置LCD的总线宽度,等宏


  还有一些其他设置,与具体LCD相关。


2) 配置config下的GUIConf.h:


   设置GUI的支持,如是否用到WM等。


   设置默认字体,背景色,前景色等。


3)将已经调试成功的裸机下的LCD移植进来,改写LCDDriver下的LCDSLin.c


   并且完成GUI要求的借口函数:


   LCD_L0_SetPixelIndex


   LCD_L0_GetPixelIndex


   LCD_L0_XorPixel


   LCD_L0_DrawHLine


   LCD_L0_DrawVLine


   LCD_L0_FillRect


   LCD_L0_DrawBitmap


   LCD_L0_SetOrg


   LCD_L0_Init


   LCD_On


   LCD_Off


示例:


void LCD_L0_SetPixelIndex(int x, int y, int PixelIndex) {


 


  PutPixel(x,y,PixelIndex); 


 }


static void PutPixel(U32 x,U32 y,U<?xml:namespace prefix = st1 ns = "urn:schemas-microsoft-com:office:smarttags" />32 c)


{


     if ( (x < SCR_XSIZE_TFT_240320) && (y < SCR_YSIZE_TFT_240320) )


     LCD_BUFER[(y)][(x)] = c;


}


 


void LCD_L0_DrawHLine  (int x0, int y,  int x1) {


  if (GUI_Context.DrawMode & LCD_DRAWMODE_XOR) {


    for (; x0 <= x1; x0++) {


      LCD_L0_XorPixel(x0, y);


    }


  } else {


    for (; x0 <= x1; x0++) {


      LCD_L0_SetPixelIndex(x0, y, LCD_COLORINDEX);


    }


  }


}


 


完成这些借口函数后,设置相关宏使其可以被LCD_Private.h正常条用,驱动函数应该接入LCD.c下对应的函数中。可以仿真调试看LCD.cGUI的一些常用绘图函数能否正常的调用自己写的驱动函数。如果可以经正常调用,那么驱动就基本移植成功了。


效果图:


4dd22b1a-cb49-4642-93ab-99e43cdf4995.jpg

PARTNER CONTENT

文章评论2条评论)

登录后参与讨论

用户539229 2009-5-23 14:01

字符串显示不正常,你可以关掉那些窗口的功能试试,有时候会产生影响的。另外如果图像和字符串交叠的话,也可能会异常,他里面有个内存管理的功能可以避免这种情况,这个我研究的也不深入。。。 和版本应该没有关系

用户192790 2009-5-21 16:11

楼主用的是什么版本的ucgui? 可以提供例程么? 本人移植的时候碰到一个问题,显示字符串的时候,第一次调用可以正常显示,但是第二次调用的时候,程序就跑飞了~~
相关推荐阅读
用户539229 2010-01-23 22:52
vmware下debian5的安装配置以及vmtools的安装使用
一.安装vmware6.5.21.下载vmware6.5.2http://4.scdx3.crsky.com/software/vmware_652.rar2.下载vmware6.5.2汉化包http...
用户539229 2009-12-29 12:57
最新诺基亚Qt4.6的上下位机移植手记,触摸屏支持
一.PC for Winxp下的开发环境的搭建诺基亚收购Qt以后,开发了自己的集成开发环境Qt Creater。这是一个非常强大的工具,上手也很快。登陆:http://qt.nokia.com/dow...
用户539229 2009-12-11 20:14
Omap3evm下android开发第一例hello下位机运行实践
1.       驱动的安装<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /> 1.1...
用户539229 2009-12-09 19:01
android的windows下开发环境的搭建与hello第一例
Android的SDK的官方网址如下官方网址:http://androidappdocs.appspot.com/sdk/index.html<?xml:namespace prefix = o...
用户539229 2009-11-28 13:21
Omap3下Goole的Android操作系统的实现 相当于山寨智能机啦
首先要有一个:OMAP3EVM平台的开发板 我用的是OMAP35x的TI的评估板还要有一个SD卡 TI花了很大的功夫打造了OMAP3智能手机开发平台,给用户提供了SDK包,GDK包,以及双核的Davi...
用户539229 2009-11-08 19:50
OMAP35x下OneNand的分析以及x-loader的介绍
OMAP35x下OneNand的分析以及x-loader的介绍<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:...
我要评论
2
10
关闭 站长推荐上一条 /1 下一条