📄 dvgxctrl.c
字号:
#include "mtv415.h"
#include "dvIIC.h"
#include "define.h"
#include"utility.h"
//******************************************************************************
code BYTE acGainTable_2In1[3]=
{
0x43,
0x46,
0x42,
};
code BYTE acGainTable_AFE[3]=
{
0x42,
0x4C,
0x45,
};
code WORD awOffsetTable_2In1[3]=
{
0x0163,
0x01b0,
0x01b0,
};
code WORD awOffsetTable_AFE[3]=
{
0x019E,
0x01A6,
0x01D7,
};
//********************************************************************************
#ifdef INPUT_480I_SOY
code STRUCT_REGVALUE asGx480I_InitialTable_1[]=
{
0x00,0x7f, // changed by holy 061117
0x01,0x60,
0x02,0x00,
0x03,0x80,
0x04,0x1c,
0x05,0x90,
0x06,0xf0,
0x07, 0x84,
0x20,0x00,
0x21,0x00,
0x22,0x00,
0x23,0x46,
0x24,0x44,
0x25,0x3e,
0x26,0x95,
0x27,0x40,
0x5d,0x7c,
0x5f,0x58,
0x60,0x88,
0x61,0x11,
0x62,0xc4,
0x63,0x04,
0x64,0x01,
0x65,0x0e,
0x66,0x0e,
0x67,0x0e,
0x7d,0x88,
0x7e,0x82,
0x7f,0xa3,
0x89,0xb8,
0x8a,0x84,
0x8b,0x08,
0x8c,0x04,
0x8d,0x38,
0x8e,0x00,
0x8f,0x00,
0x90,0x00,
0x91,0x3c,
0x92,0x50,
0x93,0x20,
0x94,0x10,
0x95,0x00,
0x96,0x00,
0x97,0x30,
0x98,0xa7,
0x99,0x10,
0xe6,0x21,
0xe7,0x01,
0xe8,0x33,
0xe9,0x24,
0xea,0x65,
0xeb,0x04,
0xec,0x38,
0xed,0xff,
0xef,0xb0,
0xf0,0x01,
0xf1,0x41,
0xf2,0xc2,
0xf3,0x20,
0xf4,0x80,
0xf5,0x10,
0xf6,0x42,
0xfe,0x00,
0xff,0x41,
/*0x5f, 0x54,
0x7e, 0xf1,
0x7f, 0x73,//0x53,
0x89, 0xb8,//0x88,
0xeb, 0x0c,//0x0c,
0xed, 0xff, //for
0xee, 0x88,
0xFB, 0x81,
0xFF, 0x42,
0x91, 0x5e,
0xf2, 0xe2,
0x62, 0xbc,
0x63, 0x85,
0x61, 0x44,
0x64, 0x04,
0x06, 0x50,
0x7d, 0xf8,
0x7e, 0xf1,
0xe6, 0x99,
0xfe, 0x00,
*/
//vertical scaler
0x28, 0xfe,// changed by holy 061117
0x29, 0x71,// changed by holy 061117
0x2a, 0x02,// changed by holy 061117
0x2b, 0xc4,
0x2c, 0x04,
0x2d, 0x40,
0x2e, 0x02,
0x2f, 0xf8,
0x30, 0x03,
0x31, 0x12,// changed by holy 061118
0x32, 0x12,
0x33, 0xcf,//0xc9,// changed by holy 061118
0x34, 0x00,
0x45, 0x87,
0x48, 0xf1,
0x59, 0x03,
0x55, 0xf3,
//VEH
0x6c, 0xa0,
0x87, 0x00,
};
code STRUCT_REGVALUE asGx480I_InitialTable_2[]=
{
0x28, 0x32,// changed by holy 061117
0x29, 0x06,// changed by holy 061117
0x2a, 0x01,// changed by holy 061117
0x31, 0x00,// changed by holy 061117
0x54, 0x0d,
0x55, 0x0d,
0x56, 0x00,
0x57, 0x00,
0x60, 0xb0,
0x61, 0x12,
0x64, 0x19,
0x66, 0x28,
0x2b, 0xc4,
0x2c, 0x04,
0x48, 0x5c,
0x49, 0xa1,
0x65, 0x07,
0x67, 0x02,
0x42, 0xF0,//0xd0, // changed by holy 061117 for CSC
0x01, 0x43,
//malcolor bypass
0x1f,0x81,//0x01, // changed by holy 061117
0x12,0xdd,
0x80,0x20,
};
#endif
#ifdef INPUT_480I_SYNC
code STRUCT_REGVALUE asGx480I_InitialTable_1[]=
{
0x00,0x7f, // changed by holy 061117
0x01,0x60,
0x02,0x00,
0x03,0x80,
0x04,0x1c,
0x05,0x90,
0x06,0xf0,
0x07, 0x84,
0x20,0x00,
0x21,0x00,
0x22,0x00,
0x23,0x46,
0x24,0x44,
0x25,0x3e,
0x26,0x95,
0x27,0x40,
0x5d,0x7c,
0x5f,0x58,
0x60,0x88,
0x61,0x11,
0x62,0xc4,
0x63,0x04,
0x64,0x01,
0x65,0x0e,
0x66,0x0e,
0x67,0x0e,
0x7d,0x88,
0x7e,0x82,
0x7f,0xa3,
0x89,0xb8,
0x8a,0x84,
0x8b,0x08,
0x8c,0x04,
0x8d,0x38,
0x8e,0x00,
0x8f,0x00,
0x90,0x00,
0x91,0x3c,
0x92,0x50,
0x93,0x20,
0x94,0x10,
0x95,0x00,
0x96,0x00,
0x97,0x30,
0x98,0xa7,
0x99,0x10,
0xe6,0x21,
0xe7,0x01,
0xe8,0x33,
0xe9,0x24,
0xea,0x65,
0xeb,0x04,
0xec,0x38,
0xed,0xff,
0xef,0xb0,
0xf0,0x01,
0xf1,0x41,
0xf2,0xc2,
0xf3,0x20,
0xf4,0x80,
0xf5,0x10,
0xf6,0x42,
0xfe,0x00,
0xff,0x41,
/*0x5f, 0x54,
0x7e, 0xf1,
0x7f, 0x73,//0x53,
0x89, 0xb8,//0x88,
0xeb, 0x0c,//0x0c,
0xed, 0xff, //for
0xee, 0x88,
0xFB, 0x81,
0xFF, 0x42,
0x91, 0x5e,
0xf2, 0xe2,
0x62, 0xbc,
0x63, 0x85,
0x61, 0x44,
0x64, 0x04,
0x06, 0x50,
0x7d, 0xf8,
0x7e, 0xf1,
0xe6, 0x99,
0xfe, 0x00,
*/
//vertical scaler
0x28, 0xfe,// changed by holy 061117
0x29, 0x71,// changed by holy 061117
0x2a, 0x02,// changed by holy 061117
0x2b, 0xc4,
0x2c, 0x04,
0x2d, 0x40,
0x2e, 0x02,
0x2f, 0xf8,
0x30, 0x03,
0x31, 0x12,// changed by holy 061118
0x32, 0x12,
0x33, 0xcf,//0xc9,// changed by holy 061118
0x34, 0x00,
0x45, 0x87,
0x48, 0xf1,
0x59, 0x03,
0x55, 0xc3, // changed by holy 061118
//VEH
0x6c, 0xa0,
0x87, 0x00,
};
code STRUCT_REGVALUE asGx480I_InitialTable_2[]=
{
0x28, 0x32,// changed by holy 061117
0x29, 0x06,// changed by holy 061117
0x2a, 0x01,// changed by holy 061117
0x31, 0x00,// changed by holy 061117
0x54, 0x0d,
0x55, 0x0d,
0x56, 0x00,
0x57, 0x00,
0x60, 0xb0,
0x61, 0x12,
0x64, 0x19,
0x66, 0x28,
0x2b, 0xc4,
0x2c, 0x04,
0x48, 0x5c,
0x49, 0xa1,
0x65, 0x07,
0x67, 0x02,
0x42, 0xF0,//0xd0, // changed by holy 061117 for CSC
0x01, 0x43,
//malcolor bypass
0x1f,0x81,//0x01, // changed by holy 061117
0x12,0xdd,
0x80,0x20,
};
#endif
code STRUCT_REGVALUE asGx1080I_InitialTable_1[]=
{
0x00,0x7f, // changed by holy 061117
0x01,0x60,
0x02,0x00,
0x03,0x80,
0x09, 0x08,//for 6
0x04, 0x1c,
0x07, 0x84,
0x5f, 0x54,
0x7e, 0xf1,
0x7f, 0x73,//0x53,
0x89, 0xb8,//0x88,
0xeb, 0x0c,//0x0c,
0xed, 0xff, //for
0xee, 0x88,
0xFB, 0x81,
0xFF, 0x42,
0x91, 0x5e,
0xf2, 0xe2,
0x62, 0xbc,
0x63, 0x85,
0x61, 0x44,
0x64, 0x04,
0x06, 0x50,
0x7d, 0xf8,
0x7e, 0xf1,
0xe6, 0x99,
0xfe, 0x00,
//vertical scaler
0x28, 0xfe,
0x29, 0x65,
0x2a, 0x04,
0x2b, 0xbc,
0x2c, 0x05,
0x2d, 0x38,
0x2e, 0x04,
0x2f, 0x00,
0x30, 0x05,
0x31, 0x14,
0x32, 0x14,
0x33, 0x4c,
0x34, 0x00,
0x45, 0x87,
0x48, 0xb4,
0x59, 0x53,
0x55, 0xc0,
//VEH
0x6c, 0x20,
0x87, 0x00,
};
code STRUCT_REGVALUE asGx1080I_InitialTable_2[]=
{
//PLL
0x54, 0x0d,
0x55, 0x0d,
0x56, 0x00,
0x57, 0x00,
0x60, 0xff,
0x61, 0x05,
0x64, 0xff,
0x66, 0x14,
0x2b, 0xbc,
0x2c, 0x05,
0x48, 0x34,
0x49, 0x11,
0x65, 0x03,
0x67, 0x01,
0x42, 0xf0,
0x01, 0x43,
// 0x80, 0x23,
//0x81, 0x42,
//0x82, 0x80,
//0x83, 0x00,
//0x85, 0x7f,
//0x86, 0x00,
//0x87, 0x13,
//0x8b, 0x0d,
//0xd6, 0x80,
//0xd7, 0x80,
//0xd8, 0x80,
//0xd9, 0x80,
//0xda, 0x80,
0x1f, 0x03, //malcolor bypass
0x12, 0xdd,
0x80, 0x22,
};
// added by holy 061216 for GAMMA
static WORD code anGammaTable_R_G_B[192]=
{
// Gamma_R
0x0000,
0x0054,
0x00A8,
0x00FD,
0x0150,
0x01A4,
0x01F5,
0x0240,
0x028B,
0x02D4,
0x031B,
0x0361,
0x03A5,
0x03E8,
0x042B,
0x046E,
0x04AE,
0x04EE,
0x052E,
0x056D,
0x05AB,
0x05E8,
0x0625,
0x0662,
0x069F,
0x06DB,
0x0716,
0x0752,
0x078C,
0x07C8,
0x0802,
0x083C,
0x0875,
0x08AF,
0x08E8,
0x0921,
0x095A,
0x0993,
0x09CB,
0x0A04,
0x0A3B,
0x0A73,
0x0AAB,
0x0AE3,
0x0B1A,
0x0B52,
0x0B89,
0x0BBF,
0x0BFF,
0x0BFF,
0x0BFF,
0x0BFF,
0x0BFF,
0x0BFF,
0x0BFF,
0x0BFF,
0x0BFF,
0x0BFF,
0x0BFF,
0x0BFF,
0x0BFF,
0x0BFF,
0x0BFF,
0x0BFF,
//Gamma_G
0x0000,
0x0054,
0x00A8,
0x00FD,
0x0150,
0x01A4,
0x01F5,
0x0240,
0x028B,
0x02D4,
0x031B,
0x0361,
0x03A5,
0x03E8,
0x042B,
0x046E,
0x04AE,
0x04EE,
0x052E,
0x056D,
0x05AB,
0x05E8,
0x0625,
0x0662,
0x069F,
0x06DB,
0x0716,
0x0752,
0x078C,
0x07C8,
0x0802,
0x083C,
0x0875,
0x08AF,
0x08E8,
0x0921,
0x095A,
0x0993,
0x09CB,
0x0A04,
0x0A3B,
0x0A73,
0x0AAB,
0x0AE3,
0x0B1A,
0x0B52,
0x0B89,
0x0BBF,
0x0BFF,
0x0BFF,
0x0BFF,
0x0BFF,
0x0BFF,
0x0BFF,
0x0BFF,
0x0BFF,
0x0BFF,
0x0BFF,
0x0BFF,
0x0BFF,
0x0BFF,
0x0BFF,
0x0BFF,
0x0BFF,
//Gamma_B
0x0000,
0x0054,
0x00A8,
0x00FD,
0x0150,
0x01A4,
0x01F5,
0x0240,
0x028B,
0x02D4,
0x031B,
0x0361,
0x03A5,
0x03E8,
0x042B,
0x046E,
0x04AE,
0x04EE,
0x052E,
0x056D,
0x05AB,
0x05E8,
0x0625,
0x0662,
0x069F,
0x06DB,
0x0716,
0x0752,
0x078C,
0x07C8,
0x0802,
0x083C,
0x0875,
0x08AF,
0x08E8,
0x0921,
0x095A,
0x0993,
0x09CB,
0x0A04,
0x0A3B,
0x0A73,
0x0AAB,
0x0AE3,
0x0B1A,
0x0B52,
0x0B89,
0x0BBF,
0x0BFF,
0x0BFF,
0x0BFF,
0x0BFF,
0x0BFF,
0x0BFF,
0x0BFF,
0x0BFF,
0x0BFF,
0x0BFF,
0x0BFF,
0x0BFF,
0x0BFF,
0x0BFF,
0x0BFF,
0x0BFF,
};
BYTE m_acGainItemValue[3];
WORD m_awOffsetItemValue[3];
// added by holy 061216 for GAMMA
//static void dvGammaModeEn(BOOL bModeEn);
//static void dvGammaLUTSet(void);
void GxGainSet(BYTE CChannelSel,BYTE cGain)
{
switch(CChannelSel)
{
case 0://GX_ADC_R_GAIN:
dvRegisterWrite(IIC_GX_SLAVE_Addr,0x25,cGain);
break;
case 1://GX_ADC_G_GAIN:
dvRegisterWrite(IIC_GX_SLAVE_Addr,0x24,cGain);
break;
case 2://GX_ADC_B_GAIN:
dvRegisterWrite(IIC_GX_SLAVE_Addr,0x23,cGain);
break;
default :
break;
}
}
void GxOffsetSet(BYTE CChannelSel,WORD wOffset)
{
switch(CChannelSel)
{
case 0://GX_ADC_R_OFFSET:
dvRegisterWrite(IIC_GX_SLAVE_Addr,0x5e,LoByte(wOffset));
dvRegisterMaskWrite(IIC_GX_SLAVE_Addr,0x5f,0x30,HiByte(wOffset));
break;
case 1://GX_ADC_G_OFFSET:
dvRegisterWrite(IIC_GX_SLAVE_Addr,0x5d,LoByte(wOffset));
dvRegisterMaskWrite(IIC_GX_SLAVE_Addr,0x5f,0xc0,HiByte(wOffset));
break;
case 2://GX_ADC_B_OFFSET:
dvRegisterWrite(IIC_GX_SLAVE_Addr,0x26,LoByte(wOffset));
dvRegisterMaskWrite(IIC_GX_SLAVE_Addr,0x27,0xc0,HiByte(wOffset));
break;
default :
break;
}
}
void GxGainGet(BYTE cFormatSel)
{
BYTE i;
for(i=0;i<3;i++)
{
if(cFormatSel==0)
m_acGainItemValue[i] = acGainTable_2In1[i];
else
m_acGainItemValue[i] = acGainTable_AFE[i];
GxGainSet(i,m_acGainItemValue[i]);
}
}
void GxOffsetGet(BYTE cFormatSel)
{
BYTE i;
for(i=0;i<3;i++)
{
if(cFormatSel==0)
m_awOffsetItemValue[i] = awOffsetTable_2In1[i];
else
m_awOffsetItemValue[i] = awOffsetTable_AFE[i];
GxOffsetSet(i,m_awOffsetItemValue[i]);
}
}
void GxInitial(BYTE cFormatSel)
{
WORD i;
if(cFormatSel ==0)
{
for(i = 0; i < sizeof(asGx480I_InitialTable_1) / sizeof(STRUCT_REGVALUE); i++)
{
dvRegisterWrite(0x68,
asGx480I_InitialTable_1[i].cRegAddr,
asGx480I_InitialTable_1[i].cValue);
}
for(i = 0; i < sizeof(asGx480I_InitialTable_2) / sizeof(STRUCT_REGVALUE); i++)
{
dvRegisterWrite(0x60,
asGx480I_InitialTable_2[i].cRegAddr,
asGx480I_InitialTable_2[i].cValue);
}
}
if(cFormatSel ==1)
{
for(i = 0; i < sizeof(asGx1080I_InitialTable_1) / sizeof(STRUCT_REGVALUE); i++)
{
dvRegisterWrite(0x68,
asGx1080I_InitialTable_1[i].cRegAddr,
asGx1080I_InitialTable_1[i].cValue);
}
for(i = 0; i < sizeof(asGx1080I_InitialTable_2) / sizeof(STRUCT_REGVALUE); i++)
{
dvRegisterWrite(0x60,
asGx1080I_InitialTable_2[i].cRegAddr,
asGx1080I_InitialTable_2[i].cValue);
}
}
GxGainGet(cFormatSel);
GxOffsetGet(cFormatSel);
// added by holy 061216 for GAMMA
// dvGammaLUTSet();
//dvGammaModeEn(TRUE);
}
void GxADCTestSet()
{
//Gx reset ,use FPGA I/O
// dvRegisterMaskWrite(IIC_FPGA_SLAVE_Addr, 0xe8, 0x03, 3);
// TimeDelay(50);
// dvRegisterMaskWrite(IIC_FPGA_SLAVE_Addr, 0xe8, 0x03, 0);
//
dvRegisterMaskWrite(IIC_GX_SLAVE_Addr,0xf2,0x40,0x0);
dvRegisterMaskWrite(IIC_GX_SLAVE_Addr,0xff,0x3f,0x01);
dvRegisterMaskWrite(IIC_GX_SLAVE_Addr,0xf2,0x40,0x1);
}
#if 0
//HM added,06/12/15
void GxColorSpaceSet()
{
// dvRegisterMaskWrite(0x68,0x55,0x30,0x1);
dvRegisterMaskWrite(0x60,0x42,0x70,0x5);
}
// added by holy 061216 for GAMMA
// ---------------------------------------------------------------------------
// Gamma mode set
//
// Params:
// bModeEn : 0:by pass mode;1:gamma enable
//
// Return:
// None
// ---------------------------------------------------------------------------
void dvGammaModeEn(BOOL bModeEn)
{
dvRegisterMaskWrite(I2C_Mallard2_ADDR,0x68,0x80,(BYTE)bModeEn);
if(bModeEn)
{
dvRegisterWrite(I2C_Mallard2_ADDR,0x13,0xc0);
dvRegisterWrite(I2C_Mallard2_ADDR,0x14, 0x07);
dvRegisterWrite(I2C_Mallard2_ADDR,0x15,0x00 );
}
else
{
dvRegisterWrite(I2C_Mallard2_ADDR,0x13,0xc0);
dvRegisterWrite(I2C_Mallard2_ADDR,0x14, 0x04);
dvRegisterWrite(I2C_Mallard2_ADDR,0x15,0x00 );
}
}
// ---------------------------------------------------------------------------
// set Gamma LUT
//
// Params:
// cStatus: 0: gamma R;1:gamma G;2:gamma B.
//
// Return:
// None
// ---------------------------------------------------------------------------
void dvGammaLUTSet(void)
{
BYTE i,offset;
WORD Gamma_temp;
BYTE cStatus;
for(cStatus=0;cStatus<3;cStatus++)
{
offset = cStatus*64;
dvGammaModeEn(0);
// set gamma LUT write mode
dvRegisterMaskWrite(I2C_Mallard2_ADDR,0x69,0x80,0);
for(i=0;i<64;i++)
{
//lut address
dvRegisterWrite(I2C_Mallard2_ADDR,0x13, i+offset);
Gamma_temp = anGammaTable_R_G_B[i+offset];
//lut Gamma data[7-0]
dvRegisterWrite(I2C_Mallard2_ADDR,0x14, LoByte(Gamma_temp));
//lut Gamma data[11:8]
dvRegisterWrite(I2C_Mallard2_ADDR,0x15, HiByte(Gamma_temp));
}
dvGammaModeEn(1);
}
}
#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -