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

📄 scaler.c

📁 车载DVD的主控MCU的源程序
💻 C
📖 第 1 页 / 共 3 页
字号:
void SetHP(void)
{
// Horizontal Start
	WriteWordIIC563(0x034,FuncBuf[pHPOSITION]);
}
/*==========================================
==========================================*/
void SetVP(void)
{
// Vertical Start
	if(Interlance){
		WriteWordIIC563(0x030,FuncBuf[pVPOSITION]);
		if(V_SYNC < 550)
			WriteWordIIC563(0x02e,FuncBuf[pVPOSITION]-1);
		else
			WriteWordIIC563(0x02e,FuncBuf[pVPOSITION]);
	}else
//		WriteWordIIC563(0x02e,0x0050);
		WriteWordIIC563(0x02e,FuncBuf[pVPOSITION]);
}
/*==========================================
==========================================*/
/*
void SetSharpness(void)
{
	Word code H_Sharp[]={
		0x1f,0x1e,0x1d,0x1c,0x1b,0x1a,0x19,0x18,
		0x17,0x16,0x15,0x14,0x13,0x12,0x11,0x10,
		0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,
		0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0e,0x0f,
	};
	WriteIIC563(0x060,H_Sharp[FuncBuf[pSHARPNESS]]);
	WriteIIC563(0x066,FuncBuf[pSHARPNESS]/4);
}
*/
/*==========================================
==========================================*/
void SetBrightness(void)
{
/*
	unsigned short value;

#define	BACKLIGHT_50	((maxBACKLIGHT-minBACKLIGHT)/2+minBACKLIGHT)

	if(FuncBuf[pBRIGHTNESS]>BACKLIGHT_50)		// max=111, min=18, 50%=46+18=64
	{	
		value = FuncBuf[pBRIGHTNESS];
		value = (value-BACKLIGHT_50);
	
		//PWM9_REG = 3*value/5+60;		// evan modify date 060214
	
		PWM9_REG = 7*value/5+60;
	
		WriteIIC563(0x061,0);
		WriteIIC563(0x062,0);		
	}
	else
	{
		PWM9_REG = 60;
		value = 0x100 - (BACKLIGHT_50-FuncBuf[pBRIGHTNESS])*25/40;
		WriteIIC563(0x061,0);
		WriteIIC563(0x062,(Byte)value);
	}
*/	
}
/*==========================================
==========================================*/
void SetContrast(void)
{
	Word value,k;
	
	FuncBuf[pRCOLOR]=0x7f;
	FuncBuf[pGCOLOR]=0x7f;
	FuncBuf[pBCOLOR]=0x7f;
	FuncBuf[pCONTRAST]=0x7f;
#if ContrastBlock == sRGBGain
//	WriteIIC563(0x3C0,0x7c); 
//	WriteIIC563(0x3C4,0x80);//level0);  
// 	WriteIIC563(0x3C5,0x80);//level1);   
//    	WriteIIC563(0x3C6,0x80);//level2);
	sRGB(200,200,200);
#else
	
	k = FuncBuf[pCONTRAST] + 100;		//78 ---- 178
	value = FuncBuf[pRCOLOR];
	value = (unsigned short)value * k / 128;
	WriteIIC563(0x061,0x0d);
	WriteIIC563(0x063,value);
	value = FuncBuf[pGCOLOR];
	value = (unsigned short)value * k / 128;
	WriteIIC563(0x061,0x0e);
	WriteIIC563(0x063,value);
	value = FuncBuf[pBCOLOR];
	value = (unsigned short)value * k / 128;
	WriteIIC563(0x061,0x0f);
	WriteIIC563(0x063,value);

#endif
 }
/*==========================================
==========================================*/
void ForceToBackground(Byte color_r,Byte color_g,Byte color_b)
{
	unsigned char temp;
	if((ForceToBack == 0)||(FactMode!= 0)){
		ForceToBack = 1;
		WriteIIC563(0x16b,color_r);
		WriteIIC563(0x16c,color_g);
		WriteIIC563(0x16d,color_b);
		temp = ReadIIC563(0x159);
		//WriteIIC563(0x159,(temp&0xc0|0x07));	//RGB
		WriteIIC563(0x159,(temp&0xc0));	//RGB
		WriteIIC563(0x154,0x02);
	}
}
/*==========================================
==========================================*/
void SetDisplayNormal(void)
{
	Byte ch;
	if(SyncMode == 3)
		{
			;
		}
	else
		{
		WriteIIC563(0x1a9,0x00);
		ch = ReadIIC563(0x101);
		WriteIIC563(0x101,ch|BIT_5);	//chip warm reset
		//Sleep(20);
		WriteIIC563(0x101,ch);	//chip warm reset
		}
#if DVImode == DEmode
	// Jacky 20040623 For DE mode scaler shut down
	if(SyncMode == 3)	//DVI
	{
		WriteIIC563(0x1a9,0x00);	//disable IRQ interrupt
		ch = ReadIIC563(0x196);
		WriteIIC563(0x196,0x94);
		Sleep(20);
		WriteIIC563(0x196,ch&(~BIT_7));
	}
#endif
	Sleep(80);
	Sleep(50);
	//-------------------------
	WriteIIC563(0x1ab,0x3f);		//clear IRQ
	WriteIIC563(0x1ac,0x1f);
	WriteIIC563(0x1a9,0x3c);
	LoadADC_Gain();
	if(SyncMode == 3)	//DVI
	{
		WriteIIC563(0x068,0x00);
		WriteIIC563(0x06a,0x00);
	}
	else
	{
		WriteIIC563(0x068,0x7a);
		WriteIIC563(0x06a,0x92);
	}
///////////////////////////////////////////
	WriteIIC563(0x101,0x00);
 	WriteIIC563(0x1b9,0x02);  
 	WriteIIC563(0x1ef,0x00);  
 	WriteIIC563(0x1f7,0x00);  
 	WriteIIC563(0x204,0x00);
///////////////////////////////////////////
	ForceToBack = 0;
	//WriteIIC563(0x159,(ReadIIC563(0x159)&0xc0|0x07));	//RGB
	WriteIIC563(0x159,(ReadIIC563(0x159)&0xc0));	//RGB
	if(ModePoint>7)
		AutoTune();
	WriteIIC563(0x154,0x00);	//comeback to image
	WriteIIC563(0x16e,0x07);	//Graphic display enable
}
/*==========================================
==========================================*/
void ScalerPowerUp(void)
{
	unsigned char temp;
//	PanelPowerOn();
//	Sleep(PowerUpPanelTiming);
	PowerDown = 0;
	SetInterface();
	temp = ReadIIC563(0x00e);
	WriteIIC563(0x00e,temp | 0x07);
	WriteIIC563(0x150,DisplayControl);
//	SetBrightness();
	LoadADC_Gain();
	SetContrast();
#if PM
	printf("Scaler PowerUp!!\r\n");
#endif

}
/*==========================================
==========================================*/
#define Manual_offset	0	//AGN request y50527
void LoadADC_Gain(void)
{
/*
	Byte Temp;
		FuncBuf[pROFFSET] = Read24C16(ep_ADC_R_Offset);
		Temp = FuncBuf[pROFFSET];
		WriteIIC563(0x003,Temp -Manual_offset);
		FuncBuf[pGOFFSET] = Read24C16(ep_ADC_G_Offset);
		Temp = FuncBuf[pGOFFSET];
		WriteIIC563(0x006,Temp -Manual_offset);
		FuncBuf[pBOFFSET] = Read24C16(ep_ADC_B_Offset);
		Temp = FuncBuf[pBOFFSET];
		WriteIIC563(0x009,Temp -Manual_offset);
	FuncBuf[pRADC] = Read24C16(ep_ADC_R_Gain);
	WriteIIC563(0x001,FuncBuf[pRADC]);
	FuncBuf[pGADC] = Read24C16(ep_ADC_G_Gain);
	WriteIIC563(0x004,FuncBuf[pGADC]);
	FuncBuf[pBADC] = Read24C16(ep_ADC_B_Gain);
	WriteIIC563(0x007,FuncBuf[pBADC]);
	//Set backend gain
*/	
#if ContrastBlock == sRGBGain
	WriteIIC563(0x061,0x0d);
	WriteIIC563(0x063,0xf0);
	WriteIIC563(0x061,0x0e);
	WriteIIC563(0x063,0xf0);
	WriteIIC563(0x061,0x0f);
	WriteIIC563(0x063,0xf0);
#endif
}
/*==========================================
==========================================*/

unsigned char Get_active_index(void)
{
	unsigned char i,Resolution;
	Resolution=EEP_ModeMap[T_EEaddr_Resol]&0x7f;
	for(i=0;i<sizeof Active_Tab/7 ;i++){
			if(Resolution==Active_Tab[i].Resolution_tag){
				return i;
			}
	}
	return 0;
	
}

