硬汉嵌入式论坛

 找回密码
 立即注册
查看: 6826|回复: 5
收起左侧

[emWin] ILI9486移植emWin后出现图像出现拖尾,如何解决?

[复制链接]

17

主题

132

回帖

183

积分

初级会员

积分
183
发表于 2014-7-24 22:21:56 | 显示全部楼层 |阅读模式
手头有一块3.5寸ILI9486的液晶屏无触摸屏,查emWin5.24支持9486,移植后图像出现如下拖尾,其他画面正常,怀疑是读点程序有问题,改动下面部分无效  ,移植用emwin自带驱动
IMG_20140724_203923.jpg

static void LcdReadDataMultiple(U16 * pData, int NumItems) {
  //ili9486读取的第一个数据为无效数据
  *pData = ILI9486_RAM;     ---添加这条语句没有效果
  while (NumItems--) {
    // ... TBD by user
     *pData++ = ILI9486_RAM;                    //modify by fire
  }
}

在下面语句中加入Config.NumDummyReads = 2也没有效果
void LCD_X_Config(void) {
  GUI_DEVICE * pDevice;
  CONFIG_FLEXCOLOR Config = {0};
  GUI_PORT_API PortAPI = {0};
  //
  // Set display driver and color conversion
  //
  pDevice = GUI_DEVICE_CreateAndLink(GUIDRV_FLEXCOLOR, GUICC_565, 0, 0);
  //
  // Display driver configuration, required for Lin-driver
  //
  LCD_SetSizeEx (0, XSIZE_PHYS , YSIZE_PHYS);
  LCD_SetVSizeEx(0, VXSIZE_PHYS, VYSIZE_PHYS);
  //
  // Orientation
  //
  Config.FirstCOM = 0;                                          //modify by fire
  Config.FirstSEG = 0;                                          //modify by fire  
Config.Orientation = GUI_SWAP_XY;                        //modify by fire  横屏   
  Config.NumDummyReads = 2;                                     //modify by fire 读取的第二个数据才是真实数据
  GUIDRV_FlexColor_Config(pDevice, &Config);

  //
  // Set controller and operation mode
  //
  PortAPI.pfWrite16_A0  = LcdWriteReg;
  PortAPI.pfWrite16_A1  = LcdWriteData;
  PortAPI.pfWriteM16_A1 = LcdWriteDataMultiple;
  PortAPI.pfReadM16_A1  = LcdReadDataMultiple;
  GUIDRV_FlexColor_SetFunc(pDevice, &amportAPI, GUIDRV_FLEXCOLOR_F66709, GUIDRV_FLEXCOLOR_M16C0B16);        //modify by fire ?GUIDRV_FLEXCOLOR_F66708
}
前面移植了9328的液晶一切正常。工程文件附上,请帮忙看看存在什么问题?
我用emwin5.22版又移植了一次,虽然5.22版文档不支持9486,但按上面参数移植后其他显示正常,还是有拖尾。
工程文件: emWin5.24b.rar (2.68 MB, 下载次数: 147)
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
107220
QQ
发表于 2014-7-25 10:30:18 | 显示全部楼层
保证你的读像素得读取两次。
回复

使用道具 举报

17

主题

132

回帖

183

积分

初级会员

积分
183
 楼主| 发表于 2014-7-25 16:20:40 | 显示全部楼层
按论坛的方法重新移植再试试。
回复

使用道具 举报

17

主题

132

回帖

183

积分

初级会员

积分
183
 楼主| 发表于 2014-7-27 14:30:04 | 显示全部楼层
按照论坛的方法移植后显示正常,就是刷屏很慢,优化后测速度有600多万,但其他演示反应很慢,尤其是Drawing a graph这个演示,里面波形移动的非常缓慢,
同前面emWin自带驱动移植差别很大,优化了 _FillRect和_DrawHLine函数,还需要优化那些函数才能提高速度?
优化过程中发现一个奇怪的问题,请看下面两个函数:

/*********************************************************************
*
*       _DrawHLine
*/
static void _DrawHLine(GUI_DEVICE * pDevice, int x0, int y, int x1) {
  LCD_PIXELINDEX PixelIndex;

  PixelIndex = LCD__GetColorIndex();
//  _FillRect(pDevice, x0, y, x1, y);
        LCD_SetCursor(x0,y);
            LCDx->LCD_REG=0x002C;     
      for (; x0 <= x1; x0++) LCDx->LCD_RAM=PixelIndex;
  }

/*********************************************************************
*
*       _FillRect
*/
static void _FillRect(GUI_DEVICE * pDevice, int x0, int y0, int x1, int y1) {
  LCD_PIXELINDEX PixelIndex;   
  int x;
//  PixelIndex = LCD__GetColorIndex();

  if (GUI_pContext->DrawMode & LCD_DRAWMODE_XOR) {
    for (; y0 <= y1; y0++) {
      for (x = x0; x <= x1; x++) {
        _XorPixel(pDevice, x, y0);
    }
    }
  } else {
    for (; y0 <= y1; y0++)
        {
             _DrawHLine(pDevice, x0, y0, x1);
                }
       }
}
这样使用画面正常,如果用_DrawHLine函数内的语句直接替代 _FillRect中调用的 _DrawHLine中部分,画面花屏,搞不懂为什么?
还有ILI9486支持开窗填充,不进emWin使用开窗填充功能正常,想用这个功能优化 _FillRect这个函数,一样花屏,在不用emWin时各项功能测试正常,扫描方向也正确。
回复

使用道具 举报

17

主题

132

回帖

183

积分

初级会员

积分
183
 楼主| 发表于 2014-7-27 17:14:00 | 显示全部楼层
用_DrawHLine函数内的语句直接替代 _FillRect中调用的 _DrawHLine中部分,画面花屏这个还没搞清楚,其他正常了,按照论坛方法优化了_DrawBitLine16BPP函数,显示速度正常了。发个正常的工程那位需要可看看。-O1优化。
ILI9486_emWin5.22.rar (4.38 MB, 下载次数: 464)
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
107220
QQ
发表于 2014-7-28 09:28:51 | 显示全部楼层
恩,解决了就好了。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|小黑屋|Archiver|手机版|硬汉嵌入式论坛

GMT+8, 2024-5-21 21:25 , Processed in 0.170251 second(s), 28 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

快速回复 返回顶部 返回列表