新手入门
- 积分
- 15
- 金钱
- 15
- 注册时间
- 2016-1-25
- 在线时间
- 3 小时
|
1金钱
本人用的STM32F103ZET6战舰V3开发板,配的OV7670摄像头模块,有如下两个疑问:
(1)OV7670摄像头模块配的FIFO AL422B 大小是380K,不够存储一帧的VGA数据,所里教程里面用的是QVGA输出。如果我要使用VGA输出,程序里面该怎么实现,能做到吗?还是必须得换容量更大的FIFO芯片?
(2)示例程序里读FIFO数据用的是camera_refresh()函数,写数据用的是EXTI8的中断处理函数。写数据要比读数据快,如果一帧数据还没读完,第二帧数据已经开始写了并且将前一帧覆盖了怎么办?是否需要在EXTI8的中断处理函数里面加上,判断数据是否已经读完的代码?如 if(ov_sta==0){ ... //开始写} else{OV7670_WREN=0 //禁止写}。 我看视频里面说等待的过程中要写禁止,但是示例代码里面并没有这么做,不知道是出于什么考虑的?
请原子哥或者正在学这个开发板的小伙伴们指点下,谢谢!
读数据:
void camera_refresh(void)
{
u32 j;
u16 color;
if(ov_sta)//有帧中断更新?
{
LCD_Scan_Dir(U2D_L2R); //从上到下,从左到右
if(lcddev.id==0X1963)LCD_Set_Window((lcddev.width-240)/2,(lcddev.height-320)/2,240,320);//将显示区域设置到屏幕中央
else if(lcddev.id==0X5510||lcddev.id==0X5310)LCD_Set_Window((lcddev.width-320)/2,(lcddev.height-240)/2,320,240);//将显示区域设置到屏幕中央
LCD_WriteRAM_Prepare(); //开始写入GRAM
OV7670_RRST=0; //开始复位读指针
OV7670_RCK_L;
OV7670_RCK_H;
OV7670_RCK_L;
OV7670_RRST=1; //复位读指针结束
OV7670_RCK_H;
for(j=0;j<76800;j++)
{
OV7670_RCK_L;
color=GPIOC->IDR&0XFF; //读数据
OV7670_RCK_H;
color<<=8;
OV7670_RCK_L;
color|=GPIOC->IDR&0XFF; //读数据
OV7670_RCK_H;
LCD->LCD_RAM=color;
}
ov_sta=0; //清零帧中断标记
ov_frame++;
LCD_Scan_Dir(DFT_SCAN_DIR); //恢复默认扫描方向
}
}
写数据:
void EXTI9_5_IRQHandler(void)
{
if(EXTI_GetITStatus(EXTI_Line8)==SET) //是8线的中断
{
OV7670_WRST=0; //复位写指针
OV7670_WRST=1;
OV7670_WREN=1; //允许写入FIFO
ov_sta++; //帧中断加1
EXTI_ClearITPendingBit(EXTI_Line8); //清除EXTI8线路挂起位
}
|
|