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

📄 ypbpr.c

📁 很难得的最好的rtd3523系列原厂源码LCD驱动开发
💻 C
字号:
//----------------------------------------------------------------------------------------------------
// ID Code      : YPbPr.c No.0001
// Update Note  : 
//
//----------------------------------------------------------------------------------------------------

#define __YPBPR__

#include "..\Header\Include.h"


#if(_YPBPR_SUPPORT == _ON)

//--------------------------------------------------
// Description  : Search mode for YPbPr
// Input Value  : None
// Output Value : YPbPr Mode number
//--------------------------------------------------
BYTE CYPbPrSearchMode(void)
{
    BYTE cnt, modetemp = _MODE_NOSUPPORT;

    if(((bit)CScalerGetBit(_SYNC_SELECT_47, _BIT6)))
        return modetemp;

    for(cnt=0;cnt<_MAX_YPBPR_MODE;cnt++)
    {
        if(CYPbPrCompareMode(cnt) == _TRUE)
        {
            modetemp = cnt;
            break;
        }
    }

    return modetemp;
}

//--------------------------------------------------
// Description  : Compare mode in YPbPr mode table
// Input Value  : Mode number
// Output Value : Return _TRUE if get an available mode
//--------------------------------------------------
bit CYPbPrCompareMode(BYTE ucModeCnt)
{
    if(abs(stModeInfo.IVFreq - tYPBPR_MODE_TABLE[ucModeCnt].IVFreq) > tYPBPR_MODE_TABLE[ucModeCnt].IVFreqTolerance)
    {
        return _FALSE;
    }

    if(abs(stModeInfo.IHFreq - tYPBPR_MODE_TABLE[ucModeCnt].IHFreq) > tYPBPR_MODE_TABLE[ucModeCnt].IHFreqTolerance)
    {
        return _FALSE;
    }

    return _TRUE;
}

//--------------------------------------------------
// Description  : Get mode information for YPbPr
// Input Value  : None
// Output Value : None
//--------------------------------------------------
void CYPbPrGetModeInfo(void)
{
    stModeInfo.IHTotal = tYPBPR_MODE_TABLE[stModeInfo.ModeCurr].IHTotal;
    stModeInfo.IHStartPos = tYPBPR_MODE_TABLE[stModeInfo.ModeCurr].IHStartPos;
    stModeInfo.IHWidth = tYPBPR_MODE_TABLE[stModeInfo.ModeCurr].IHWidth;

    stModeInfo.IVStartPos = tYPBPR_MODE_TABLE[stModeInfo.ModeCurr].IVStartPos;
    stModeInfo.IVHeight = tYPBPR_MODE_TABLE[stModeInfo.ModeCurr].IVHeight;

    stModeUserData.Clock = stModeInfo.IHTotal;
    stModeUserData.Phase = 0;
    stModeUserData.HPosition = stModeInfo.IHStartPos;
    stModeUserData.VPosition = stModeInfo.IVStartPos;

    // Test
    stModeUserCenterData.CenterClock    = stModeInfo.IHTotal;
    stModeUserCenterData.CenterHPos     = stModeInfo.IHStartPos;
    stModeUserCenterData.CenterVPos     = stModeInfo.IVStartPos;
}

//--------------------------------------------------
// Description  : Start up settings for YPbPr
// Input Value  : None
// Output Value : None
//--------------------------------------------------
void CYPbPrStartUp(void)
{
    CScalerCodeW(tYPBPR_TABLE_SET_SCALER);
}

//--------------------------------------------------
// Description  : Setup YPbPr mode
// Input Value  : None
// Output Value : None
//--------------------------------------------------
void CYPbPrSetupMode(void)
{
    WORD ustemp;
    BYTE temp;
    BYTE option = 0;

    // Get information from mode table, such as IHTotal, IHStartPos, IHWidth, IVStartPos, IVHeight.
    CYPbPrGetModeInfo();

    // Start up settings of VGA mode.
    CModeStartUpVGA();

    // Start up settings of YPbPR mode.
    CYPbPrStartUp();

    // Get scaling option, Capture window setup, Scaling setup, Display setup
    CModeSetupDisplay();

    CAdjustBrightness();
    CAdjustContrast();
    CAdjustBacklight();
    CAdjustAdcGainOffset();
    CAdjustAdcClock(stModeUserData.Clock);
    CAdjustPhase(stModeUserData.Phase);
    CAdjustHPosition();
    CAdjustVPosition();

    pData[0] = CFrameSyncDo();

    if(pData[0] == 2)
    {
        CModeResetMode();
        return;
    }

    switch(stModeInfo.ModeCurr)
    {
        case 0:
        case 1:
        case 5:
        case 6:
            CScalerSetBit(_SCALE_CTRL_19, ~_BIT7, _BIT7);
            CScalerSetBit(_VGIP_ODD_CTRL_08, ~_BIT0, _BIT0);
  
            CScalerSetByte(_IPV_ACT_STA_L_0E, CScalerGetBit(_IPV_ACT_STA_L_0E, 0xff) + 1);
            CScalerRead(_IV_DV_DELAY_CLK_ODD_41, LENGTH(1), &temp, _NON_AUTOINC);
            ustemp = (WORD)temp * 16 + 16;
            ustemp += stModeInfo.IHTotal;
            CScalerSetByte(_IV_DV_DELAY_CLK_ODD_41, (ustemp - 16) / 16);
            ustemp -= stModeInfo.IHTotal / 2;
            CScalerSetByte(_IV_DV_DELAY_CLK_EVEN_42, (ustemp - 16) / 16);
            CScalerSetBit(_FS_DELAY_FINE_TUNING_43, ~(_BIT1), _BIT1);
            break;
    }

    CModeSetupEtcs(_FUNCTION_ENABLE);
}

#endif  // End of #if(_YPBPR_SUPPORT == _ON)

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -