⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 cameratest.c

📁 samsung 最新芯片2450 的测试程序.
💻 C
📖 第 1 页 / 共 3 页
字号:
	switch(lcd_bpp)
	{
	case WINCONx_16BPP_565 : 
		OutFormat = OutFormat_RGB16B;
		break;
	case WINCONx_24BPP_888 : 
		OutFormat = OutFormat_RGB24B;
		break;
	}

	printf("MSDMA test. (Get YCBCR data from camera with codec path. And put the image into MSDMA.)\n");

	camCodecStatus=CAPTURE_STOPPED;
	camCodecCaptureCount=0;
	camCodecDataValid=0;

	pISR_CAM	=	(unsigned int)MSDMAISR;
	rSUBSRCPND = BIT_SUB_CAM_P|BIT_SUB_CAM_C;
	ClearPending(BIT_CAM);
	rINTSUBMSK &= ~(BIT_SUB_CAM_P|BIT_SUB_CAM_C);
	rINTMSK &= ~BIT_CAM;

 
	SetCodecFormat( InFormat_YCBCR422, OutFormat_YCBCR420, INTERLEAVE_OFF, ORDER_CRYCBY);
#if 0	
	SetCodecScaler( CameraModule[CAMTYPE].Hsize, CameraModule[CAMTYPE].Vsize, CameraModule[CAMTYPE].Hsize, CameraModule[CAMTYPE].Vsize);
	SetCodecDMA( CameraModule[CAMTYPE].Hsize, CameraModule[CAMTYPE].Vsize, OutFormat_YCBCR422, INTERLEAVE_ON);
#else if	
	SetCodecScaler( CameraModule[CAMTYPE].Hsize, CameraModule[CAMTYPE].Vsize, 640, 480);
//	SetCodecScaler( CameraModule[CAMTYPE].Hsize, CameraModule[CAMTYPE].Vsize, 320, 240);
	SetCodecDMA( 640, 480, OutFormat_YCBCR420, INTERLEAVE_OFF);
//	SetCodecDMA( 320, 240, OutFormat_YCBCR422, INTERLEAVE_ON);
#endif

#if 0	
	SetCodecFrameBuffer( CameraCodecFrameBuffer, CameraModule[CAMTYPE].Hsize, CameraModule[CAMTYPE].Vsize, OutFormat_YCBCR422, INTERLEAVE_ON);
#else if
	SetCodecFrameBuffer( CameraCodecFrameBuffer, 640, 480, OutFormat_YCBCR420, INTERLEAVE_OFF);
//	SetCodecFrameBuffer( CameraCodecFrameBuffer, 320, 240, OutFormat_YCBCR422, INTERLEAVE_ON);
#endif
	//	Use MSDMA Offset
#if 0
	SetPreviewPath( CameraModule[CAMTYPE].Hsize, CameraModule[CAMTYPE].Vsize, lcd_horizon_value, lcd_line_value, OutFormat);
#else if
	SetPreviewPath( 640, 480,  lcd_horizon_value, lcd_line_value, OutFormat);

//	SetPreviewPath( 320, 240, lcd_horizon_value, lcd_line_value, OutFormat);
#endif	

	SetPreviewFrameBuffer( CameraPreviewFrameBuffer, lcd_horizon_value, lcd_line_value, OutFormat);
	
	
	SetPreviewSource( PREVIEW_MSDMA);

	SetMSDMAFormat( MSDMA_InFormat_YCBCR420, INTERLEAVE_OFF, ORDER_CRYCBY);


	CodecCaptureStart();

	EnablePreviewScaler();
	EnableImageCapturePreview();


	while (1) {
		if (camCodecDataValid) {
			camCodecDataValid = 0;

			i = GetCodecFrameCount();
			
		
			fb = GetCodecFrameBuffer((i-2)&0x3);

	#if 0		
			SetMSDMAFrameBuffer( fb, CameraModule[CAMTYPE].Hsize, CameraModule[CAMTYPE].Vsize, 0, MSDMA_InFormat_YCBCR422);
	#else if
//		    SetMSDMAFrameBuffer( fb, lcd_horizon_value, lcd_line_value, 0, MSDMA_InFormat_YCBCR422);
		    SetMSDMAFrameBuffer( fb, 640, 480, 0, MSDMA_InFormat_YCBCR420);
	#endif			
			PreviewComplete=0;

			StartMSDMA();
			WaitMSDMA();

			while(PreviewComplete==0);

			i = GetPreviewFrameCount();
			fb = GetPreviewFrameBuffer((i-1)&0x3);

			*VIDWxADD0_Reg_Addr[0][0] = fb;

		}
		if (Uart_GetKey()== '\r') break;			
	}

	DisableImageCapturePreview();
	DisablePreviewScaler();

	CodecCaptureStop();

	while(!(camCodecStatus==CAPTURE_STOPPED ));

	printf("\ncamCodecCaptureCount=%d\n",camCodecCaptureCount);
	printf("codec Status register:0x%x\n", rCICOSTATUS);

	rINTMSK |= BIT_CAM;
	rINTSUBMSK |= BIT_SUB_CAM_P|BIT_SUB_CAM_C;
}


void MSDMAPreview_ScanLine_Offset( void)
{
   

	unsigned int OutFormat=0;
	unsigned int *Codecframebuffer, *Previewframebuffer;
	unsigned int i,fb;

	InitCameraModule();

	Previewframebuffer = (U32 *)CameraPreviewFrameBuffer;
	
	switch(lcd_bpp)
	{
	case WINCONx_16BPP_565 : 
		OutFormat = OutFormat_RGB16B;
		break;
	case WINCONx_24BPP_888 : 
		OutFormat = OutFormat_RGB24B;
		break;
	}

	printf("MSDMA test. (Get YCBCR data from camera with codec path. And put the image into MSDMA.)\n");

	camCodecStatus=CAPTURE_STOPPED;
	camCodecCaptureCount=0;
	camCodecDataValid=0;

	pISR_CAM	=	(unsigned int)MSDMAISR;
	rSUBSRCPND = BIT_SUB_CAM_P|BIT_SUB_CAM_C;
	ClearPending(BIT_CAM);
	rINTSUBMSK &= ~(BIT_SUB_CAM_P|BIT_SUB_CAM_C);
	rINTMSK &= ~BIT_CAM;

	 for(i=0; i<480*800*2*4; i++) {
		*Previewframebuffer ++ = 0x0;
	}	


	SetCodecFormat( InFormat_YCBCR422, OutFormat_YCBCR422, INTERLEAVE_ON, ORDER_CRYCBY);
#if 0	
	SetCodecScaler( CameraModule[CAMTYPE].Hsize, CameraModule[CAMTYPE].Vsize, CameraModule[CAMTYPE].Hsize, CameraModule[CAMTYPE].Vsize);
	SetCodecDMA( CameraModule[CAMTYPE].Hsize, CameraModule[CAMTYPE].Vsize, OutFormat_YCBCR422, INTERLEAVE_ON);
#else if	
	SetCodecScaler( CameraModule[CAMTYPE].Hsize, CameraModule[CAMTYPE].Vsize, 640, 480);
//	SetCodecScaler( CameraModule[CAMTYPE].Hsize, CameraModule[CAMTYPE].Vsize, 320, 240);
	SetCodecDMA( 640, 480, OutFormat_YCBCR422, INTERLEAVE_ON);
//	SetCodecDMA( 320, 240, OutFormat_YCBCR422, INTERLEAVE_ON);
#endif

#if 0	
	SetCodecFrameBuffer( CameraCodecFrameBuffer, CameraModule[CAMTYPE].Hsize, CameraModule[CAMTYPE].Vsize, OutFormat_YCBCR422, INTERLEAVE_ON);
#else if
	SetCodecFrameBuffer( CameraCodecFrameBuffer, 800, 480, OutFormat_YCBCR422, INTERLEAVE_ON);
//	SetCodecFrameBuffer( CameraCodecFrameBuffer, 320, 240, OutFormat_YCBCR422, INTERLEAVE_ON);
#endif
	//	Use MSDMA Offset
#if 0
	SetPreviewPath( CameraModule[CAMTYPE].Hsize, CameraModule[CAMTYPE].Vsize, lcd_horizon_value, lcd_line_value, OutFormat);
#else if
//	SetPreviewPath( 640, 480,  lcd_horizon_value, lcd_line_value, OutFormat);
	SetPreviewPath( 640, 480, 320, 240, OutFormat);
#endif	

	SetPreviewFrameBuffer( CameraPreviewFrameBuffer,lcd_horizon_value, lcd_line_value, OutFormat);
         rCIPRSCOS   =  rCIPRSCOS&~(0xffffffff)|(0<<16) |((480) <<0);
	
	SetPreviewSource( PREVIEW_MSDMA);

	SetMSDMAFormat( MSDMA_InFormat_YCBCR422, INTERLEAVE_ON, ORDER_CRYCBY);


	CodecCaptureStart();

	EnablePreviewScaler();
	EnableImageCapturePreview();


	while (1) {
		if (camCodecDataValid) {
			camCodecDataValid = 0;

			i = GetCodecFrameCount();
			
		
			fb = GetCodecFrameBuffer((i-2)&0x3);

	#if 0		
			SetMSDMAFrameBuffer( fb, CameraModule[CAMTYPE].Hsize, CameraModule[CAMTYPE].Vsize, 0, MSDMA_InFormat_YCBCR422);
	#else if
//		    SetMSDMAFrameBuffer( fb, lcd_horizon_value, lcd_line_value, 0, MSDMA_InFormat_YCBCR422);
		    SetMSDMAFrameBuffer( fb, 640, 480, 0, MSDMA_InFormat_YCBCR422);
	#endif			
			PreviewComplete=0;

			StartMSDMA();
			WaitMSDMA();

			while(PreviewComplete==0);

			i = GetPreviewFrameCount();
			fb = GetPreviewFrameBuffer((i-1)&0x3);

			*VIDWxADD0_Reg_Addr[0][0] = fb;

		}
		if (Uart_GetKey()== '\r') break;			
	}

	DisableImageCapturePreview();
	DisablePreviewScaler();

	CodecCaptureStop();

	while(!(camCodecStatus==CAPTURE_STOPPED ));

	printf("\ncamCodecCaptureCount=%d\n",camCodecCaptureCount);
	printf("codec Status register:0x%x\n", rCICOSTATUS);

	rINTMSK |= BIT_CAM;
	rINTSUBMSK |= BIT_SUB_CAM_P|BIT_SUB_CAM_C;
}


void Camera_Interlace( void)
{
	unsigned int OutFormat = 0;
	int i, fb;

	rGPGCON=rGPGCON&~(0x3<<20)|(0x3<<20); // set FIELD A
	rGPGUDP=rGPGUDP&~(0x3<<20); // Pull up/down disable

	rCIGCTRL=rCIGCTRL&~(0x7<<0)|(0x1<<2)|(0x1<<1)|(0x1<<0);  // Field mode enable, normal, interlace



       ResetCameraModule();
	ResetCameraInterface();
	SetCameraSourceFormat(CAMERA_ITU601,UVOFFSET_0,ORDER_YCBYCR);
	SetCameraSourceSize(800,480);
	SetCameraInterfacePolarity(InvPolPCLK_INVERSE,InvPolVSYNC_NORMAL,InvPolHREF_NORMAL);
	SetCameraWindowOffset(WINDOWOFFSET_DISABLE,0,0,0,0);

	switch(lcd_bpp)
	{
	case WINCONx_16BPP_565 : 
		OutFormat = OutFormat_RGB16B;
		break;
	case WINCONx_24BPP_888 : 
		OutFormat = OutFormat_RGB24B;
		break;
	}

	printf("Camera Codec path test.\n");

	camCodecStatus=CAPTURE_STOPPED;
	camCodecCaptureCount=0;
	camCodecDataValid=0;

	pISR_CAM	=	(unsigned int)CameraISR;
	rSUBSRCPND = BIT_SUB_CAM_P|BIT_SUB_CAM_C;
	ClearPending(BIT_CAM);
	rINTSUBMSK &= ~BIT_SUB_CAM_C;
	rINTMSK &= ~BIT_CAM;

       rCICOSCOS   =  rCICOSCOS&~(0xffffffff)|(800<<0); //initial offset, line offset
	SetCodecFormat( InFormat_YCBCR422, OutFormat, INTERLEAVE_ON, ORDER_YCBYCR);
	SetCodecScaler( 800, 480, lcd_horizon_value, lcd_line_value); // org
		
       SetCodecDMA( lcd_horizon_value, lcd_line_value, OutFormat, INTERLEAVE_ON); // org
	
	SetCodecFrameBuffer( CameraCodecFrameBuffer, lcd_horizon_value, lcd_line_value, OutFormat, INTERLEAVE_ON);
	
       
	CodecCaptureStart();

	while (1) {
		if (camCodecDataValid) {
			camCodecDataValid = 0;
			i = (GetCodecFrameCount()-2)&0x1;  
			fb = GetCodecFrameBuffer(i*2);  // 

			*VIDWxADD0_Reg_Addr[0][0] = fb;
		}
		if (Uart_GetKey()== '\r') break;			
	}

	CodecCaptureStop();

	while(!(camCodecStatus==CAPTURE_STOPPED ));

	printf("\ncamCodecCaptureCount=%d, %x\n",camCodecCaptureCount, rCIIMGCPT);
	printf("codec Status register:0x%x\n", rCICOSTATUS);

	rINTMSK |= BIT_CAM;
	rINTSUBMSK |= BIT_SUB_CAM_C;
}


