如何提高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条回答
taizonglai
1楼-- · 2019-07-20 10:22
 精彩回答 2  元偷偷看……
wangmingwei093
2楼-- · 2019-07-20 16:10
最近我也再用这块板子做这个图片显示实验,我感觉是不是这一系列的单片机不适合做图像数据处理这类开发呢?我做的也是特别清晰的刷新感,小的图片可以,图片一大就不行了,显示速度超级慢,我也想知道,有什么方法能提高速度,是CPU的问题还是程序的问题?
wangmingwei093
3楼-- · 2019-07-20 17:53
wangmingwei093 发表于 2017-12-19 17:31
最近我也再用这块板子做这个图片显示实验,我感觉是不是这一系列的单片机不适合做图像数据处理这类开发呢? ...

还有,我就是用的DMA2D显示的,确实也很慢的
hanzixi_angel
4楼-- · 2019-07-20 19:16
 精彩回答 2  元偷偷看……
aozima
5楼-- · 2019-07-20 19:35
 精彩回答 2  元偷偷看……
heitu103
6楼-- · 2019-07-21 01:03
切换显存地址,图片数据加载完后,把显存地址从ltdc_lcd_framebuf切换到sdram_array

一周热门 更多>