|
|
本帖最后由 makeitbai 于 2015-3-14 10:04 编辑
问题已经解决,初始化代码和开始捕获可以分开,这样不用每次照相都等待几分钟的初始化,问题的关键是不要关掉camera的时钟,现在出厂测试程序的基础上,修改部分代码,并贴出来供新手参考:
我把摄像头测试程序分为二部分,CameraInit();//camera init,CameraOn();
1、
void CameraInit(void){//
int i;
CamReset();
// Initializing camif
rCLKCON |= (1<<19); // enable camclk
CamPortSet();
ChangeUPllValue(56, 2, 1); // UPLL clock = 96MHz, PLL input 12MHz
rCLKDIVN|=(1<<3); // UCLK 48MHz setting for UPLL 96MHz
// 0:48MHz, 1:24MHz, 2:16MHz, 3:12MHz...
// Camera clock = UPLL/[(CAMCLK_DIV+1)X2]
SetCAMClockDivider(CAMCLK24000000); //Set Camera Clock 24MHz s5x532, OV9650
i = Test_OV9650();
if( i )
{
Uart_Printf("\nTest is failed!!!\n");
return ;
}
// Initialize Camera interface
if(LCD_Type == LCDT35)
CamInit(240, 320, 240, 320, 0, 0, CAM_FRAMEBUFFER_C, CAM_FRAMEBUFFER_P);
else if((LCD_Type == LCDW35)||(LCD_Type == LCDS35))
CamInit(320, 240, 320, 240, 100, 100, CAM_FRAMEBUFFER_C, CAM_FRAMEBUFFER_P);
else if(LCD_Type == LCDW43)
CamInit(480, 272, 480, 272, 100, 100, CAM_FRAMEBUFFER_C, CAM_FRAMEBUFFER_P);
else if(LCD_Type == VGA)
CamInit(640, 480, 640, 480, 100, 100, CAM_FRAMEBUFFER_C, CAM_FRAMEBUFFER_P);
else if(LCD_Type == LCDA70)
CamInit(800, 480, 800, 480, 100, 100, CAM_FRAMEBUFFER_C, CAM_FRAMEBUFFER_P);
//Uart_Printf("preview sc control = %x\n", rCIPRSCCTRL);
Uart_Printf("Initializing end...\n");
}
2、
void CameraOn(void)
{
// Lcd_TFT_Init();
Uart_Printf("\nCamera on\n");
Test_CamPreview() ;
Uart_Printf("\nCamera off\n");
//rCLKCON &= ~(1<<19); // disable camclk,想要连续采集图像,不要关闭camera时钟!!!
}
其中Test_CamPreview() ;就是除去初始化代码剩下的部分
包括 Start Capture,死循环刷新图像,CamCaptureStop等部分
以上是我在实验中测试出来的,大神勿拍砖 |
|