📄 lcd_main.c
字号:
else if (0x47 < Data[0])
Data[1] = 0x0d;
else if (0x37 < Data[0])
Data[1] = 0x0e;
else
Data[1] = 0x0f;
RTDSetByte(DPLL_FILTER_D3, Data[1]);
RTDSetByte(DPLL_SSP_D4, 0xf7);
#endif
Init_Input_Source(); // Initial Mode & OSD
}
void Reset_RTD(void)
{
bRTD_RST = 0;
Delay_Xms(10);
do
{
// Wait for reset complete
bRTD_RST = 1;
Delay_Xms(6);
}
while (!bRTD_RST);
// Initial RTD3000 & free background display
RTDCodeW(RTD_PWUP_INI);
#if(HDCP_ENABLE)
RTDCodeW(BKSV);
KEYCodeW(HDCP_KEY_A_Port);
#endif
RTDCodeW(RTD_DDC_TABLE);
RTDCodeW(RTD_IO_INI);
RTDSetByte(HOSTCTRL_02, 0x40); // Wake RTD up
RTDCodeW(FreeV);
RTDSetByte(VDIS_SIGINV_21, 0x00); // DHS, DVS, DEN, DCLK MUST NOT be inverted.
RTDSetBit(VDIS_CTRL_20, 0xfd, 0x01); // DHS, DVS, DEN, DCLK and data are clamped to 0
// Initial RTD3000-OSD
RTDCodeW(OSD_PWUP_INI);
RTDCodeW(OSD_Reset);
RTDCodeW(Palette_Open);
RTDCodeW(Palette_7);
RTDCodeW(Palette_Close);
Set_Gamma();
Set_Dithering();
Set_Bright_Contrast();
}
#if(INPUTSOURCE == VIDEO_ONLY)
void Init_Input_Source(void)
{
ucMode_Found = MODE_NOSUPPORT;
ucMode_Curr = MODE_NOSIGNAL;
ucMode_Times = 0;
ucAV_Mode = 0;
bVpole_Curr = 1; // The initial set of polarity is positive
bHpole_Curr = 1; // The initial set of polarity is positive
stGUD1.INPUT_SOURCE = (stGUD1.INPUT_SOURCE & 0xf8) | SOURCE_AV;
PowerDown_ADC();
PowerUp_VDC();
Delay_Xms(10);
#if (VIDEO_CHIP == TW_9905 )
I2CWrite_TW990X(0x03,0x82);
I2CWrite_TW990X(0x08,0x12);
I2CWrite_TW990X(0x09,0xf4);
I2CWrite_TW990X(0x0b,0xd0);
I2CWrite_TW990X(0x19,0x58);
I2CWrite_TW990X(0x55,0x10);
#endif
#if (VIDEO_CHIP == VDC_SAA7114 || VIDEO_CHIP == VDC_SAA7115 )
I2CWrite(V_ENABLE); // VIDEO ENABLE
I2CWrite(VIDEO_ALL);
I2CWrite(AV_DETECT); // VIDEO Detect(AV)
I2CRead(ADDR_VIDEO, 0x1f, 0x01);
#endif
ucInputSrc = SOURCE_AV;
RTDCodeW(VIDEO_INI);
LoadVDC_Color();
}
#else
void Init_Input_Source(void)
{
ucMode_Found = MODE_NOSUPPORT;
ucMode_Curr = MODE_NOSIGNAL;
ucMode_Times = 0;
ucAV_Mode = 0;
bVpole_Curr = 1; // The initial set of polarity is positive
bHpole_Curr = 1; // The initial set of polarity is positive
bTVFlag = 0;
bFreeRun = 0;
// Unknown signal source
if (SOURCE_MAX < (stGUD1.INPUT_SOURCE & 0x07))
stGUD1.INPUT_SOURCE = (stGUD1.INPUT_SOURCE & 0xf8) | SOURCE_VGA;
#if (VIDEO_CHIP == VDC_NONE)
if (SOURCE_AV == (stGUD1.INPUT_SOURCE & 0x07) || SOURCE_SV == (stGUD1.INPUT_SOURCE & 0x07))
stGUD1.INPUT_SOURCE = (stGUD1.INPUT_SOURCE & 0xf8) | SOURCE_VGA;
#endif
#if (TV_CHIP == TV_NONE)
if (SOURCE_TV == (stGUD1.INPUT_SOURCE & 0x07))
stGUD1.INPUT_SOURCE = (stGUD1.INPUT_SOURCE & 0xf8) | SOURCE_VGA;
#endif
// Because internal ADC power state will not affect VGA mode detection,
// we always turn off ADC when source changed, and turn it on again only
// when a valid VGA mode is going to display.
PowerDown_ADC();
switch (stGUD1.INPUT_SOURCE & 0x07)
{
case SOURCE_VGA:
bTUNER_PD = 1;
#if (VIDEO_CHIP == TW_9905 )
PowerDown_VDC();
#endif
#if (VIDEO_CHIP == VDC_SAA7114 || VIDEO_CHIP == VDC_SAA7115 )
I2CWrite(V_DISABLE); // VIDEO DISABLE
I2CWrite(V_NOWORK); // VIDEO No Work
PowerDown_VDC();
PowerDown_TMDS();
#endif
// Set user's ADC gain and offset settings
SetADC_GainOffset();
ucInputSrc = SOURCE_VGA;
ucSync_Type = SYNC_SS;
RTDCodeW(VGA_INI_SS);
break;
case SOURCE_DVI:
#if (VIDEO_CHIP == VDC_SAA7114 || VIDEO_CHIP == VDC_SAA7115 || VIDEO_CHIP == VDC_SAA7118)
I2CWrite(V_DISABLE); // VIDEO DISABLE
I2CWrite(V_NOWORK); // VIDEO No Work
PowerDown_VDC();
#endif
PowerUp_TMDS();
ucInputSrc = SOURCE_DVI;
RTDCodeW(DVI_INI);
break;
case SOURCE_AV:
#if (VIDEO_CHIP == TW_9905 )
PowerUp_VDC();
PowerDown_TMDS();
Delay_Xms(10);
Reset_TW9905();
Delay_Xms(10);
I2CWrite_TW990X(0x03,0x82);
I2CWrite_TW990X(0x08,0x12);
I2CWrite_TW990X(0x09,0xf4);
I2CWrite_TW990X(0x0b,0xd0);
I2CWrite_TW990X(0x19,0x58);
I2CWrite_TW990X(0x55,0x10);
#if(KOREA_NTSC) //V221
I2CWrite_TW990X(0x0c,0xdc);
#endif
Delay_Xms(10);
I2CWrite_TW990X(0x02,0x40);//0100 0000 for AV
Delay_Xms(10);
ucInputSrc = SOURCE_AV;
RTDCodeW(VIDEO_INI);
#endif
#if (VIDEO_CHIP == VDC_SAA7114 || VIDEO_CHIP == VDC_SAA7115 )
PowerUp_VDC();
PowerDown_TMDS();
Delay_Xms(10);
I2CWrite(V_ENABLE); // VIDEO ENABLE
I2CWrite(VIDEO_ALL);
I2CWrite(AV_DETECT); // VIDEO Detect(AV)
ucInputSrc = SOURCE_AV;
RTDCodeW(VIDEO_INI);
I2CRead(ADDR_VIDEO, 0x1f, 0x01);
#endif
LoadVDC_Color();
break;
case SOURCE_TV:
bTVFlag = 1;
bChanel_adj = 0;
bVolume_adj = 0;
bBlueScreen = 0;
#if (VIDEO_CHIP == TW_9905 )
PowerUp_VDC();
PowerDown_TMDS();
Delay_Xms(10);
bTUNER_PD = 0;
Reset_TW9905();
Delay_Xms(10);
I2CWrite_TW990X(0x03,0x82);
I2CWrite_TW990X(0x08,0x12);
I2CWrite_TW990X(0x09,0xf4);
I2CWrite_TW990X(0x0b,0xd0);
I2CWrite_TW990X(0x19,0x58);
I2CWrite_TW990X(0x55,0x10);
I2CWrite_TW990X(0x1c,0x07);
#if(KOREA_NTSC) //V221
I2CWrite_TW990X(0x0c,0xdc);
#endif
Delay_Xms(10);
I2CWrite_TW990X(0x02,0x48);//0100 1000 for TV
Delay_Xms(10);
ucInputSrc = SOURCE_TV;
#if (TV_CHIP != TV_NONE)
Set_TV_Channel(1);
#endif
RTDCodeW(VIDEO_INI);
#endif
#if (VIDEO_CHIP == VDC_SAA7114 || VIDEO_CHIP == VDC_SAA7115 )
PowerUp_VDC();
PowerDown_TMDS();
Delay_Xms(10);
I2CWrite(V_ENABLE); // VIDEO ENABLE
I2CWrite(VIDEO_ALL);
I2CWrite(AV_DETECT); // VIDEO Detect(AV)
ucInputSrc = SOURCE_TV;
#if (TV_CHIP != TV_NONE)
Set_TV_Channel(1);
#endif
I2CWrite(TV_SOURCE_SEL);
I2CWrite(TV_SCAN_GAIN);
RTDCodeW(VIDEO_INI);
I2CRead(ADDR_VIDEO, 0x1f, 0x01);
#endif
LoadVDC_Color();
break;
case SOURCE_SV:
#if (VIDEO_CHIP == TW_9905 )
PowerUp_VDC();
PowerDown_TMDS();
Delay_Xms(10);
Reset_TW9905();
Delay_Xms(10);
I2CWrite_TW990X(0x03,0x82);
I2CWrite_TW990X(0x08,0x12);
I2CWrite_TW990X(0x09,0xf4);
I2CWrite_TW990X(0x0b,0xd0);
I2CWrite_TW990X(0x19,0x58);
I2CWrite_TW990X(0x55,0x10);
#if(KOREA_NTSC) //V221
I2CWrite_TW990X(0x0c,0xdc);
#endif
Delay_Xms(10);
I2CWrite_TW990X(0x02,0x54);//0101 0100 for SV
ucInputSrc = SOURCE_SV;
RTDCodeW(VIDEO_INI);
#endif
#if (VIDEO_CHIP == VDC_SAA7114 || VIDEO_CHIP == VDC_SAA7115 )
PowerUp_VDC();
PowerDown_TMDS();
Delay_Xms(10);
I2CWrite(V_ENABLE); // VIDEO ENABLE
I2CWrite(VIDEO_ALL);
I2CWrite(SV_DETECT); // VIDEO Detect(SV)
ucInputSrc = SOURCE_SV;
RTDCodeW(VIDEO_INI);
I2CRead(ADDR_VIDEO, 0x1f, 0x01);
#endif
LoadVDC_Color();
break;
case SOURCE_YUV:
PowerUp_VDC();
PowerDown_TMDS();
Delay_Xms(10);
I2CWrite(V_ENABLE); // VIDEO ENABLE
I2CWrite(VIDEO_ALL);
I2CWrite(VIDEO_YUV);
I2CWrite(YUV_DETECT); // VIDEO Detect(YUV)
ucInputSrc = SOURCE_YUV;
RTDCodeW(VIDEO_INI);
// I2CRead(ADDR_VIDEO, 0x1f, 0x01);
break;
}
#if (AUDIO_TYPE != AUDIO_NONE)
SetVolume();
#endif
}
#endif
void Free_Background(void) // Force to FreeRun & Background
{
RTDCodeW(FreeV); // Switch to free-running mode
if (PANEL_OFF == bPANEL_PWR)
{
RTDSetByte(VDIS_SIGINV_21, 0x00); // DHS, DVS, DEN, DCLK MUST NOT be inverted.
RTDSetBit(VDIS_CTRL_20, 0xfd, 0x01); // DHS, DVS, DEN, DCLK and data are clamped to 0
}
RTDSetBit(VGIP_CTRL_04, 0xfe, 0x00); // Stop sampling input pixels
// Blue background when input source is TV signal.
RTDSetBit(VDIS_SIGINV_21, 0x0f, SOURCE_TV == (stGUD1.INPUT_SOURCE & 0x07) ? 0x10 : 0x00);
}
void Adjust_I_Code(void)
{
// Calculate the IHF in KHz
((unsigned int*)Data)[0] = 24576/usHsync; //Input Horizontal Frequency
//Formula: I_Correction = CE * 2 * Fav(253687) * 100 / IHF / 2^(I_Code - 34)
//Data[2] : I_Code = 14; I_Code[13] = 0;
ucI_Code = 14;
Data[2] = ((unsigned long)ucCE_Value * 50737400 / (unsigned long)((unsigned int*)Data)[0]) >> 20;
Data[3] = (I_Correction == 0) ? (ucPE_Level ? (Correct_Amount - ucP_Corr) : ((ucP_Corr >> 2) + 10)) :
I_Correction;
while(1)
{
if(Data[2] > Data[3])
{
Data[2] = Data[2] >> 1;
ucI_Code -= 1;
if(Data[2] <= Data[3])
break;
}
else
{
if((Data[2] << 1) > Data[3])
break;
else
{
Data[2] = Data[2] << 1;
ucI_Code += 1;
}
}
}
// ucDebug_Value1 = ucP_Corr;
if((unsigned char)((unsigned int)Data[2]*3/2) <= Data[3]) // Judge if I_Code[13] set to 1 will more close to 155
{
ucI_Code |= 0x80;
// ucDebug_Value2 = ((unsigned char)((unsigned int)Data[2]*3) >> 1);
}
else
{
// ucDebug_Value2 = Data[2];
}
}
#if(BURNIN_MODE)
void BurnIn()
{
static unsigned char Color = 0;
static unsigned char ColorCounter = 100;
unsigned char ucTemp;
if (ColorCounter)
ColorCounter -= 1;
else
{
Color += 1;
if(Color == 8)
Color = 9;
if(Color == 16)
Color = 1;
ucTemp = 0x0d | (Color << 4);
#if(MCU_TYPE == MCU_WINBOND)
if (PANEL_ON == bPANEL_PWR)
#else
if (PANEL_ON == MCU_ReadPanelPower())
#endif
{
Free_Background();
Wait_For_Event(EVENT_IEN_STOP); // Wait for Frame End
RTDSetByte(VDIS_SIGINV_21,ucTemp);
}
ColorCounter = 255;
}
}
#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -