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

📄 ov3620.c

📁 dz3000_51.0.0.4.rar
💻 C
📖 第 1 页 / 共 2 页
字号:
#include "general.h"
#include "main.h"
#include "uiflow.h"
#include "sensor.h"
#include "initio.h"
#include "img533.h"
#include "JoeToEvb.h"
#include "timer.h"
#include "cardlink.h"
#include "sdramhw.h"
#include "dosvar.h"
#include "ui.h"

#define K_ISP_CARD_ISP_DRAM_ADDR	K_SDRAM_ImagePlaybackDisplayBufAddr

extern xdata    	UCHAR    OB_ISP;
xdata UCHAR  	AF_Flag =0;
#define G_ucDataBuffer G_ucStorData

void UI_Save_OB_Values(void) ;
//void Save_OB2Rom(void);
 UCHAR p_Direct,p_R,p_Gr,p_B,p_Gb,rs_Direct, rs_B,rs_R,rs_Gb,rs_Gr;
UCHAR pr_Direct,pr_R,pr_Gr,pr_B,pr_Gb,s_Direct, s_B,s_R,s_Gb,s_Gr;
xdata UCHAR    comp_0x3f,comp_0x40, comp_0x41 ,comp_0x42, comp_0x43,ob_temp;
void Pre_OBCalbrationFunc(PUCHAR Direct,PUCHAR R,PUCHAR B,PUCHAR Gr,PUCHAR Gb);
void Cal_OB(void);
UCHAR CARD_OB_ISP(void);

//******************************************************//
//UCHAR Cap_OB_Register(PUCHAR R,PUCHAR B,PUCHAR Gr,PUCHAR Gb)
// function:
//  Do  OB Calibration by reading register 0x5,0x6, 0x7, 0x8  
//
//*****************************************************//
UCHAR Cap_OB_Register(void)
{
	UCHAR reg_addr[1],  reg_data[1];
//      UCHAR  rsDirect, rsRoffset,rsGroffset,rsBoffset,rsGboffset;
	XBYTE[0X2100] = 0x01;
	XBYTE[0x2a00]=0x02;
	L1_3A(3);
	/*snap setting ----wjf----*/
	reg_addr[0] = 0x12;
	reg_data[0] = 0x00;
	L2_WriteSSC(reg_addr, reg_data, 0x01, 0x00);

	reg_addr[0] = 0x03;
	reg_data[0] = 0x4c;
	L2_WriteSSC(reg_addr, reg_data, 0x01, 0x00);

	reg_addr[0] = 0x17;
	reg_data[0] = 0x0E;
	L2_WriteSSC(reg_addr, reg_data, 0x01, 0x00);
       /*max shut max gain*/
	reg_addr[0] = 0x00;
	reg_data[0] = 0x7f;
	L2_WriteSSC(reg_addr, reg_data, 0x01, 0x00);
	reg_addr[0] = 0x04;
	reg_data[0] = 0x08;
	L2_WriteSSC(reg_addr, reg_data, 0x01, 0x00);
	reg_addr[0] = 0x10;
	reg_data[0] = 0xc1;
	L2_WriteSSC(reg_addr, reg_data, 0x01, 0x00);
	
	Cal_OB();
	s_Direct = comp_0x3f;
	s_B= comp_0x40;
	s_R = comp_0x41;
	s_Gb = comp_0x42;
	s_Gr = comp_0x43;
	//printf("sDirect = %x , sBoffset = %x ,  sRoffset = %x, sGboffset= %x,  sGroffset = %x\n",(int)s_Direct,(int)s_B,(int)s_R,(int)s_Gb,(int)s_Gr);
       L1_3A(3);
	return L1K_SUCCESS;

}



//*****************************************************************//
//Test_OBCalbrationFunc()
//function:
//             Finish OB calibration after all channels are OK
//
//******************************************************************//


void Pre_OBCalbrationFunc()
	{
       UCHAR regaddr[1], regdata[1];
//       UCHAR pDirect,pRoffset,pGroffset,pBoffset,pGboffset;
	XBYTE[0X2100] = 0x01;
	XBYTE[0X2a00] = 0x00;
	/*preview setting--wjf*/
	regaddr[0] = 0x12;
	regdata[0] = 0x40;
	L2_WriteSSC(regaddr, regdata, 0x01, 0x00);

	regaddr[0] = 0x03;
	regdata[0] = 0x4c;
	L2_WriteSSC(regaddr, regdata, 0x01, 0x00);

	regaddr[0] = 0x1a;
	regdata[0] = 0xc0;
	L2_WriteSSC(regaddr, regdata, 0x01, 0x00);

	L1_3A(3);//wjf stop 3a

	regaddr[0] = 0x00;
	regdata[0] = 0xff;
	L2_WriteSSC(regaddr, regdata, 0x01, 0x00);
	regaddr[0] = 0x10;
	regdata[0] = 0x60;
	L2_WriteSSC(regaddr, regdata, 0x01, 0x00);
	regaddr[0] = 0x04;
	regdata[0] = 0x08;
	L2_WriteSSC(regaddr, regdata, 1, 0x00);
	Cal_OB();
	pr_Direct = comp_0x3f;
	pr_B=comp_0x40;
	pr_R = comp_0x41;
	pr_Gb = comp_0x42;
	pr_Gr = comp_0x43;
//	printf("prDirect = %x , prBoffset = %x ,  prRoffset = %x, prGboffset= %x,  prGroffset = %x\n",(int)pr_Direct,(int)pr_B,(int)pr_R,(int)pr_Gb,(int)pr_Gr);
//	return L1K_SUCCESS;
}

void OB_ModeKeyOnLeft(void)
{	
	UI_ClearFOSD(25, 8, 00);
       UI_PrintOSDString("Pre  OB Calibration", 1, 0,UI_MENU_HIGHLIGHT_COLOR);

	Pre_OBCalbrationFunc();
	UI_ClearFOSD(25, 8, 00);
	UI_PrintOSDString("Cap  OB Calibration", 1, 0 ,UI_MENU_HIGHLIGHT_COLOR);

	Cap_OB_Register();	//  Do  OB Calibration by reading register 0x5,0x6, 0x7, 0x8  
	UI_ClearFOSD(25, 8, 00);
       UI_PrintOSDString("Finish OB Calibration", 1, 3,UI_MENU_HIGHLIGHT_COLOR);
	UI_ClearFOSD(25, 8, 00);
	UI_PrintOSDNumber(s_Direct,0, 0,4);
	UI_PrintOSDNumber(s_B,0, 2, 4);
	UI_PrintOSDNumber(s_R,0, 4, 4);
	UI_PrintOSDNumber(s_Gb,5, 0, 4);
	UI_PrintOSDNumber(s_Gr,5, 2, 4);
	UI_PrintOSDNumber(pr_Direct,5, 4, 4);
	UI_PrintOSDNumber(pr_B,10, 0, 4);
	UI_PrintOSDNumber(pr_R,10, 2, 4);
	UI_PrintOSDNumber(pr_Gb,10, 4, 4);
	UI_PrintOSDNumber(pr_Gr,0, 1, 3);
	while(1){
		UCHAR isSel=0,isUp=0;
		GET_SELKEY(isSel);
		GET_UPKEY(isUp);
		if(isSel && isUp)
			break;
	}
}


