📄 autoadj.c
字号:
PhaseResult <<= 8;
value = ReadIIC_HW(Scaler_Addr,0x21);
PhaseResult += value;
if(PhaseResult > Temp){
Temp = PhaseResult;
j = i;
}
}
if(Temp > 0x300){
i = 0x02 + m * 2;
j = k+j;
break;
}
}
if(k == 0){
flag2 |= BIT_0;
return;
}
for(n=0; n<16; n++){
i = 0x02 + m * 2;
WriteIIC_HW(Scaler_Addr,i,k-n);
WaitSetup(5);
Timer3 = 10;
i = 0x19 + m * 0x10;
WriteIIC_HW(Scaler_Addr,0x20,i);
while((ReadIIC_HW(Scaler_Addr,0x20) & BIT_0) && Timer3 != 0){
CheckModeChange();
if((flag2 & BIT_0) != 0)
return;
}
if(Timer3 == 0){
flag2 |= BIT_0;
return;
}
j = 0;
Temp = 0;
for(i=0; i<8; i++){
WriteIIC_HW(Scaler_Addr,0x24,i);
value = ReadIIC_HW(Scaler_Addr,0x23);
PhaseResult = value;
PhaseResult <<= 8;
value = ReadIIC_HW(Scaler_Addr,0x22);
PhaseResult += value;
PhaseResult <<= 8;
value = ReadIIC_HW(Scaler_Addr,0x21);
PhaseResult += value;
if(PhaseResult > Temp){
Temp = PhaseResult;
j = i;
}
}
if(j == 7){
break;
}
}
i = 0x02 + m * 2;
j = k-n;
WriteIIC_HW(Scaler_Addr,i,j);
}
R_ADC = ReadIIC_HW(Scaler_Addr,0x02);
Write24C16(0xfd,R_ADC);
G_ADC = ReadIIC_HW(Scaler_Addr,0x04);
Write24C16(0xfe,G_ADC);
B_ADC = ReadIIC_HW(Scaler_Addr,0x06);
Write24C16(0xff,B_ADC);
}
void AutoColor(void)
{
flag2 &= ~BIT_0;
WriteWordIIC_HW(Scaler_Addr,0x18,HP_Start - 20);
SetADC_Offset(0x20);
if((flag2 & BIT_0) != 0x00){
goto Error;
}
WriteWordIIC_HW(Scaler_Addr,0x18,HP_Start);
SetADC_Gain(0xa0);
Error:
if((flag2 & BIT_0) != 0){
LoadADC_Gain();
}
}
//////////////////////////////////////////////////////////////////////////////
void AutoClockByPhase(bit h)
{
bit R_L,U_D;
unsigned char k,temp;
unsigned short i,GoodClk;
xdata unsigned long MaxMin,Value;
if((ModePoint < UserModeSt)&&(h == 1)){
i = 0x104 + (ModePoint * 8);
HTotal = MCU_DataMap[i];
i++;
HTotal <<= 8;
HTotal += MCU_DataMap[i];
}
GoodClk = HTotal;
SetADC_PLL();
WaitSetup(40);
if((flag2 & BIT_0) != 0)
return;
MaxMin = CheckPhaseData();
temp = TempValue;
if((flag2 & BIT_0) != 0)
return;
U_D = 0;
R_L = 1;
for(k=0; k<16; k++){
if(R_L == 1){
HTotal += 2;
SetADC_PLL();
WaitSetup(40);
if((flag2 & BIT_0) != 0)
return;
Value = CheckPhaseData();
if((flag2 & BIT_0) != 0)
return;
if(MaxMin < Value){
GoodClk = HTotal;
MaxMin = Value;
temp = TempValue;
U_D = 1;
}
else{
if(U_D == 0){
R_L = 0;
HTotal -= 2;
U_D = 1;
}
else{
break;
}
}
}
else{
HTotal -= 2;
SetADC_PLL();
WaitSetup(40);
if((flag2 & BIT_0) != 0)
return;
Value = CheckPhaseData();
if((flag2 & BIT_0) != 0)
return;
if(MaxMin < Value){
GoodClk = HTotal;
MaxMin = Value;
temp = TempValue;
U_D = 1;
}
else{
if(U_D == 0){
R_L = 1;
HTotal += 2;
U_D = 1;
}
else{
break;
}
}
}
}
HTotal = GoodClk;
SetADC_PLL();
ADC_Phase = (temp + 24) & 0x3f;
Repeat = 32;
SetADC_Phase();
}
unsigned long CheckPhaseData(void)
{
unsigned char zz,ch;
xdata unsigned long Value,MinValueTemp,MaxValueTemp;
MaxValueTemp = 0;
MinValueTemp = 0xffffffff;
ADC_Phase = 0;
SetADC_Phase();
WriteIIC_HW(Scaler_Addr,0x20,0x01); // 0x01 --> 0x09
Timer3 = 10;
for(ADC_Phase=4; ADC_Phase<0x42; ADC_Phase = ADC_Phase + 4){
while((ReadIIC_HW(Scaler_Addr,0x20) & BIT_0) && Timer3 != 0){
CheckModeChange();
if((flag2 & BIT_0) != 0)
return 0;
}
SetADC_Phase();
WriteIIC_HW(Scaler_Addr,0x20,0x01);
Timer3 = 10;
Value = 0x00000000;
for(zz=0x24; zz>0x20; zz--){
ch = ReadIIC_HW(Scaler_Addr,zz);
Value = Value << 8;
Value = Value + ch;
}
if(Value < MinValueTemp){
MinValueTemp = Value;
TempValue = (ADC_Phase - 4) & 0x3f;
}
if(Value > MaxValueTemp){
MaxValueTemp = Value;
}
}
Value = MaxValueTemp - MinValueTemp;
return Value;
}
//////////////////////////////////////////////////////////////////////////////
void CheckRCV(void)
{
unsigned char i;
if(RI == 1){
i = SBUF;
RI = 0;
CheckCmd(i);
}
}
void CheckCmd(unsigned char i)
{
while(TI == 0){}
SBUF = i;
TI = 0;
if(i == 13){ //command over
while(TI == 0){}
printf("\n");
switch(rwbuf){
case 0x00:
printf("\r\n");
printf("W0 aaaa dd : Write 24C16\r\n");
printf("R0 aaaa : Read 24C16\r\n");
printf("W1 aaaa dd : Write Scaler\r\n");
printf("R1 aaaa : Read Scaler\r\n");
printf("W2 aaaa dd : Write rgbGain\r\n");
printf("R2 aaaa : Read rgbGain\r\n");
printf("W3 aaaa dd : Write SAA7114\r\n");
printf("R3 aaaa : Read SAA7114\r\n");
printf("R4 0 : Auto Black Level\r\n");
printf("R4 1 : Auto White Level\r\n");
printf("R4 2 : Auto Color\r\n");
printf("R4 3 : Set 6500K\r\n");
printf("R4 4 : Set 7500K\r\n");
printf("R4 5 : Set 9300K\r\n");
printf("R4 6 : Resive\r\n");
printf("R4 7 : DDC Write Enable\r\n");
printf("R4 8 : Disble Report Status\r\n");
printf("R4 9 : Enable Report Status\r\n");
printf("W4 0 dd : Set IIC BaudRate\r\n");
printf(" aaaa : 16/8 bit Address\r\n");
printf(" dd : 8 bit Data\r\n");
printf("Enter Key : For help!\r\n");
break;
case 0xe0:
Write24C16(abuf,dbuf);
printf("EEPROM: 0x%x = 0x%x\r\n",abuf,(unsigned short)dbuf);
break;
case 0xc1:
dbuf = Read24C16(abuf);
printf("EEPROM: 0x%x = 0x%x\r\n",abuf,(unsigned short)dbuf);
break;
case 0xe2:
abuf &= 0x0ff;
WriteIIC_HW(Scaler_Addr,(unsigned char)abuf,dbuf);
printf("Scaler: 0x%x = 0x%x\r\n",abuf,(unsigned short)dbuf);
break;
case 0xc3:
abuf &= 0x0ff;
dbuf = ReadIIC_HW(Scaler_Addr,(unsigned char)abuf);
printf("Scaler: 0x%x = 0x%x\r\n",abuf,(unsigned short)dbuf);
break;
case 0xe4:
abuf &= 0x03;
switch(abuf){
case 0:
R_Gain = dbuf;
break;
case 1:
G_Gain = dbuf;
break;
case 2:
B_Gain = dbuf;
break;
}
printf("rgbGain : %x = %x\r\n",(unsigned short)abuf,(unsigned short)dbuf);
sRGB();
CmdTxBuffer[0] = 0x5a;
break;
case 0xc5:
abuf &= 0x03;
switch(abuf){
case 0:
dbuf = R_Gain;
break;
case 1:
dbuf = G_Gain;
break;
case 2:
dbuf = B_Gain;
break;
}
printf("rgbGain : %x = %x\r\n",(unsigned short)abuf,(unsigned short)dbuf);
break;
case 0xe6:
abuf &= 0x0ff;
WriteIIC_HW(SAA7114,(unsigned char)abuf,dbuf);
printf("SAA7114: 0x%x = 0x%x\r\n",abuf,(unsigned short)dbuf);
break;
case 0xc7:
abuf &= 0x0ff;
dbuf = ReadIIC_HW(SAA7114,(unsigned char)abuf);
printf("SAA7114: 0x%x = 0x%x\r\n",abuf,(unsigned short)dbuf);
break;
case 0xc9:
abuf &= 0x0ff;
switch(abuf){
case 0:
flag3 &= ~BIT_0; //burn in mode off
flag3 &= ~BIT_2; //disable report
SetADC_Offset(0x00);
printf("Set Dark OK!\r\n");
CmdTxBuffer[0] = 0x5a;
break;
case 1: //white
SetADC_Gain(0xf8);
printf("Set white OK!\r\n");
CmdTxBuffer[0] = 0x5a;
break;
case 2: //Auto Color
AutoColor();
printf("Set Auto Color OK!\r\n");
CmdTxBuffer[0] = 0x5a;
break;
case 3: // user and 6500K
Write24C16(0xee,R_Gain); //user
Write24C16(0xef,G_Gain);
Write24C16(0xf0,B_Gain);
printf("Write USER\r\n");
Write24C16(0xf1,R_Gain); //6500K
Write24C16(0xf2,G_Gain);
Write24C16(0xf3,B_Gain);
printf("Write 6500K\r\n");
CmdTxBuffer[0] = 0x5a;
break;
case 4: //7500K
Write24C16(0xf4,R_Gain); //7500K
Write24C16(0xf5,G_Gain);
Write24C16(0xf6,B_Gain);
printf("Write 7500K\r\n");
CmdTxBuffer[0] = 0x5a;
break;
case 5: //9300K
Write24C16(0xf7,R_Gain); //9300K
Write24C16(0xf8,G_Gain);
Write24C16(0xf9,B_Gain);
printf("Write 9300K\r\n");
CmdTxBuffer[0] = 0x5a;
break;
case 6: //Auto adjust
AutoTune();
// AutoClockByPhase();
printf("Auto adjust\r\n");
CmdTxBuffer[0] = 0x5a;
break;
case 8:
flag3 &= ~BIT_2; //Disable report
printf("Disable Report Status\r\n");
break;
case 9:
flag3 |= BIT_2; //Set report
printf("Report Status\r\n");
break;
}
break;
case 0xe8: //Set IIC Baudrate
dbuf &= 0x03;
dbuf <<= 2;
IIC_BaudRate = dbuf;
printf("Set IIC Baudrate: %x\r\n",(unsigned short)dbuf);
break;
default:
RcvError();
return;
break;
}
rwbuf = 0;
abuf = 0;
dbuf = 0;
printf("OK\r\n");
return;
}
if((rwbuf & 0x80) == 0){ //function
switch(i){
case 0x30:
case 0x31:
case 0x32:
case 0x33:
case 0x34:
i = i & 0x0f;
i = i << 1;
rwbuf = rwbuf + i;
rwbuf |= 0x80;
break;
case 0x57: //W
case 0x77: //w
rwbuf &= 0xfe;
break;
case 0x52: //R
case 0x72: //r
rwbuf |= 0x01;
break;
default:
printf("\r\n");
RcvError();
break;
}
}
else{ //address or data
if(i == 0x20){
if((rwbuf & 0x40) == 0){
rwbuf |= 0x40;
}
else{
if((rwbuf & 0x20) == 0){
rwbuf |= 0x20;
}
else{
RcvError();
}
}
return;
}
if((i > 0x2f)&&(i < 0x3a)){
i &= 0x0f;
}
else{
if(i > 0x60){
i = i - 0x20;
}
if(i > 0x40){
i = i - 0x07;
}
if((i > 0x39)&&(i < 0x40)){
i &= 0x0f;
}
else{
RcvError();
return;
}
}
if((rwbuf & 0x60) == 0x40){
abuf <<= 4;
abuf += i;
}
if((rwbuf & 0x60) == 0x60){
dbuf <<= 4;
dbuf += i;
}
}
}
void RcvError(void)
{
while(TI == 0){}
printf("\nError\r\n");
rwbuf = 0;
abuf = 0;
dbuf = 0;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -