如何提高SDRAM刷图速度(10寸)

2019-07-20 06:11发布

本帖最后由 orta 于 2017-12-19 15:35 编辑

原子大大和各位高手,最近还面临一个问题想和您请教

我用的767 挂载SDRAM 和 1280*800 10寸屏 RGB565 模式

LTDC 的帧显示缓存映射地址:

u16 ltdc_lcd_framebuf[1280*800] __attribute__((at(0XC0000000)));
剩余SDRAM用于图片存储的缓存映射地址:
u16 sdram_array[16*1024*1024] __attribute__((at(0XC2000000)));

ltdc_lcd_framebuf 占用 1280*800个 u16
sdram_array 占用 16M 个 u16

现在 SDRAM和 屏工作都没问题。

然后,我通过软件做了一张 1280*800的 RGB565 格式 BMP图片,并转为.BIN二进制文件(裸像素数据); 767通过U盘将 该BIN 二进制文件数组 拷入 sdram_array,相当于提前从U盘把数据拷入SDRAM,以便一会使用。
最后,开始刷图:

               for(i=0;i<1280*800;i++)
              {
                   ltdc_lcd_framebuf[ i ]=sdram_array[ i ];
                }

就是无脑将sdram_array 搬入 显示缓存  ltdc_lcd_framebuf。

问题在这里。 这么做的话,应该已经是比较快的速度了,(相当于SDRAM片内数据搬移),但是在 1280X800的分辨率下,还是能看出 画面是有刷出感(从上往下),不是整屏 全部瞬间变化。

我又做了一个实验:
               for(i=0;i<1280*800;i++)
              {
                   ltdc_lcd_framebuf[ i ]=RED;
                }
刷一个单 {MOD}画面,就没有感觉有刷屏感, 也就是说    ltdc_lcd_framebuf[ i ]=sdram_array[ i ] 这句话 数据搬移 占用了总线时间。


项目设计的 767方案, 显示一张1280X800 图 是不能有刷屏感的。

请问现在如何解决呢?我也想到 可否用 DMA 将sdram_array[ i ] 搬移到ltdc_lcd_framebuf[ i ], 可是不知怎么写。。而且也不知道这么做是否有效提升刷屏速度。
用这种FOR循环是不是效率是比较慢的。


谢谢!!







友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
8条回答
orta
1楼-- · 2019-07-21 04:20
 精彩回答 2  元偷偷看……
xiaoshuli
2楼-- · 2019-07-21 07:51
zuozhongkai 发表于 2017-12-19 15:34
使用DMA2D试试。

我想问问,DMA2D中,有4个模式,一种是M2M的模式,还有R2M,如果我位图数据都放在静态数组里,也就是Flash中,DMA2D选用哪一种模式好,而且DMA2D怎么去指定M和R,我查看到资料里,DMA2D只有目的地址,没有源地址

一周热门 更多>