|
本帖最后由 夏雨 于 2013-5-28 21:14 编辑
之前实现了摄像头开启,LCD实时显示图像并将图像存入SD中。从SD读出图像到LCD,屏幕一闪一闪的,而存的时候LCD显示的很流畅。不明白为什么会闪烁,也不明白存的时候对LCD的实时显示为什么无影响,直到最近才明白。
我用的是tq2440的开发板,裸机编程,采集到的图像直接放到缓存中:else // direct preview mode(预览模式)
{
rCIPRCLRSA1 = (U32)LCD_BUFFER;
rCIPRCLRSA2 = (U32)LCD_BUFFER;
rCIPRCLRSA3 = (U32)LCD_BUFFER;
rCIPRCLRSA4 = (U32)LCD_BUFFER;
}
下面是将采集到的图像存到SD中。摄像头每捕捉到一幅图像,会产生一个中断,flagCapture_P被置1。
while (1)
{
if (flagCaptured_P &(!(rGPBDAT&(0x1<<7))))//当捕捉到图像且传感器检测到物体。
{
if(Write_Mult_Block(Addr,65280, (U32 *)LCD_BUFFER))//将缓存中的数据写到SD中,按照字传输。
{
Addr+=261120;//分辨率480*272,8位RGB TFT显示。2*480*272=261120。
//ddr=((Eddr-Addr)/4);
Uart_Printf("\n成功存入图片\n");
}
Eddr=Addr;
flagCaptured_P = 0;
}
按照我编的程序,往SD存图片的时候应该会影响LCD实时显示。直到最近才醒悟,LCD控制器中有专用的DMA,将摄像头捕捉到的图像传送到缓存中而不需要CPU干涉。LCD实时显示图像与向SD中存储是两个不相干的“进程”。向SD存储数据需要时间(上面那段程序)且开发板的外围频率低于HCLK,肯定会丢帧,所以从SD卡回放的时候,画面不是很流畅。至于画面一闪一闪,怀疑是总线频率的问题,HCLK>PCLK>SDIPRE。
这么的往SD里存数据,会有隐患:当正要往SD里存数据的时候,摄像头捕捉到的图像正在写入缓存。于是从SD读取数据到LCD,有的图片局部会出现黑屏条纹什么的,但绝大多数图片还是完好的。
不知道上Ucos系统会不会解决sd存储丢帧或屏幕闪烁的问题,还请懂的人指点。本人菜鸟一枚,以上原因都是自己瞎想的,有不对的地方请指正,谢谢
|
|