CPU是DRA62x,跑VxWorks系统
HDVPSS驱动是从denny.yang写的uboot_logo范例中移植过去的
目前问题是:显示静态的画面正常,往显存刷入新的图片时,画面切换可以肉眼看出闪烁,不像是正常的画面切换
我现在考虑可能是两个原因,但又不从下手:
1、VPSS与CPU共享DDR3,两边同时访问时存在带宽问题(类似的问题曾在OMAP-L138上也碰到过,调整了DDR Controller的一个配置后解决)
DRA62x上是否有类似的配置优化选项呢?
2、驱动太简单,没有做乒乓显存,cpu一边写入数据 ,vpss一边读取数据,可能会有数据冲突?
这个不太肯定,按理说显存更新速度慢的话,画面应该是肉眼看到从上往下逐行更新,现在看到的现象更像是整个画面闪了一下
附上部分代码段,从uboot_logo的示例代码也就改了这里,将desc队列头尾接起来实现循环显示,别的几乎没动只是适配液晶做了点分辨率相关的调整
麻烦帮忙看看这个问题,谢谢!
static uint32_t dra62xDispmgrSetupLayers(uint32_t* desc_buffer, int stride,int width, int height, uint32_t paddr,uint8_t dataType) { #define DESC_NUM120/* 一条list中刷DESC_NUM帧,MAX:511 */uint32_t size = 0;uint32_t numDesc = 0, i = 0;uint32_t* desc;int chan;int x = 0;int y = 0;uint32_t layer_ctrl;/* add src_viewport origin to surface start address */layer_ctrl = 0x0000E400; #ifdef CONFIG_GRPX0layer_ctrl |= 1<<(2); /* enable GRPXx layer */ #elif defined CONFIG_GRPX1layer_ctrl |= 1<<(1); /* enable GRPXx layer */ #elselayer_ctrl |= 1 << (0); /* enable GRPXx layer */ #endif #ifdef CONFIG_GRPX0chan = 29; #elif defined CONFIG_GRPX1chan = 30; #elsechan = 31; #endifdesc = desc_buffer;/* 构建N*fps条desc */for (i = 0; i < DESC_NUM; i++){/* set up data transfer descriptor */desc[0] = 0 | (dataType << 26) // RGB-888/* 注意:这里需要根据实际情况做调整 */| (0 << 25) // no notification| (0 << 24) // field number| (0 << 23) // 2-dimensional data| (0 << 20) // +1 line skip (even)| (0 << 16) // +1 line skip (odd)| (stride) // line stride;desc[1] = 0 | (width << 16) // line length in pixels| (height) // number of rows;desc[2] = paddr;desc[3] = 0 | (0xA << 27) // packet type| (0 << 26) // 1D mode| (0 << 25) // inbound direction| (chan << 16) // channel| (0 << 9) // priority| (chan << 0) // next channel;desc[4] = 0 | (width << 16) // region width| (height) // region height;desc[5] = 0 | (x << 16) // horizontal start| (y << 0) // vertical start;desc[6] = 0 | (1 << 7) // first region| (1 << 8) // last region;desc[7] = 0; // alpha blending enabledesc += 8;size += 32;}
/* 追加一条control desc:reload list* 本组list执行完毕后,将自动循环重新加载本list* 以达到图像刷新不需要cpu额外干预的目的 */size += 16;desc[0] = (uint32_t)desc_buffer & 0xFFFFFFFE;desc[1] = size & 0x0000FFFF;desc[2] = 0;desc[3] = 0 | (0xC << 27) //packet type;| (0x7);//control type: reload list
/* COMP模块,将graphic x通道映射到DVOx上,相当于打通了信号流 */vpsWrite32(VPS_COMP_DVO2, layer_ctrl);/* GRPXx --> DVO2(VOUT0) */return size; }
Chris Meng:
Liu,
DRA62x不是DM81xx系列的产品。DM81xx的uboot logo里面的显示是一个简化的版本,在DM81xx的软件里面hdvpss驱动做的是很完善的。
DachuanLiu:
回复 Chris Meng:
我不敢在标题上写dra,,所以写的81xx,实际用的是dra
我们在VxWorks系统下只能把uboot logo移植过来,linux的太复杂根本没办法弄过来
碰到的闪烁问题,有什么办法解决么?