返回信息流先上个图:
上半部分是动态更新的,下半部分是第一张图采到的数据,以后不再更新。不晓得是不是帧同步的问题,机制如下:
void main()
{
flag=0;
while(1){
(if flag == 2) //说明FIFO更新了一幅图像
{
图像处理
flag=0;
}
}
}
VSYNC触发中断
{
if(flag==0) //说明FIFO储存的是旧的图像
{
FIFO写使能
flag=1;
}
else if(flag==1) //FIFO已经更新了图像,flag置2,交主程序处理
{
FIFO write disable;
flag=2;
}
}
这是一条镜像帖。来源:北邮人论坛 / circuit / #20002同步于 2012/4/5
该镜像源已超过 30 天没有更新,可能在源站已被删除。
Circuit机器人发帖
请教摄像头同步问题
ocean
2012/4/5镜像同步6 回复
订阅后,新回复会通过你的通知中心匿名送达。
6 条回复
没用过FIFO,写使能以后自动就开始读摄像头的数据么?
FIFO写使能以后,要多久才能把数据写完?有延时么?
如果有延时的话,在下一个场中断到来的时候,可能存在还没有写完,FIFO 就又被disable了
嗯,确实有可能造成类似的情况,不过应该不是这个原因。我没有表述清楚,他只更新上半部分,但是这个上半部分并不是从第1行数据开始的,而是从中间某行开始一直到图像的末尾,所以第二副图会感觉上面和下面查不多。也就是320*240的图,从二张图开始,只能从第XXX行左右开始读取数据一直到240行,而1~XXX行的数据丢失。
谢谢你的回答,我没有描述清楚问题,抱歉。
【 在 hewei 的大作中提到: 】
: 没用过FIFO,写使能以后自动就开始读摄像头的数据么?
: FIFO写使能以后,要多久才能把数据写完?有延时么?
: 如果有延时的话,在下一个场中断到来的时候,可能存在还没有写完,FIFO 就又被disable了
没事没事,太客气了,我也当成学习了
确实对FIFO不太了解,你检查下你FIFO那边的控制吧,我觉得就你传上来的代码部分应该就只有那个使能的控制那里可能有点问题,最好还是写完以后再disable吧。
【 在 ocean 的大作中提到: 】
: 嗯,确实有可能造成类似的情况,不过应该不是这个原因。我没有表述清楚,他只更新上半部分,但是这个上半部分并不是从第1行数据开始的,而是从中间某行开始一直到图像的末尾,所以第二副图会感觉上面和下面查不多。也就是320*240的图,从二张图开始,只能从第XXX行左右开始读取数据一直到240行,而1~XXX行的数据丢失。
: 谢谢你的回答,我没有描述清楚问题,抱歉。
:
【 在 ocean 的大作中提到: 】
: 先上个图:
: [upload=1][/upload][upload=2][/upload][upload=3][/upload]
: 上半部分是动态更新的,下半部分是第一张图采到的数据,以后不再更新。不晓得是不是帧同步的问题,机制如下:
: ...................
我用stm32调摄像头是这么写的:
void EXTI15_10_IRQHandler(void)
{
if(EXTI_GetITStatus(EXTI_Line13) != RESET) //判断是否为VSYNC中断
{
EXTI_ClearFlag(EXTI_Line13); //清除中断标志
EXTI_ClearITPendingBit(EXTI_Line13);//清除中断挂起位
if(VsyncCnt <2)
{
VsyncCnt ++;
}
if(VsyncCnt == 1)
{
开启写使能
}
else if(VsyncCnt == 2)
{
关闭写使能
}
}
}
然后主函数里
void main(void)
{
if(VsyncCnt ==2)
{
读fifo数据 然后lcd显示
}
}
丢两帧 读取一帧 并保证在读FIFO的时候不让往里写数据
确实如此,必须保证下一帧到来之前FIFO写入完毕。
【 在 hewei 的大作中提到: 】
: 没事没事,太客气了,我也当成学习了
: 确实对FIFO不太了解,你检查下你FIFO那边的控制吧,我觉得就你传上来的代码部分应该就只有那个使能的控制那里可能有点问题,最好还是写完以后再disable吧。
:
有启发,回去再调一下。
【 在 wfblackie 的大作中提到: 】
: 我用stm32调摄像头是这么写的:
: void EXTI15_10_IRQHandler(void)
: {
: ...................