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

📄 scaler.c

📁 realtek LCD monitor, TV开发源代码
💻 C
📖 第 1 页 / 共 3 页
字号:
//**********************************************************************************************************
//  The  Software  is  proprietary,  confidential,  and  valuable to Realtek Semiconductor
//  Corporation  ("Realtek").  All  rights, including but not limited  to  copyrights,
//  patents,  trademarks, trade secrets, mask work rights, and other similar rights and interests,
//  are reserved to Realtek. Without  prior  written  consent  from  Realtek,  copying, reproduction,
//  modification,  distribution,  or  otherwise  is strictly prohibited. The Software  shall  be
//  kept  strictly  in  confidence,  and  shall  not be  disclosed to or otherwise accessed by
//  any third party. @ <2003> - <2008>   The Software is provided "AS IS" without any warranty of any kind,
//  express, implied, statutory or otherwise.
//**********************************************************************************************************
//----------------------------------------------------------------------------------------------------
// ID Code      : Scaler.c No.0000
// Update Note  :
//----------------------------------------------------------------------------------------------------

#define __SCALER__

#include "Common\Header\Include.h"

#if(_SCALER_SERIES_TYPE == _RTD2472D_SERIES)

//--------------------------------------------------
// Description  : Page select for scalar(Only for CR[A1]~CR[DF])
// Input Value  : Page Number
// Output Value : None
//--------------------------------------------------
void CScalerPageSelect(BYTE page)
{
//Anderson 080109 2545LR, 247xRD, 248xRD Have Page 10 Start
#if(_SCALER_TYPE == _RTD2472D)
    CScalerSetByte(_PAGE_SELECT_9F, (page & 0x0F));
#elif((_SCALER_TYPE == _RTD2545LR) || (_SCALER_TYPE == _RTD247xRD) || (_SCALER_TYPE == _RTD248xRD))
    CScalerSetByte(_PAGE_SELECT_9F, (page & 0x1F));

#else
    No Setting !!

#endif //End of #if(_SCALER_TYPE == _RTD2472D)
//Anderson 080109 2545LR, 247xRD, 248xRD Have Page 10 Start
}

//--------------------------------------------------
// Description  : Initial settings for scaler
// Input Value  : None
// Output Value : None
//--------------------------------------------------
void CScalerInitial(void)
{
    // Software reset for scaler
    CScalerSetBit(_HOST_CTRL_01, ~(_BIT0 | _BIT1 | _BIT2), _BIT0);

#if(_MCU_TYPE == _REALTEK_EMBEDDED) //yc 20080415
    if(!GET_POWERSTATUS())       // Power Down Process
       CMcuSelectFlashClk(_XTAL_CLK);
    CTimerDelayXms(10);
#else
    CTimerDelayXms(100);
#endif

    CScalerSetBit(_HOST_CTRL_01, ~_BIT0, 0x00);
    CScalerReset();
    CTimerDelayXms(10);
#if(_MCU_TYPE == _REALTEK_EMBEDDED) //yc 20080415
    if(GET_POWERSTATUS())       // Power up Process
       CMcuSelectFlashClk(_FLASH_CLK);
#endif

#if(_RESET_CHECK_SUPPORT == _ON)
    CScalerSetBit(_HOST_CTRL_01, ~_BIT6, _BIT6);
#endif

}

//--------------------------------------------------
// Description  : Reset scaler process
// Input Value  : None
// Output Value : None
//--------------------------------------------------
void CScalerReset(void)
{

    CScalerCodeW(tSCALER_RESET_TABLE);

    CScalerCodeW(tSCALER_POWERUP_INITIAL);

#if(_SCALER_TYPE == _RTD2545LR) //cyyeh V008_20080806 align L Series !!
    CMiscSetPinShare();
#endif

    CAdjustDisableWatchDog(_WD_ALL);

    CMiscClearStatusRegister();

    CScalerInitialDisplayInterface();

    CScalerInitialDisplayOutput();
    CModeSetFreeRun();

    CScalerEnableDisplayTiming();

    if(GET_POWERSTATUS())
    {
        // OSD power up initial
        CScalerCodeW(tOSD_POWERUP_INITIAL);

        CAdjustTMDSErrorCorrectionOn();
        //CAdjustColorPalette(tPALETTE_0);
        CAdjustSRGB();

//Anderson 080104 for I/D Domain Dither Start
#if(_SCALER_TYPE == _RTD2472D)

        if(_DISP_BIT_MODE == _DISP_18_BIT)          //Hudson 20080725 add Temporal Dithering offset table !!
            CAdjustDither(tDITHER_SEQ_TABLE_0, tDITHER_TABLE_10_TO_6, tDITHER_TEMPOFFSET_TABLE);

        else if(_DISP_BIT_MODE == _DISP_24_BIT)     //Hudson 20080725 add Temporal Dithering offset table !!
            CAdjustDither(tDITHER_SEQ_TABLE_0, tDITHER_TABLE_10_TO_8_D_DOMAIN, tDITHER_TEMPOFFSET_TABLE);

#elif((_SCALER_TYPE == _RTD2545LR) || (_SCALER_TYPE == _RTD247xRD) || (_SCALER_TYPE == _RTD248xRD))

        if(_DISP_BIT_MODE == _DISP_18_BIT)          //Hudson 20080725 add Temporal Dithering offset table !!
            CAdjustDither(tDITHER_SEQ_TABLE_0, tDITHER_TABLE_10_TO_6, tDITHER_TEMPOFFSET_TABLE, _OUTPUT_DITHER);

        else if(_DISP_BIT_MODE == _DISP_24_BIT)     //Hudson 20080725 add Temporal Dithering offset table !!
            CAdjustDither(tDITHER_SEQ_TABLE_0, tDITHER_TABLE_10_TO_8_D_DOMAIN, tDITHER_TEMPOFFSET_TABLE,       _OUTPUT_DITHER);//Anderson 080104 for I/D Domain Dither Table

#else
    No Setting !!

#endif  //End of #if(_SCALER_TYPE == _RTD2472D)
//Anderson 080104 for 2545LR, 247xRD, 248xRD Dither End
        CScalerSetBit(_IPH_ACT_WID_H_16, ~(_BIT6 | _BIT5 | _BIT4), ((_ADC_INPUT_SWAP_RG << 6) | (_ADC_INPUT_SWAP_RB << 5)| (_ADC_INPUT_SWAP_GB << 4)));

        CAdjustBrightness();
        CAdjustContrast();

#if(_OD_SUPPORT == _ON)
        CMemoryLoadODLUT(_OD_TABLE_COMMON);
#endif

#if(_HDCP_SUPPORT == _ON) //cyyeh 20080710 for hdcp compatibility
        CAdjustHDCP();
#endif

#if(_GAMMA_FUCTION == _ON)

        CAdjustAccessGammaTable();

#endif// End of #if(_GAMMA_FUCTION == _ON)
    }
    else
    {
        CPowerPanelOff();
        CScalerDisableDisplayTiming();
        CPowerDPLLOff();
        CPowerTMDSOff();
        CPowerM2PLLOff();//cyyeh 20080326
#if((_SCALER_TYPE == _RTD2545LR) || (_SCALER_TYPE == _RTD247xRD) || (_SCALER_TYPE == _RTD248xRD))
        CPowerMPLLOff();//cyyeh 20080611
#endif
        CScalerSetByte(_HOST_CTRL_01, 0x46);
    }
}

//--------------------------------------------------
// Description  : Initial display interface for TTL and LVDS
// Input Value  : None
// Output Value : None
//--------------------------------------------------
void CScalerInitialDisplayInterface(void)
{

#if(_PANEL_STYLE == _PANEL_TTL)

    CScalerCodeW(tTTL_INITIAL);

#endif // End of #if(_PANEL_STYLE == _PANEL_TTL)


#if(_PANEL_STYLE == _PANEL_LVDS)

    CScalerCodeW(tLVDS_INITIAL);

#if((_SCALER_TYPE == _RTD2545LR) ||(_SCALER_TYPE == _RTD247xRD) || (_SCALER_TYPE == _RTD248xRD))
    CScalerCodeW(tTCON7TCON5_SIM_TO_DEN);
#endif

#endif // End of #if(_PANEL_STYLE == _PANEL_LVDS)


#if(_PANEL_STYLE == _PANEL_RSDS)

    CScalerCodeW(tLVDS_INITIAL);
    CScalerCodeW(tRSDS_INITIAL);
//    CScalerSetDataPortByte(_TCON_ADDR_PORT_8B, _TCON_RSDS_OUTPUT_CTRL0_C0, 0x40 | ( (_RSDS_GC_SWAP << 2) | (_RSDS_HL_SWAP << 1) | (_RSDS_PN_SWAP) ));
    CScalerSetDataPortByte(_TCON_ADDR_PORT_8B, _TCON_RSDS_OUTPUT_CTRL0_C0, 0x92);
    CScalerSetDataPortBit(_DISP_ACCESS_PORT_2A, _DISP_TIMING_20, ~_BIT0, _BIT0);

#endif // End of #if(_PANEL_STYLE == _PANEL_RSDS)

}

//--------------------------------------------------
// Description  : Initial display output from Panel.h settings
// Input Value  : None
// Output Value : None
//--------------------------------------------------
void CScalerInitialDisplayOutput(void)
{
 // Display signal control settings
    CScalerSetBit(_VDISP_CTRL_28, ~(_BIT4 | _BIT2), (_DISP_BIT_MODE << 4) | (_DISP_OUTPUT_PORT << 2));
    CScalerSetByte(_VDISP_SIGINV_29, ( (_DHS_MASK << 7) | (_DISP_EO_SWAP << 6) | (_DISP_RB_SWAP << 5) | (_DISP_ML_SWAP << 4) | (_DISP_SKEW << 3) | (_DISP_DVS_INVERT << 2) | (_DISP_DHS_INVERT << 1) | (_DISP_DEN_INVERT)));
}

//--------------------------------------------------
// Description  : Enable display output
// Input Value  : None
// Output Value : None
//--------------------------------------------------
void CScalerEnableDisplayOutput(void)
{
    CScalerGetDataPortByte(_TCON_ADDR_PORT_8B, _TCON_CTRL0_00, 1, pData, _NON_AUTOINC);
    CScalerSetDataPortByte(_TCON_ADDR_PORT_8B, _TCON_CTRL0_00, ((pData[0] & ~(_BIT1 | _BIT0)) | (_PANEL_STYLE & (_BIT1 | _BIT0))));
}
/*
//--------------------------------------------------
// Description  : Disable display output
// Input Value  : None
// Output Value : None
//--------------------------------------------------
void CScalerDisableDisplayOutput(void)
{
    CScalerGetDataPortByte(_TCON_ADDR_PORT_8B, _TCON_CTRL0_00, 1, pData, _NON_AUTOINC);
    CScalerSetDataPortByte(_TCON_ADDR_PORT_8B, _TCON_CTRL0_00, (pData[0] & ~_BIT3));
}
*/
//--------------------------------------------------
// Description  : Enable display
// Input Value  : None
// Output Value : None
//--------------------------------------------------
void CScalerEnableDisplayTiming(void)
{
    CScalerSetBit(_VDISP_CTRL_28, ~(_BIT6 | _BIT1), _BIT1);
    CScalerSetBit(_VDISP_CTRL_28, ~_BIT0, _BIT0);

    CScalerSetBit(_VDISP_CTRL_28, ~_BIT7, _BIT7);
    CScalerSetBit(_VDISP_CTRL_28, ~_BIT7, 0x00);
}

//--------------------------------------------------
// Description  : Disable display
// Input Value  : None
// Output Value : None
//--------------------------------------------------
void CScalerDisableDisplayTiming(void)
{

#if(_PANEL_STYLE == _PANEL_TTL)

    CScalerSetBit(_VDISP_SIGINV_29, ~(_BIT2 | _BIT1 | _BIT0), 0x00);

#endif

    CScalerSetBit(_VDISP_CTRL_28, ~(_BIT6 | _BIT1), _BIT6);
    CScalerSetBit(_VDISP_CTRL_28, ~_BIT0, 0x00);
}

//----------------------------------------------------------------------------------------------------
// Scaler communication basic function
//----------------------------------------------------------------------------------------------------
#if(_MCU_TYPE != _REALTEK_EMBEDDED)
//Anderson 071219 for 2545LR Start
#if(_SCALER_TYPE == _RTD2545LR)
void CScalerSendReadStop(void)
{
    SETSCALERSDIO3(_HIGH);
    SETSCALERSDIO3(_LOW);
    SETSCALERSDIO3(_HIGH);

    SETSCALERSCLK();
}

