本帖最后由 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循环是不是效率是比较慢的。
谢谢!!
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
还有,我就是用的DMA2D显示的,确实也很慢的
一周热门 更多>