学习了原子哥的摄像头实验,显示速度8帧左右,想利用FIFO提高显示速度
因为摄像头模块附带的FIFO可以存放2帧QVGA图像,所以有如下想法:
利用FIFO的 320*240*2*2 字节,就是2帧QVGA,先存入第一帧,以后如下循环:
读取第一帧,在TFT上显示,同时存入第二帧
读取第二帧,在TFT上显示,同时存入第一帧
另外,每次存入新一帧之前,用一个变量,判断该帧是否被读取过
这样,就不存在等待FIFO填满的过程,MCU可以一直读取数据,不断显示
但是写了一些代码,发现效果很差,可能是FIFO的时序没写对,出现过一下情况:
1 图像始终是最开始的一帧,不会变化,感觉是FIFO的写复位或者读复位没有成功
2 图像分成好几块,并且很不清楚,出现很混乱的图像,感觉也是时序有问题
自己思考的结果:
1 FIFO的写,应该在一场结束之后,由于HREF信号置低而结束,所以内部写指针应该不会因为PCLK而继续递增,所以不会导致下一次写出现地址不连续的情况
2 AL422B DataSheet上的两句话,感觉很重要,但是英语水平太差,没能理解,网上的翻译更是惨不忍睹。。。。
The read address should be between 128 to 393,247 cycles after the write address to read the
current field data. (The restriction is indicated in the “Read Operation” Section).
The proper FIFO access must make sure after read reset, the read operation will either read all the
old data (last field data) until next read reset, or follow the constraint 1 above to read newly update
data. In any 2 read resets interval, the FIFO access can not read old data (the field data are written
before last write reset), and stop for a period then read the newly update data (even at that time,
write counter is ahead of read counter by more than 128 cycles).
最后,
想请教一下大家,有什么建议 或者 有什么地方需要注意么?
谢谢! |