void CScalerSendWriteStop(void)
{
    CLRSCALERSCLK();
    SETSCALERSCLK();

    SETSCALERSCLK();
    SETSCALERSDIO3(_HIGH);
    SETSCALERSDIO3(_LOW);
    SETSCALERSDIO3(_HIGH);
}
void CScalerSendAddr(BYTE ucAddr, bit bReadWrite, bit bAutoInc)
{
    SETSCALERSCLK();
    SETSCALERSDIO3(_HIGH);
    SETSCALERSDIO3(_LOW);
    SETSCALERSDIO3(_HIGH);

    CScalerSendByte(ucAddr);

    SETSCALERSDIO3(bReadWrite);
    CLRSCALERSCLK();
    SETSCALERSDIO3(bAutoInc);
    SETSCALERSCLK();

    SETSCALERSDIO3(_HIGH);
}

#else
void CScalerSendReadStop(void)
{
    SETSCALERSCLK();
    SETSCALERSCSB();
}

void CScalerSendWriteStop(void)
{
    CLRSCALERSCLK();
    SETSCALERSCLK();

    SETSCALERSCLK();
    SETSCALERSCSB();
}
void CScalerSendAddr(BYTE ucAddr, bit bReadWrite, bit bAutoInc)
{
    CLRSCALERSCSB();

    CScalerSendByte(ucAddr);

    SETSCALERSDIO3(bReadWrite);
    CLRSCALERSCLK();
    SETSCALERSDIO3(bAutoInc);
    SETSCALERSCLK();

    SETSCALERSDIO3(_HIGH);
}
#endif  // End of #if(_SCALER_TYPE == _RTD2545LR)
//Anderson 071219 for 2545LR End

void CScalerSendByte(BYTE ucValue)
{
    SETSCALERSDIO3((bit)(ucValue & 0x01));
    CLRSCALERSCLK();
    SETSCALERSDIO3((bit)(ucValue & 0x02));
    SETSCALERSCLK();
    SETSCALERSDIO3((bit)(ucValue & 0x04));
    CLRSCALERSCLK();
    SETSCALERSDIO3((bit)(ucValue & 0x08));
    SETSCALERSCLK();
    SETSCALERSDIO3((bit)(ucValue & 0x10));
    CLRSCALERSCLK();
    SETSCALERSDIO3((bit)(ucValue & 0x20));
    SETSCALERSCLK();
    SETSCALERSDIO3((bit)(ucValue & 0x40));
    CLRSCALERSCLK();
    SETSCALERSDIO3((bit)(ucValue & 0x80));
    SETSCALERSCLK();
}

void CScalerSETSCLK(void)
{
    SETSCALERSCLK();
    SETSCALERSCLK();
    SETSCALERSCLK();
    SETSCALERSCLK();
    SETSCALERSCLK();
}

void CScalerCLRSCLK(void)
{
    CLRSCALERSCLK();
    CLRSCALERSCLK();
    CLRSCALERSCLK();
    CLRSCALERSCLK();
    CLRSCALERSCLK();
}
//cyyeh 20080225
#if(_SCALER_TYPE == _RTD2545LR)
BYTE CScalerGetByte1(void)
{
    BYTE value = 0;

    CScalerCLRSCLK();
    if(GETSCALERSDIO3())
        value   |= 0x01;
    CScalerSETSCLK();
    if(GETSCALERSDIO3())
        value   |= 0x02;
    CScalerCLRSCLK();
    if(GETSCALERSDIO3())
        value   |= 0x04;
    CScalerSETSCLK();
    if(GETSCALERSDIO3())
        value   |= 0x08;
    CScalerCLRSCLK();
    if(GETSCALERSDIO3())
        value   |= 0x10;
    CScalerSETSCLK();
    if(GETSCALERSDIO3())
        value   |= 0x20;
    CScalerCLRSCLK();
    if(GETSCALERSDIO3())
        value   |= 0x40;
    CScalerSETSCLK();
    if(GETSCALERSDIO3())
        value   |= 0x80;

    CScalerCLRSCLK();

    return value;
}

BYTE CScalerGetByte2(void)
{
    BYTE value = 0;

    CScalerSETSCLK();
    if(GETSCALERSDIO3())
        value   |= 0x01;
    CScalerCLRSCLK();

⌨️ 快捷键说明

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