/*==========================================
==========================================*/
void SetCaptureEnable(void)
{
	unsigned char temp;
	temp = ReadIIC563(0x020);
	WriteIIC563(0x020,temp & (~BIT_0));
	WaitSetup(5);
	WaitSetup(5);
	temp = ReadIIC563(0x020);
	WriteIIC563(0x020,temp|BIT_0);
}
/*==========================================
==========================================*/
void sRGB(Byte RedGain,Byte GreenGain,Byte BlueGain)
{
#define Saturation 50
#define Tint 50
	xdata Byte i,j;
	xdata Word ss,hh;
	xdata short temp,gain[3];
	xdata short UserPrefContrast;
	code Byte arry[3][3]={
							{1,0,0},
							{0,1,0},
							{0,0,1}
						  };
	
	gain[0] = (Word)(RedGain*100)/255+30;
	gain[1] = (Word)(GreenGain*100)/255+30;
	gain[2] = (Word)(BlueGain*100)/255+30;
	ss = ((Word)Saturation * 256 + 50) / 100;
	hh = (((Word)Tint * 256 + 50) / 100) - 128;
	UserPrefContrast = 120; // for test only , 2004/04/13
	
	for(i=0; i<3; i++)
	{
		WriteIIC563(0x1d0,((i * 2) + 0x31));
		for(j=0; j<3; j++)
		{
			temp = ((((long)(UserPrefContrast<<1)*((long)gain[i]<<5))+2048)>>12)*(long)arry[i][j];
			if(temp < 0)
			{
				temp = temp ^ 0xffff;
				temp +=1 ;
				temp |= 0xf400;
			}
			WriteWordIIC563((0x1d1+(j*2)),temp);
		}
	}
	WriteIIC563(0x1d0,0x3d);
}
#define Max_Video_VP	40
Word code AvTable60[20][2]={
		0x055,0x01ED,
		0x053,0x0026,
		0x057,0x0146,
//		0x059,0x009f,
//		0x05b,0x029a,
		0x059,0x002F,
		0x05b,0x029D,
		
		0x15b,0X031C,
		0x15e,0X03E6,
		0x15d,0X0017,
		0x160,0X0028,
		 0x162,0X001C,		//9
		0x166,0X0050,
		0x164,0X03B4,
		0x168,0X03B0,
		0x16f,0X0000,		//d
		0x171,0X0295,
		0x175,0X033A,
		0x17a,0X0003,
		0x17c,0X0002,
		0x17e,0X0009,
		0x180,0X0000,
			};
	Word code AvTable50[20][2]={
		0x055,0x0000,
		0x053,0x0098,
		0x057,0x0139,
//		0x059,0x00ad,			 
//		0x05b,0x028e,
		0x059,0x002f,			 
		0x05b,0x0299,
		 
		0x15b,0x031c,
		0x15e,0x3e6,
		0x15d,0x0017,
		0x160,0x0028,
		//0x162,PanelVActiveStart,		
		 0x162,0x0022,		//9
		0x166,0x004f,
		0x164,0x1fe,
		0x168,0x03b0,
		//0x16f,PanelVActiveStart,
		0x16f,0x0000,		//d
		0x171,0x0210,
		0x175,0x0332,
		0x17a,0x0003,
		0x17c,0x0002,
		0x17e,0x0069,
		0x180,PanelWidth,
	};

void SetScalerAVNTSC(void)
{
	Byte i;
//	if(Video_50Hz)
	if(0)
	{//50Hz
		SetDPLL(26000000);
		for(i=0;i<20;i++)
			WriteWordIIC563(AvTable50[i][0],AvTable50[i][1]);
	}
	else
	{//60Hz
		SetDPLL(32500000);
		for(i=0;i<20;i++)
			WriteWordIIC563(AvTable60[i][0],AvTable60[i][1]);
	}
   
	WriteIIC563(0x072,0x60);	//Sync off  //xxx
	WriteIIC563(0x154,0x00);
	WriteIIC563(0x041,0x13);
	//WriteIIC563(0x179,0x07);	
	WriteWordIIC563(0x179,PanelMinHTotal);
	WriteIIC563(0x040,0x41);	//auto detect on
	WriteIIC563(0x16e,0x47);
	Sleep(200);
	WriteIIC563(0x040,0x45);	//auto detect off
//	WriteIIC563(0x102,0x01);	//power down ADC
	WriteIIC563(0x102,0x00);	//for OD power  
	Sleep(200);

	i = ReadIIC563(0x101);
	WriteIIC563(0x101,i  |BIT_5);	//chip warm reset	
		//Sleep(20);
	WriteIIC563(0x101,i);	//chip warm reset
	
	WriteIIC563(0x101,0x40);	
	WriteIIC563(0x1b9,0x02);
	WriteIIC563(0x1ef,0x04);
//	WriteIIC563(0x1f7,0xc0);
	WriteIIC563(0x204,0x00);
	WriteIIC563(0x16e,ReadIIC563(0x16e)|BIT_7);
    

// add by Eason 070503
	WriteIIC563(0x023, ReadIIC563(0x023)|0x01);     //enable video  // video

⌨️ 快捷键说明

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