📄 ov3620.c
字号:
#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 + -