|
硬件stm32f750+sdram(16位),没有使用DMA2D,1024*600的7寸屏,申请了3个buffer,lcd本身的buffer,和Layer1 Layer2的buffer,
- /* malloc memory for Triple Buffering */
- _lcd.lcd_info.framebuffer = rt_malloc(LCD_BUF_SIZE);
- _lcd.back_buf = rt_malloc(LCD_BUF_SIZE);
- _lcd.front_buf = rt_malloc(LCD_BUF_SIZE);
复制代码 然后,每隔一秒刷一次色块,
- /* red */
- for (int i = 0; i < LCD_BUF_SIZE / 3; i++)
- {
- lcd->lcd_info.framebuffer[3 * i] = 0x00;
- lcd->lcd_info.framebuffer[3 * i + 1] = 0x00;
- lcd->lcd_info.framebuffer[3 * i + 2] = 0xff;
- }
- lcd->parent.control(&lcd->parent, RTGRAPHIC_CTRL_RECT_UPDATE, RT_NULL);
- rt_thread_mdelay(1000);
- /* green */
- for (int i = 0; i < LCD_BUF_SIZE / 3; i++)
- {
- lcd->lcd_info.framebuffer[3 * i] = 0x00;
- lcd->lcd_info.framebuffer[3 * i + 1] = 0xff;
- lcd->lcd_info.framebuffer[3 * i + 2] = 0x00;
- }
- lcd->parent.control(&lcd->parent, RTGRAPHIC_CTRL_RECT_UPDATE, RT_NULL);
- rt_thread_mdelay(1000);
复制代码
lcd->parent.control(&lcd->parent, RTGRAPHIC_CTRL_RECT_UPDATE, RT_NULL);实际调用的使一下代码
- case RTGRAPHIC_CTRL_RECT_UPDATE:
- {
- /* update */
- if (_lcd.cur_buf)
- {
- /* back_buf is being used */
- memcpy(_lcd.front_buf, _lcd.lcd_info.framebuffer, LCD_BUF_SIZE);
- /* Configure the color frame buffer start address */
- LTDC_LAYER(&LtdcHandle, 0)->CFBAR &= ~(LTDC_LxCFBAR_CFBADD);
- LTDC_LAYER(&LtdcHandle, 0)->CFBAR = (uint32_t)(_lcd.front_buf);
- _lcd.cur_buf = 0;
- }
- else
- {
- /* front_buf is being used */
- memcpy(_lcd.back_buf, _lcd.lcd_info.framebuffer, LCD_BUF_SIZE);
- /* Configure the color frame buffer start address */
- LTDC_LAYER(&LtdcHandle, 0)->CFBAR &= ~(LTDC_LxCFBAR_CFBADD);
- LTDC_LAYER(&LtdcHandle, 0)->CFBAR = (uint32_t)(_lcd.back_buf);
- _lcd.cur_buf = 1;
- }
- rt_sem_take(&_lcd.lcd_lock, RT_TICK_PER_SECOND / 20);
- HAL_LTDC_Relaod(&LtdcHandle, LTDC_SRCR_VBR);
复制代码
然后色块切换的时候,会有明显的撕裂感,想问问各位大佬,这是什么原因早成的呢?
|
-
|