📄 sync.c
字号:
*/
CScalerSetByte(_P2_TMDS_CTRL_A4, 0xf8);
CTimerDelayXms(50);
CScalerRead(_P2_TMDS_CTRL_A4, 1, pData, _NON_AUTOINC);
#if(_DVI_DE_ONLY_SUPPORT == _ON)
if(bDeSel == _DVI_DE_SUPPORT_ON)
{
pData[0] = ((pData[0] & 0xe0) == 0xe0) ? _TRUE : _FALSE;
}
else
{
pData[0] = ((pData[0] & 0xf8) == 0xf8) ? _TRUE : _FALSE;
}
#else
pData[0] = ((pData[0] & 0xf8) == 0xf8) ? _TRUE : _FALSE;
#endif
if(pData[0])
{
#if(_HDMI_SUPPORT == _ON)
if((GET_INPUTPORT_TYPE(g_ucSearchIndex) == _D0_HDMI_PORT) || (GET_INPUTPORT_TYPE(g_ucSearchIndex) == _D1_HDMI_PORT))
{
for(cnt1=0;cnt1<4;cnt1++)
{
if(g_ucPhyFreq == _PHY_FREQUENCY_25_50)
CTimerDelayXms(100);
else
CTimerDelayXms(10);
if(!CHdmiVideoSetting())
{
return _FALSE;
}
}
/*
CTimerDelayXms(90);
if(!CHdmiVideoSetting())
{
CTimerDelayXms(90);
if(!CHdmiVideoSetting())
return _FALSE;
}
*/
}
else
{
for(cnt1=0;cnt1<2;cnt1++)
{
if(g_ucPhyFreq == _PHY_FREQUENCY_25_50)
CTimerDelayXms(90);
else
CTimerDelayXms(10);
CHdmiVideoSetting();
}
/*
CTimerDelayXms(90);
CHdmiVideoSetting();
*/
#if(_HDMI_FROM_DVI_CONNECT == _OFF)
if(CHdmiFormatDetect())
return _FALSE;
#endif
}
#else
if((GET_INPUTPORT_TYPE(g_ucSearchIndex) != _D0_HDMI_PORT) && (GET_INPUTPORT_TYPE(g_ucSearchIndex) != _D1_HDMI_PORT))
{
if(CHdmiFormatDetect())
return _FALSE;
}
#endif
CPowerTMDSOn();
return _TRUE;
}
}
}
return _FALSE;
}
}
#endif // End of #if((_TMDS_SUPPORT == _ON) || (_HDMI_SUPPORT == _ON))
//--------------------------------------------------
// Description : Scan VGA input port to obtain if the signal is available
// Input Value : None
// Output Value : Return _TRUE if the signal is available
//--------------------------------------------------
bit CSyncScanInputPortVGA(void)
{
BYTE cnt, synctypetemp = _NO_SYNC_STATE;
#if(_HSYNC_TYPE_SELECT != _HSYNC_ONLY)
bit flag = 0;
#endif
CScalerPageSelect(_PAGE0);
if((GET_INPUT_PORT(g_ucSearchIndex) == _A0_INPUT_PORT) || (GET_INPUT_PORT(g_ucSearchIndex) == _D0_INPUT_PORT))
{
CScalerSetBit(_SYNC_SELECT_47, ~(_BIT3 | _BIT2), (_HSYNC_SOURCE_SWAP == _OFF ? 0x00 : _BIT3 | _BIT2));
CScalerSetDataPortBit(_SYNC_PROC_ACCESS_PORT_5C, _SYNC_CLAMP_CTRL2_06, ~ _BIT4, _BIT4);
CScalerSetBit(_P0_ADC_RGB_CTRL_CE, ~_BIT3, 0x00);
CScalerSetByte(_P0_ADC_CLAMP_CTRL1_D5, 0x00); //cyyeh 20080513
}
else if((GET_INPUT_PORT(g_ucSearchIndex) == _A1_INPUT_PORT) || (GET_INPUT_PORT(g_ucSearchIndex) == _D1_INPUT_PORT))
{
CScalerSetBit(_SYNC_SELECT_47, ~(_BIT3 | _BIT2), (_HSYNC_SOURCE_SWAP == _OFF ? _BIT3 | _BIT2 : 0x00));
CScalerSetDataPortBit(_SYNC_PROC_ACCESS_PORT_5C, _SYNC_CLAMP_CTRL2_06, ~_BIT5 , _BIT5);
CScalerSetBit(_P0_ADC_RGB_CTRL_CE, ~_BIT3, _BIT3);
CScalerSetByte(_P0_ADC_CLAMP_CTRL1_D5, 0x54); //cyyeh 20080513
}
//Anderson 080109 for 2545LR W/O SOG1 Start
#if(_SCALER_TYPE == _RTD2545LR)
CScalerSetByte(_P0_ADC_DCR_CTRL_D3, (_BIT0 << _SOG0_INPUT_SELECTT)); // SOG Input MUX Select
CScalerSetByte(_P0_ADC_SOG_CMP_D2 , 0x30);
#elif((_SCALER_TYPE == _RTD2472D) ||(_SCALER_TYPE == _RTD247xRD) || (_SCALER_TYPE == _RTD248xRD))
CScalerSetByte(_P0_ADC_DCR_CTRL_D3, ((_BIT0 << _SOG0_INPUT_SELECTT) | (_BIT0 << _SOG1_INPUT_SELECTT))); // SOG Input MUX Select
CScalerSetByte(_P0_ADC_SOG_CMP_D2 , 0x34);
#else
No Setting !!
#endif //End of #if(_SCALER_TYPE == _RTD2545LR)
//Anderson 080109 for 2545LR W/O SOG1 End
// V010 Patch Note (41) : Correct the TMDS setting for register definiendum.
//1217 sephinroth
//CScalerPageSelect(_PAGE2);
//CScalerSetBit(_P2_Z0CC2_AC, ~_BIT6, 0x00);
CScalerPageSelect(_PAGEB);
CScalerSetByte(_PB_DP_Z0_CALIBRATION_B6,0xe4);
CScalerSetBit(_SYNC_CTRL_49, ~(_BIT1 | _BIT0), _BIT1);
CScalerPageSelect(_PAGE0);
#if(_HSYNC_TYPE_SELECT == _HSYNC_ONLY)
for(cnt=0;cnt<2;cnt++)
{
synctypetemp = CSyncGetSyncTypeAutoRun();
if(synctypetemp != _NO_SYNC_STATE)
{
if(synctypetemp == _SOY_STATE)
SET_INPUTSOURCE_TYPE(_SOURCE_YPBPR);
else
SET_INPUTSOURCE_TYPE(_SOURCE_VGA);
return _TRUE;
}
}
#else
CTimerDelayXms(120);//1203 sephinroth
for(cnt=0;cnt<4;cnt++)
{
synctypetemp = CSyncGetSyncTypeAutoRun();
if(synctypetemp != _NO_SYNC_STATE)
{
if((flag == 1) || (CScalerGetBit(_SYNC_SELECT_47, _BIT4) == 0))
{
if(synctypetemp == _SOY_STATE)
SET_INPUTSOURCE_TYPE(_SOURCE_YPBPR);
else
SET_INPUTSOURCE_TYPE(_SOURCE_VGA);
return _TRUE;
}
else if(CScalerGetBit(_SYNC_SELECT_47, _BIT4))
{
flag = 1;
}
}
CScalerSetBit(_SYNC_SELECT_47, ~_BIT4, CScalerGetBit(_SYNC_SELECT_47, _BIT4) ^ _BIT4); //cyyeh 20080513
}
#endif // End of #if(_HSYNC_TYPE_SELECT == _HSYNC_ONLY)
CScalerSetBit(_SYNC_SELECT_47, ~_BIT6, 0x00);
CScalerSetBit(_STABLE_MEASURE_4F, ~_BIT0, 0x00);
return _FALSE;
}
//-------------------------------------------------------------------
// Description : Get VGA sync type by Hsync Type Detection Auto Run
// Input Value : None
// Output Value : Return sync type
//-------------------------------------------------------------------
BYTE CSyncGetSyncTypeAutoRun(void)
{
BYTE synctemp;
CScalerPageSelect(_PAGE0);
//Anderson 080108 2545LR SOG1 Removed Start
#if(_SCALER_TYPE == _RTD2545LR)
CScalerSetBit(_P0_ADC_POWER_C6, ~(_BIT5 | _BIT3), (_BIT5 | _BIT3));
#elif((_SCALER_TYPE == _RTD2472D) ||(_SCALER_TYPE == _RTD247xRD) || (_SCALER_TYPE == _RTD248xRD))
CScalerSetBit(_P0_ADC_POWER_C6, ~(_BIT5 | _BIT4 | _BIT3), (_BIT5 | _BIT4 | _BIT3));
#else
No Setting !!
#endif //End of #if(_SCALER_TYPE == _RTD2545LR)
//Anderson 080108 2545LR SOG1 Removed End
CScalerSetBit(_IPH_ACT_WID_H_16, ~_BIT7, 0x00);
CScalerSetBit(_SCALE_CTRL_32, ~_BIT7, 0x00);
CScalerSetBit(_SYNC_CTRL_49, ~(_BIT2 | _BIT1 | _BIT0), _BIT2 | _BIT1);
CScalerSetBit(_STABLE_MEASURE_4F, ~_BIT0, 0x00);
CScalerSetBit(_STABLE_MEASURE_4F, ~_BIT0, _BIT0);
CTimerDelayXms(5);
if((bit)CScalerGetBit(_HSYNC_TYPE_DETECTION_FLAG_4E, _BIT7))
return _NO_SYNC_STATE;
if(!CTimerPollingEventProc(20, CMiscStableFlagPollingEvent))
return _NO_SYNC_STATE;
CScalerSetBit(_STABLE_MEASURE_4F, ~_BIT1, _BIT1);
// Get stable period
CScalerRead(_STABLE_PERIOD_H_50, 2, pData, _AUTOINC);
((WORD *)pData)[1] = ((pData[0] & 0x07) << 8) | pData[1];
CScalerSetBit(_VSYNC_COUNTER_LEVEL_MSB_4C, ~(_BIT2 | _BIT1 | _BIT0), (BYTE)(((WORD *)pData)[1] >> 9) & 0x07);
CScalerSetByte(_VSYNC_COUNTER_LEVEL_LSB_4D, (BYTE)(((WORD *)pData)[1] >> 1));
CScalerSetBit(_STABLE_MEASURE_4F, ~_BIT0, 0x00);
CScalerSetBit(_SYNC_SELECT_47, ~_BIT6, 0x00);
CScalerSetBit(_SYNC_SELECT_47, ~_BIT6, _BIT6); //Enable Hsync Type Detection Auto Run
if(CTimerPollingEventProc(90, CMiscHsyncTypeAutoRunFlagPollingEvent))
{
synctemp = (CScalerGetBit(_VSYNC_COUNTER_LEVEL_MSB_4C, 0xff) & 0x70) >> 4;
switch(synctemp)
{
case _NO_SIGNAL: // No Signal
case _NOT_SUPPORT: // Not Support
case _HSYNC_WITHOUT_VS: // Hsync only
synctemp = _NO_SYNC_STATE;
break;
case _YPBPR_SYNC: // YPbPr-Type CS
synctemp = _SOY_STATE;
break;
case _SERRATION_CS: // Serration-Type CS
#if(_YPBPR_SUPPORT == _ON)
#if(_HSYNC_TYPE_SELECT == _HSYNC_WITH_SOG_SOY)
if((bit)CScalerGetBit(_SYNC_SELECT_47, _BIT4))
{
if(CModeMeasureReady())
{
if(CModeMeasureData())
{
if((stModeInfo.IHFreq < _H_FREQ_MIN) || (stModeInfo.IHFreq > _H_FREQ_MAX) || (stModeInfo.IVFreq < _V_FREQ_MIN) || (stModeInfo.IVFreq > _V_FREQ_MAX))
{
synctemp = _NO_SYNC_STATE;
break;
}
else
{
if(CYPbPrSearchMode() != _MODE_NOSUPPORT)
synctemp = _SOY_STATE;
else
synctemp = _CS_STATE;
break;
}
}
}
else
{
synctemp = _NO_SYNC_STATE;
break;
}
}
else
{
synctemp = _CS_STATE;
break;
}
#else
if((GET_INPUTPORT_TYPE(g_ucSearchIndex) == _A0_YPBPR_PORT) || (GET_INPUTPORT_TYPE(g_ucSearchIndex) == _A1_YPBPR_PORT))
synctemp = _SOY_STATE;
else
synctemp = _CS_STATE;
break;
#endif //End of #if(_HSYNC_TYPE_SELECT == _HSYNC_WITH_SOG_SOY)
#endif //End of #if(_YPBPR_SUPPORT == _ON)
case _XOR_OR_TYPE_CS_WITH_EQR: // CS with Equalizer
case _XOR_OR_TYPE_CS_WITHOUT_EQR: // OR-Type & XOR-Type CS
synctemp = _CS_STATE;
break;
case _SEPARATE_HSYNC: // Separate Sync
synctemp = _SS_STATE;
break;
default:
synctemp = _NO_SYNC_STATE;
}
}
else
{
synctemp = _NO_SYNC_STATE;
}
#if(_HSYNC_TYPE_SELECT != _HSYNC_ONLY)
if((synctemp != _NO_SYNC_STATE) && ((bit)CScalerGetBit(_SYNC_SELECT_47, _BIT4)))
{
CScalerRead(_STABLE_HIGH_PERIOD_H_4A, 2, pData, _AUTOINC);
stModeInfo.IHSyncPulseCount = ((pData[0] & 0x07) << 8) | pData[1];
CScalerRead(_STABLE_PERIOD_H_50, 2, pData, _AUTOINC);
stModeInfo.IHCount = ((pData[0] & 0x07) << 8) | pData[1];
if(((stModeInfo.IHSyncPulseCount * 7 / stModeInfo.IHCount) != 0) || (stModeInfo.IHSyncPulseCount < 4))
synctemp = _NO_SYNC_STATE;
}
#endif // End of #if(_HSYNC_TYPE_SELECT != _HSYNC_ONLY)
return synctemp;
}
//--------------------------------------------------
// Description : Modify VGA sync polarity
// Input Value : None
// Output Value : None
//--------------------------------------------------
void CSyncModifyPolarity(void)
{
BYTE polarity;
polarity = CScalerGetBit(_VGIP_SIGINV_11, 0xff);
polarity &= ~(_BIT3 | _BIT2);
if(!(bit)(stModeInfo.Polarity & _BIT0))
polarity |= _BIT2;
if(!(bit)(stModeInfo.Polarity & _BIT1))
polarity |= _BIT3;
CScalerSetByte(_VGIP_SIGINV_11, polarity);
}
#endif // End of #if(_SCALER_SERIES_TYPE == _RTD2472D_SERIES)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -