打印

s3c2416双窗口闪的问题

[复制链接]
2764|8
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
我用的s3c2416内核为2.6.21,lcd大小为640*480,2416支持两个窗口叠加显示
    问题描述:2416开双窗口,(1)把图片copy到lcd内存(当前显示或不显示窗口的内存),屏幕有点闪
                                       (2)把图片copy到非lcd内存,屏幕还是有的闪
                                       (3)在场同步的时候,即VSTATUS为 FRONT Porch状态的时候 把图片的1/5(copy时间可以在FRONT状态完成) copy到lcd,屏幕不闪。
                   2416只开一个窗口,不管是窗口0还是窗口1,也不管把图片copy到哪个地址,屏幕都不闪。

      我现在认为是不是2416本身就有缺陷呢?在开双窗口的时候,他们叠加会消耗时间,copy数据的时候刚好把总线给抢了,导致DMA延时,所以屏会闪。而只有一个屏幕的时候,他们不需要叠加,时间充足,DMA能完成传输。

相关帖子

沙发
急驰的蚂蚁|  楼主 | 2010-8-27 10:44 | 只看该作者
unsigned char buf_s[800*480*2];
memcpy(buf_s,gImage_test_menu, 640*480*2);
gImage_test_menu是一副图像数据
就这么一句话
在开启osd的时候即开两个窗口的时候,屏幕都会抖动下。

使用特权

评论回复
板凳
急驰的蚂蚁|  楼主 | 2010-8-27 11:45 | 只看该作者
从前肩状态开始copy的话,假设copy的时间小于front状态到active状态的时间的话 屏幕就不会抖动

使用特权

评论回复
地板
急驰的蚂蚁|  楼主 | 2010-8-27 15:19 | 只看该作者
问题测出来了开两个窗口的时候会对lcd 的vclk产生干扰。
只是开一个窗口的波形图



开两个窗口的波形图(及开osd)看下图


假设开两个窗口的时候 又快速的访问内存 干扰更严重所以屏幕就闪用memcpy(dst,src,640*480*2),会有很严重的干扰
下图

假设用
for(i = 0;i < 640*480*2; i++)
{
    dst = src;
}
干扰就好点,不好造成屏抖动;
图片如下图




假设用
for(i = 0;i < 640*480; i++)
{
   (short *)(dst+i)= (short *)(src+ i);
} 干扰也不会造成屏闪
图片如下图





假设用 for(i = 0;i < 640*480/2; i++)
{
   (int*)(dst+i)= (int*)(src+ i);
}
干扰和memcpy一样,很严重会造成屏幕抖动
图片如下图



为什么会这么呢?高手们,帮个忙!

使用特权

评论回复
5
急驰的蚂蚁|  楼主 | 2010-8-30 13:45 | 只看该作者
没人遇到过这样的情况?

使用特权

评论回复
6
急驰的蚂蚁|  楼主 | 2010-9-10 14:53 | 只看该作者
感谢各位  已经解决了
When FIFO is empty or partially empty, VDMA requests data fetching from the
frame memory based on the burst memory transfer mode(Consecutive memory fetching of 4 / 8 / 16 words per one burst request without allowing the bus mastership to another bus master during the bus transfer)
我开始设置的是一次突发DMA传输时4个字
现在改成16个字就可以了
DMA传输的时候不能让出总线
传4个字的时候要很多次突发传输,响应不过来,所以就会闪
对ram访问的时候,会占用总线
for(i = 0;i < 640*480/2; i++)
{
(int*)(dst+i)= (int*)(src+ i);
}

用这个一次占用总线的时间比较长,LCD的4字DMA要突发很大次,所以有的时候会获取不到总线,所以就会闪
而用16字的话,突发传输的次数就不要这么多,所以就不闪

for(i = 0;i < 640*480*2; i++)
{
dst[i] = src[i];
}
一次只是一个字节的时间,占用的时间比较短,LCD用4字的DMA传输虽然要突发很大次,但都能获得总线,所以不闪。

对clk会有干扰就不知道为什么了,估计也是总线的问题。
对ARM的内部结构不熟悉,知道的朋友们请留言。

使用特权

评论回复
7
ic139| | 2010-9-10 15:08 | 只看该作者
支持一下。。

使用特权

评论回复
8
jekey| | 2012-3-29 10:26 | 只看该作者
分析得很好。

使用特权

评论回复
9
一周一天班| | 2012-3-29 13:34 | 只看该作者
思路对的,解决方法不对。应该允许LCD的DMA空闲中断,迫使总线空闲。另外尽量少使用DMA操作大数据量拷贝。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

13

主题

66

帖子

0

粉丝