天嵌 ARM开发社区

 找回密码
 注册
查看: 2729|回复: 0

向SD存取数据不影响LCD显示,但读数据到LCD,屏幕会闪烁的原因

[复制链接]
夏雨 发表于 2013-5-28 21:13:48 | 显示全部楼层 |阅读模式
本帖最后由 夏雨 于 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存储丢帧或屏幕闪烁的问题,还请懂的人指点。本人菜鸟一枚,以上原因都是自己瞎想的,有不对的地方请指正,谢谢
        



您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

i.MX8系列ARM cortex A53 M4 工控板上一条 /1 下一条

Archiver|手机版|小黑屋|天嵌 嵌入式开发社区 ( 粤ICP备11094220号 )

GMT+8, 2024-4-28 00:36 , Processed in 1.046875 second(s), 22 queries .

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表