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

📄 autoadj.c

📁 NT68521源代码
💻 C
📖 第 1 页 / 共 2 页
字号:
				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 + -