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