void Cal_OB(void)
{
  UCHAR    reg_addr[6], reg_data[6];
  UCHAR    reg_0x05=0, reg_0x06=0,reg_0x07=0, reg_0x08=0,reg_0x3f=0x3f;
  
  
  UCHAR    counter;
  ob_temp=2;
  		L2_SetColorC(0x4C,0x8,0x1EB,0x1FE,0x4E,0x1F4,0x5,0x1E4,0x57);//ov supply
//Process 1 (1)
	reg_addr[0]  = 0x3f;     			
  	reg_data[0]  = 0x0f;    
  	L2_WriteSSC(reg_addr, reg_data, 0x01, 0x00);  //Set Seq SSC Write

	reg_addr[0]  = 0x40;     			
  	reg_data[0]  = 0x00;    
  	L2_WriteSSC(reg_addr, reg_data, 0x01, 0x00);  //Set Seq SSC Write

	reg_addr[0]  = 0x41;     			
  	reg_data[0]  = 0x00;    
  	L2_WriteSSC(reg_addr, reg_data, 0x01, 0x00);  //Set Seq SSC Write

	reg_addr[0]  = 0x42;     			
  	reg_data[0]  = 0x00;    
  	L2_WriteSSC(reg_addr, reg_data, 0x01, 0x00);  //Set Seq SSC Write

	reg_addr[0]  = 0x43;     			
  	reg_data[0]  = 0x00;    
  	L2_WriteSSC(reg_addr, reg_data, 0x01, 0x00);  //Set Seq SSC Write
  	
//Process 2	(2)	
#if 0
	reg_addr[0]  = 0x00;     			
  	reg_data[0]  = 0xff;    
  	L2_WriteSSC(reg_addr, reg_data, 0x01, 0x00);  //Set Seq SSC Write

	reg_addr[0]  = 0x10;  //preview     			
  	reg_data[0]  = 0x61;    
  	L2_WriteSSC(reg_addr, reg_data, 0x01, 0x00);  //Set Seq SSC Write
#endif
	L2_WaitVD(0, 3);

//Process 3	(3)	Read Reg0x05( R ), Reg0x06( Gr ), Reg0x07( Gb ), Reg0x08( B )
  	L2_ReadSSC(0x05, reg_data, 0x01, 0x01);   
	reg_0x05 = reg_data[0];

  	L2_ReadSSC(0x06, reg_data, 0x01, 0x01);   
	reg_0x06 = reg_data[0];

  	L2_ReadSSC(0x07, reg_data, 0x01, 0x01);   
	reg_0x07 = reg_data[0];
	
  	L2_ReadSSC(0x08, reg_data, 0x01, 0x01);   
	reg_0x08 = reg_data[0];

	L2_ReadSSC(0x3f, reg_data, 0x01, 0x01);   
	reg_0x3f = reg_data[0];
	
   // UI_PrintFOSDString(" test ", 1, 2, 3);   //alan  test
   comp_0x3f=0x0f ,comp_0x40=0x00, comp_0x41=0x00 ,comp_0x42=0x00, comp_0x43=0x00;
   
   printf("reg-0x05=%x reg-0x06=%x reg-0x07=%x reg-0x08=%x\n ",(int)reg_0x05,(int)reg_0x06,(int)reg_0x07,(int)reg_0x08);

if (reg_0x05 > 4)
{
              reg_0x3f =(reg_0x3f &0xf7);
	       reg_addr[0]  = 0x3f;     			
  		reg_data[0]  = reg_0x3f;    
  		L2_WriteSSC(reg_addr, reg_data, 0x01, 0x00);  //Set Seq SSC Write
  		comp_0x3f=reg_0x3f;
}
else
{

              reg_0x3f =(reg_0x3f |0x08);
	       reg_addr[0]  = 0x3f;     			
  		reg_data[0]  = reg_0x3f;    
  		L2_WriteSSC(reg_addr, reg_data, 0x01, 0x00);  //Set Seq SSC Write
  		comp_0x3f=reg_0x3f;
}
if (reg_0x06 > 4)
{
              reg_0x3f =(reg_0x3f &0xfd);
	       reg_addr[0]  = 0x3f;     			
  		reg_data[0]  = reg_0x3f;    
  		L2_WriteSSC(reg_addr, reg_data, 0x01, 0x00);  //Set Seq SSC Write
  		comp_0x3f=reg_0x3f;
}
else
{
              reg_0x3f =(reg_0x3f |0x02);
	       reg_addr[0]  = 0x3f;     			
  		reg_data[0]  = reg_0x3f;    
  		L2_WriteSSC(reg_addr, reg_data, 0x01, 0x00);  //Set Seq SSC Write
  		comp_0x3f=reg_0x3f;
}
if (reg_0x07 > 4)
{
              reg_0x3f =(reg_0x3f &0xfe);
	       reg_addr[0]  = 0x3f;     			
  		reg_data[0]  = reg_0x3f;    
  		L2_WriteSSC(reg_addr, reg_data, 0x01, 0x00);  //Set Seq SSC Write
  		comp_0x3f=reg_0x3f;
}
else
{
              reg_0x3f =(reg_0x3f |0x01);
	       reg_addr[0]  = 0x3f;     			
  		reg_data[0]  = reg_0x3f;    
  		L2_WriteSSC(reg_addr, reg_data, 0x01, 0x00);  //Set Seq SSC Write
  		comp_0x3f=reg_0x3f;
}
if (reg_0x08 > 4)
{
              reg_0x3f =(reg_0x3f &0xfb);
	       reg_addr[0]  = 0x3f;     			
  		reg_data[0]  = reg_0x3f;    
  		L2_WriteSSC(reg_addr, reg_data, 0x01, 0x00);  //Set Seq SSC Write
  		comp_0x3f=reg_0x3f;
}
else
{
              reg_0x3f =(reg_0x3f |0x04);
	       reg_addr[0]  = 0x3f;     			
  		reg_data[0]  = reg_0x3f;    
  		L2_WriteSSC(reg_addr, reg_data, 0x01, 0x00);  //Set Seq SSC Write
  		comp_0x3f=reg_0x3f;
}
 UI_PrintOSDString("Direct", 1, 1,UI_MENU_TITLE_TEXT_COLOR);
 UI_PrintOSDNumber(comp_0x3f, 10, 1,UI_MENU_TITLE_TEXT_COLOR);
 
printf("comp_3f initial=%x\n",(int)comp_0x3f);
L2_WaitVD(0, 3);

if((comp_0x3f&0x08)==0)
   {
    
		for(counter = 0xff ; counter > 0 ; counter--)
		{
			reg_addr[0]  = 0x40;     			
			reg_data[0]  = counter;    
			L2_WriteSSC(reg_addr, reg_data, 0x01, 0x00);  //Set Seq SSC Write
	              L2_WaitVD(0, 2); 
				  
			L2_ReadSSC(0x05, reg_data, 0x01, 0x01);   
			reg_0x05 = reg_data[0];
			printf("5_process_avg=%d   5_process_counter=%x\n",(int)(reg_data[0]),(int)counter);
			if(reg_0x05<4)
			{
                            if(counter==0xff)

⌨️ 快捷键说明

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