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

📄 sync.c

📁 realtek LCD monitor, TV开发源代码
💻 C
📖 第 1 页 / 共 3 页
字号:
    */
                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 + -