0
问答首页 最新问题 热门问题 等待回答标签广场
我要提问

s3c2416双窗口闪的问题

我用的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能完成传输。
提问者:学生物的程序猿 地点:- 浏览次数:6670 提问时间:10-07 16:21
我有更好的答案
提 交
7条回答
zouwenlong588 10-07 22:27
unsigned char buf_s[800*480*2];
memcpy(buf_s,gImage_test_menu, 640*480*2);
gImage_test_menu是一副图像数据
就这么一句话
在开启osd的时候即开两个窗口的时候,屏幕都会抖动下。
www035 10-09 02:32
从前肩状态开始copy的话,假设copy的时间小于front状态到active状态的时间的话 屏幕就不会抖动
cKin_g 10-17 09:46
没人遇到过这样的情况?
法规处发 10-13 20:47
感谢各位  已经解决了
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的内部结构不熟悉,知道的朋友们请留言。
park_chen 10-14 04:55
支持一下。。
晶瑞德电子 10-08 11:26
分析得很好。
luoyakeji 10-16 08:46
思路对的,解决方法不对。应该允许LCD的DMA空闲中断,迫使总线空闲。另外尽量少使用DMA操作大数据量拷贝。
撰写答案
提 交
1 / 3
1 / 3