void TestPattern( void)
{
	printf("Select Test Pattern : 0) No pattern (Camera)    1) Color Bar    2) Horizontal Increment    3) Vertical Increment\n");
	
	TESTPATTERN = GetIntNum();

	if ((TESTPATTERN<0)||(TESTPATTERN>3))
		TESTPATTERN = 0;
}

void FlipTest( void)
{
	printf("Select Flip mode : 0) Nomal    1) X-axis mirror    2) y-axis mirror    3) 180 deg rotation\n");

	FLIPMODE = GetIntNum();

	if ((FLIPMODE<0)||(FLIPMODE>3))
		FLIPMODE = 0;
}


void CamGpio_Init(void)
{
	rGPJCON = 0x2aaaaaa;				//	Camif enable [25:0]
	rGPJUDP = 0x2aaaaaa;				//	Camif port pull-up disable [12:0]
}

void CamClk_Set(void)
{
    int i;
    
       printf("\nSelect camera source clock (1: EPLL, 2: HCLK): ");
	i = GetIntNum();

	printf("\n");
       if ((i<1)||(i>2)) i=1;

	if(i==1) { 		//	Camera IF Clock divider setup
	printf("EPLLOUT: 96MHz\n");
	rLOCKCON1=rLOCKCON1 & ~(0xffff)|(0x800);
	rEPLLCON=(0<<24)|(0x20<<16)|(0x1<<8)|(0x2); //96MHz
	rCLKSRC&=~(1<<20); // CAM clock source: EPLL
	rCLKSRC|=(1<<6);  // EPLL Output
	}
	else if(i==2)   rCLKSRC|=(1<<20); // CAM clock source: HCLK

	printf("Select camera clock divider\n");
	printf("Choose one [Input Clock/n, n=1~16, D=4]:");	

	i=GetIntNum();
    	if ((i<1)||(i>16)) i=4;

      rCLKDIV1 = (rCLKDIV1 & ~(0xf<<26))|((i-1)<<26);	

}

void * camera_function[][2]=
{
	(void *)ReadCameraModuleStatus,		"Read Camera Module Status   ",
	(void *)CameraCodec,					"Codec mode Test             ",
	(void *)CameraPreview,				"Preview mode Test           ",
	(void *)MSDMAPreview,				"MSDMA test with Codec mode  ",
	(void *)CameraCodec_ScanLine_Offset, "Codec Scan Line Offset Test ",
	(void *)CameraPreview_ScanLine_Offset, "Preview Scan Line Offset Test  ",
	(void *)MSDMAPreview_ScanLine_Offset, "MSDMA Scan Line Offset Test    ",
	(void *)Camera_Interlace,					"Camera interlace Test       ",
	0,0
};

void Test_Camera(void)
{
	int i;

	CamGpio_Init();
    	CamClk_Set();
	Setup_RgbIf();

//	rHCLKCON&=~(1<<8);   //CAMCLK disable (HCLK)
//    rSCLKCON&=~(1<<11); // CAMCLK disable (EPLL)

	while(1) {
		i=0;	
		printf("\n\n");
		while(1) {
		    printf("%2d:%s",i,camera_function[i][1]);
		    i++;
		    if((int)(camera_function[i][0])==0) {
				printf("\n");
				break;
		    }
		    if((i%2)==0) printf("\n");
		}

		printf("\nSelect(-1 to exit): ");
		i = GetIntNum();
		printf("\n");

		if(i==-1) break;
		if(i>=0 && (i<(sizeof(camera_function)/8)-1) ) 
	    	( (void (*)(void)) (camera_function[i][0]) )();
	}
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -