硬汉嵌入式论坛

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

[LTDC] 刷色块,画面撕裂的问题

[复制链接]

45

主题

70

回帖

205

积分

高级会员

积分
205
发表于 2021-4-25 23:30:05 | 显示全部楼层 |阅读模式
硬件stm32f750+sdram(16位),没有使用DMA2D,1024*600的7寸屏,申请了3个buffer,lcd本身的buffer,和Layer1 Layer2的buffer,
  1.     /* malloc memory for Triple Buffering */
  2.     _lcd.lcd_info.framebuffer = rt_malloc(LCD_BUF_SIZE);
  3.     _lcd.back_buf = rt_malloc(LCD_BUF_SIZE);
  4.     _lcd.front_buf = rt_malloc(LCD_BUF_SIZE);
复制代码
然后,每隔一秒刷一次色块,
  1. /* red */
  2.              for (int i = 0; i < LCD_BUF_SIZE / 3; i++)
  3.              {
  4.                  lcd->lcd_info.framebuffer[3 * i] = 0x00;
  5.                  lcd->lcd_info.framebuffer[3 * i + 1] = 0x00;
  6.                  lcd->lcd_info.framebuffer[3 * i + 2] = 0xff;
  7.              }
  8.              lcd->parent.control(&lcd->parent, RTGRAPHIC_CTRL_RECT_UPDATE, RT_NULL);
  9.              rt_thread_mdelay(1000);
  10.              /* green */
  11.              for (int i = 0; i < LCD_BUF_SIZE / 3; i++)
  12.              {
  13.                  lcd->lcd_info.framebuffer[3 * i] = 0x00;
  14.                  lcd->lcd_info.framebuffer[3 * i + 1] = 0xff;
  15.                  lcd->lcd_info.framebuffer[3 * i + 2] = 0x00;
  16.              }
  17.              lcd->parent.control(&lcd->parent, RTGRAPHIC_CTRL_RECT_UPDATE, RT_NULL);
  18.              rt_thread_mdelay(1000);
复制代码

lcd->parent.control(&lcd->parent, RTGRAPHIC_CTRL_RECT_UPDATE, RT_NULL);实际调用的使一下代码
  1.     case RTGRAPHIC_CTRL_RECT_UPDATE:
  2.     {
  3.         /* update */
  4.         if (_lcd.cur_buf)
  5.         {
  6.             /* back_buf is being used */
  7.             memcpy(_lcd.front_buf, _lcd.lcd_info.framebuffer, LCD_BUF_SIZE);
  8.             /* Configure the color frame buffer start address */
  9.             LTDC_LAYER(&LtdcHandle, 0)->CFBAR &= ~(LTDC_LxCFBAR_CFBADD);
  10.             LTDC_LAYER(&LtdcHandle, 0)->CFBAR = (uint32_t)(_lcd.front_buf);
  11.             _lcd.cur_buf = 0;
  12.         }
  13.         else
  14.         {
  15.             /* front_buf is being used */
  16.             memcpy(_lcd.back_buf, _lcd.lcd_info.framebuffer, LCD_BUF_SIZE);
  17.             /* Configure the color frame buffer start address */
  18.             LTDC_LAYER(&LtdcHandle, 0)->CFBAR &= ~(LTDC_LxCFBAR_CFBADD);
  19.             LTDC_LAYER(&LtdcHandle, 0)->CFBAR = (uint32_t)(_lcd.back_buf);
  20.             _lcd.cur_buf = 1;
  21.         }
  22.         rt_sem_take(&_lcd.lcd_lock, RT_TICK_PER_SECOND / 20);
  23.         HAL_LTDC_Relaod(&LtdcHandle, LTDC_SRCR_VBR);
复制代码

然后色块切换的时候,会有明显的撕裂感,想问问各位大佬,这是什么原因早成的呢?

撕裂.gif
回复

使用道具 举报

0

主题

19

回帖

19

积分

新手上路

积分
19
发表于 2021-4-26 08:30:48 | 显示全部楼层
rt_sem_take(&_lcd.lcd_lock, RT_TICK_PER_SECOND / 20);
这里查下是否成功,
回复

使用道具 举报

2

主题

38

回帖

44

积分

新手上路

积分
44
发表于 2021-5-14 09:44:42 | 显示全部楼层
楼主解决了没?
要是解决了可以给下思路吗?感谢!
回复

使用道具 举报

0

主题

5

回帖

5

积分

新手上路

积分
5
发表于 2022-3-26 14:25:07 | 显示全部楼层
楼主解决了没,我的也出现
回复

使用道具 举报

20

主题

94

回帖

154

积分

初级会员

积分
154
发表于 2022-3-26 16:51:19 | 显示全部楼层
我曾经遇到类似的问题,当时时caache不一致的问题导致的。
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-4 03:52 , Processed in 0.164995 second(s), 27 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

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