今天遇到一个探索者客户用9320的LCD液晶模块,使用OV2640摄像头的时候,出现条纹状显示。
画了半个下午找到了这个问题点,是探索者程序的bug。
问题现象:综合实验,进入照相机功能后,出现横条纹,并不出现完整的画面。
问题原因:因为探索者开发板兼容了N多LCD型号,有些LCD写入比较慢,故将部分LCD的写入速度放慢了,统一用54ns,但是实际上
摄像头输出的数据流比较快,用54ns会导致写入LCD的速度,更不上摄像头的输出速度,因此出现数据混叠/丢失,形成横条纹画面。
解决办法:LCD_Init函数里面,有如下代码:
[mw_shl_code=c,true] //写时序控制寄存器
FSMC_Bank1E->BWTR[6]|=0<<28; //模式A
FSMC_Bank1E->BWTR[6]|=9<<0; //地址建立时间(ADDSET)为9个HCLK=54ns
//9个HCLK(HCLK=168M),某些液晶驱动IC的写信号脉宽,最少也得50ns。
FSMC_Bank1E->BWTR[6]|=8<<8; //数据保存时间(DATAST)为6ns*9个HCLK=54ns[/mw_shl_code]
9,和8,两个参数,控制着LCD的写入速度。54ns太慢了。
修改为6和5,这样写入速度为36ns,可以满足摄像头正常显示需求。
修改后代码如下:
[mw_shl_code=c,true] //写时序控制寄存器
FSMC_Bank1E->BWTR[6]|=0<<28; //模式A
FSMC_Bank1E->BWTR[6]|=6<<0; //地址建立时间(ADDSET)为9个HCLK=54ns
//9个HCLK(HCLK=168M),某些液晶驱动IC的写信号脉宽,最少也得50ns。
FSMC_Bank1E->BWTR[6]|=5<<8; //数据保存时间(DATAST)为6ns*9个HCLK=54ns[/mw_shl_code]
经过这样的修改后,9320、9325,1505,C505等一批LCD都可以正常显示了。
对于个别LCD,比如6804/C505,还需要将LCD_Init函数,另外一段代码也做修改,如下:
[mw_shl_code=c,true] }else if(lcddev.id==0X6804||lcddev.id==0XC505) //6804/C505速度上不去,得降低
{
//重新配置写时序控制寄存器的时序
FSMC_Bank1E->BWTR[6]&=~(0XF<<0);//地址建立时间(ADDSET)清零
FSMC_Bank1E->BWTR[6]&=~(0XF<<8);//数据保存时间清零
FSMC_Bank1E->BWTR[6]|=6<<0; //地址建立时间(ADDSET)为10个HCLK =60ns
FSMC_Bank1E->BWTR[6]|=5<<8; //数据保存时间(DATAST)为6ns*13个HCLK=78ns
}[/mw_shl_code]
至此,本bug修正完成。
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
一周热门 更多>