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

📄 drvscaler.c

📁 mstar 776 开发的车载dvd
💻 C
📖 第 1 页 / 共 5 页
字号:
    U16 u16HorizontalPeriod;
    U8 u8StableCounter;

    switch(enGetSyncType)
    {
        case GET_SYNC_DIRECTLY:
            u16HorizontalPeriod = MDrv_Scaler_GetHorizontalPeriod();
            break;
        case GET_SYNC_STABLE:
        case GET_SYNC_VIRTUAL:
            for(u8StableCounter = 0 ; u8StableCounter < 5 ; u8StableCounter++)
            {
                u16HorizontalPeriod = MDrv_Scaler_GetHorizontalPeriod();
                if( (MDrv_Scaler_CalculateHFreqX10(u16HorizontalPeriod) >= 135) &&
                    (MDrv_Scaler_CalculateHFreqX10(u16HorizontalPeriod) <= 178) )
                {
                    break;
                }
                else
                {
                    if(enGetSyncType==GET_SYNC_VIRTUAL)
                        u16HorizontalPeriod = 0;
                }
            }
            if(enGetSyncType==GET_SYNC_VIRTUAL && u16HorizontalPeriod==0)
            {
                if(MDrv_Scaler_GetVerticalTotal() > 566)
                    u16HorizontalPeriod = MST_XTAL_CLOCK_HZ/15625;
                else
                    u16HorizontalPeriod = MST_XTAL_CLOCK_HZ/15734;
            }
            break;
    }

    return u16HorizontalPeriod;
}

/******************************************************************************/
///This function will return VD's Vertical total
///@param enGetSyncType \b IN
///enGetSyncType is SYNC type
///- GET_SYNC_DIRECTLY
///- GET_SYNC_STABLE
///- GET_SYNC_VIRTUAL
///@param u16HFreqX10 \b IN
///- Horizontal frequncy
///@return
///- U16: VD Vertical Total
/******************************************************************************/
U16 MDrv_Scaler_VD_GetVTotal (EN_GET_SYNC_TYPE enGetSyncType, U16 u16HFreqX10)
{
    U16 u16VerticalTotal;
    U8 u8StableCounter;

    switch(enGetSyncType)
    {
        case GET_SYNC_DIRECTLY:
            u16VerticalTotal = MDrv_Scaler_GetVerticalTotal();
            break;
        case GET_SYNC_STABLE:
        case GET_SYNC_VIRTUAL:
            for(u8StableCounter = 0 ; u8StableCounter < 3 ; u8StableCounter++)
            {
                u16VerticalTotal = MDrv_Scaler_GetVerticalTotal();
                if(u16VerticalTotal >= 465 && u16VerticalTotal <= 730)//+-7Hz if(u16VerticalTotal >= 510 && u16VerticalTotal <= 640)
                {
                    break;
                }
                else
                {
                    if(enGetSyncType==GET_SYNC_VIRTUAL)
                        u16VerticalTotal = 0;
                }
            }
            if(enGetSyncType==GET_SYNC_VIRTUAL && u16VerticalTotal==0)
            {
                if(u16HFreqX10 == 156)
                    u16VerticalTotal = 625;
                else
                    u16VerticalTotal = 525;
            }
            break;
    }

    return u16VerticalTotal;
}

/******************************************************************************/
///This function will return Horizontal period value
///@return
///- U16 Horizontal Period
/******************************************************************************/
U16 MDrv_Scaler_GetHorizontalPeriod(void)
{
    U8 u8Bank;
    U16 u16HorizontalPeriod;

    u8Bank = MDrv_ReadByte(BK_SELECT_00);
#if 0//IPMUX CH0    // kevin 071024_0
    MDrv_Write2Byte(BK_IPMUX_01_L, 0x0021);
    MDrv_Write2Byte(BK_IPMUX_10_L, 0x0040);
    MDrv_Write2Byte(BK_IP1_16_02_L, 0x0100);
    u16HorizontalPeriod = ( MDrv_Read2Byte(BK_IP1_16_20_L) & MST_H_PERIOD_MASK );
#else//IPMUX CH1
    MDrv_WriteByte(BK_SELECT_00, REG_BANK_IP1F2);
    u16HorizontalPeriod = ( MDrv_Read2Byte( BK_SC_IP1F2_20_L) & MST_H_PERIOD_MASK );
#endif
    MDrv_WriteByte(BK_SELECT_00, u8Bank);

    return u16HorizontalPeriod;
}

/******************************************************************************/
///This function will return Vertical total value
///@return
///- U16 Vertical total
/******************************************************************************/
U16 MDrv_Scaler_GetVerticalTotal(void)
{
    U8 u8Bank;
    U16 u16VerticalTotal;

    u8Bank = MDrv_ReadByte(BK_SELECT_00);

#if 0//IPMUX CH0    // kevin 071024_0
    u16VerticalTotal = ( MDrv_Read2Byte(BK_IP1_16_1F_L) & MST_V_TOTAL_MASK );
#else//IPMUX CH1

    MDrv_WriteByte(BK_SELECT_00, REG_BANK_IP1F2);

    u16VerticalTotal = ( MDrv_Read2Byte( BK_SC_IP1F2_1F_L) & MST_V_TOTAL_MASK );
#endif
    MDrv_WriteByte(BK_SELECT_00, u8Bank);

    return u16VerticalTotal;
}

/*
BOOLEAN MDrv_Scaler_DVIClockMissingDetected(void)
{
    BOOLEAN bDVIClockMissingDetected;

    bDVIClockMissingDetected = ( (MDrv_ReadByte(BK_ADC_DTOP_57_H) & _BIT3) ? TRUE : FALSE );

    return bDVIClockMissingDetected;
}
*/

/******************************************************************************/
/// Get the horizontal period of auto postion
/// @return the horizontal period of auto postion
/******************************************************************************/
U16 MDrv_Scaler_GetHorizontalDEStart(void)
{
    U8 u8Bank;
    U16 u16HorizontalDE;

    u8Bank = MDrv_ReadByte ( BK_SELECT_00 );

#if 0
//IPMUX CH0
    u16HorizontalDE = MDrv_Read2Byte ( BK_IP1_16_13_L);
#else
//IPMUX CH1
    MDrv_WriteByte ( BK_SELECT_00, REG_BANK_IP1F2 );

    u16HorizontalDE = MDrv_Read2Byte ( BK_SC_IP1F2_13_L );
#endif

    MDrv_WriteByte ( BK_SELECT_00, u8Bank );

    return u16HorizontalDE;
}

/******************************************************************************/
/// Get the horizontal period of auto postion
/// @return the horizontal period of auto postion
/******************************************************************************/
U16 MDrv_Scaler_GetHorizontalDE(void)
{
    U8 u8Bank;
    U16 u16HorizontalDE;

    u8Bank = MDrv_ReadByte ( BK_SELECT_00 );

#if 0
//IPMUX CH0
    u16HorizontalDE = MDrv_Read2Byte ( BK_IP1_16_15_L) -
                      MDrv_Read2Byte ( BK_IP1_16_13_L ) + 1;
#else
//IPMUX CH1
    MDrv_WriteByte ( BK_SELECT_00, REG_BANK_IP1F2 );

    u16HorizontalDE = MDrv_Read2Byte ( BK_SC_IP1F2_15_L ) -
                      MDrv_Read2Byte ( BK_SC_IP1F2_13_L ) + 1;
#endif

    MDrv_WriteByte ( BK_SELECT_00, u8Bank );

    return u16HorizontalDE;
}

/******************************************************************************/
/// Get the vertical period of auto postion
/// @return the vertical period of auto postion
/******************************************************************************/
U16 MDrv_Scaler_GetVerticalDEStart(void)
{
    U8 u8Bank;
    U16 u16VerticalDE;

    u8Bank = MDrv_ReadByte ( BK_SELECT_00 );

#if 0
//IPMUX CH0
    u16VerticalDE = MDrv_Read2Byte ( BK_SC_IP1F2_12_L );
#else
//IPMUX CH1
    MDrv_WriteByte ( BK_SELECT_00, REG_BANK_IP1F2 );

    u16VerticalDE = MDrv_Read2Byte ( BK_SC_IP1F2_12_L );
#endif

    MDrv_WriteByte ( BK_SELECT_00, u8Bank );

    return u16VerticalDE;
}

/******************************************************************************/
/// Get the vertical period of auto postion
/// @return the vertical period of auto postion
/******************************************************************************/
U16 MDrv_Scaler_GetVerticalDE(void)
{
    U8 u8Bank;
    U16 u16VerticalDE;

    u8Bank = MDrv_ReadByte ( BK_SELECT_00 );

#if 0
//IPMUX CH0
    u16HorizontalDE = MDrv_Read2Byte ( BK_IP1_16_14_L) -
                      MDrv_Read2Byte ( BK_IP1_16_12_L ) + 1;
#else
//IPMUX CH1
    MDrv_WriteByte ( BK_SELECT_00, REG_BANK_IP1F2 );

    u16VerticalDE = MDrv_Read2Byte ( BK_SC_IP1F2_14_L ) -
                    MDrv_Read2Byte ( BK_SC_IP1F2_12_L ) + 1;
#endif

    MDrv_WriteByte ( BK_SELECT_00, u8Bank );

    return u16VerticalDE;
}


//-----------------------------------------------------------------------------
// screen
//-----------------------------------------------------------------------------

/******************************************************************************/
///enable/diable output black pattern
///@param bEnable \b IN
///-  False:Disable
///-  TRUE :enable
/******************************************************************************/
void MDrv_Scaler_GenerateBlackVideo(BOOLEAN bEnable)
{
    U8 u8Bank;

    u8Bank = MDrv_ReadByte(BK_SELECT_00);
    MDrv_WriteByte(BK_SELECT_00, REG_BANK_VOP);
    MDrv_WriteRegBit(BK_SC_VOP_19_L, bEnable, _BIT1);
    MDrv_WriteByte(BK_SELECT_00, u8Bank);
}

BOOLEAN MDrv_Scaler_IsBlackVideoEnable(void)
{
    U8 u8Bank;
    BOOLEAN bBlackVideo;

    u8Bank = MDrv_ReadByte(BK_SELECT_00);
    MDrv_WriteByte(BK_SELECT_00, REG_BANK_VOP);
    if( MDrv_ReadRegBit(BK_SC_VOP_19_L, _BIT1) )
        bBlackVideo = 1;
    else
        bBlackVideo = 0;
    MDrv_WriteByte(BK_SELECT_00, u8Bank);

    return bBlackVideo;
}

void MDrv_Scaler_SetBlueScreen(BOOLEAN bEnable, U8 u8Color)
{
    U8 u8Bank;
    BOOLEAN bUseMainFB = (g_SrcInfo.u8MemoryMode != MS_MEM_FMT_NO_USE);

    u8Bank = MDrv_ReadByte(BK_SELECT_00);

// seven 070822_01
    //TCON: Patch V position different in different timing
//#if (PANEL_ATCON||PANEL_DTCON)
//    if( bEnable )
//        MDrv_WriteByte(BK_TCON_2B_L, SET_STV_LINE_TH );
//#endif
// end

    if((bEnable) && (bUseMainFB == 0))
    {
        #if(ENABLE_FPLL_CTL)
        MDrv_Scaler_CtrlFPLL(FPLL_STOP);
        #endif
    }

    // Free Run setting
    if (bEnable)
    {
        MDrv_Scaler_SetOPClkGating(FALSE);
        MDrv_Scaler_SetFreeRunTiming();
        DRVSC_DBG(puts("\r\n >>> Blue Screen Enable"));
    }
    else
    {
        DRVSC_DBG(puts("\r\n >>> Blue Screen Disable"));
    }

    if (bEnable)
    {
        MDrv_WriteByte(BK_SELECT_00, REG_BANK_DNR);
        MDrv_WriteRegBit(BK_SC_DNR_11_H, ENABLE, _BIT3);
        MDrv_WriteByte(BK_SELECT_00, REG_BANK_VOP);
        MDrv_WriteByte(BK_SC_VOP_24_L, u8Color);  // set main window no signal color
        MDrv_WriteByteMask(BK_SC_VOP_10_H, _BIT7, _BIT7);// kevin 20070827
        MDrv_Write2Byte(BK_SC_VOP_02_L, devPanel_VTOTAL() - devPanel_VSTART());// kevin 20070827
        MDrv_Write2Byte(BK_SC_VOP_0D_L, PANEL_VTOTAL-1);// kevin 20070827

        MDrv_WriteByte(BK_SELECT_00, REG_BANK_IP1F2);
        MDrv_WriteRegBit(BK_SC_IP1F2_02_L, ENABLE, _BIT7); // disable input source
    }
    else
    {
        MDrv_WriteByte(BK_SELECT_00, REG_BANK_DNR);
        MDrv_WriteRegBit(BK_SC_DNR_11_H, DISABLE, _BIT3);

        MDrv_WriteByte(BK_SELECT_00, REG_BANK_VOP);
        MDrv_WriteByteMask(BK_SC_VOP_10_H, ~_BIT7, _BIT7);// kevin
        MDrv_Write2Byte(BK_SC_VOP_0D_L, 0x07FF);// kevin

        // disable main window blue screen
        MDrv_WriteByte(BK_SELECT_00, REG_BANK_IP1F2);
        MDrv_WriteRegBit(BK_SC_IP1F2_02_L, DISABLE, _BIT7); // enable input source

        MDrv_Scaler_SetOPClkGating(TRUE);
    }

    MDrv_WriteByte(BK_SELECT_00, u8Bank);
}

//-----------------------------------------------------------------------------
// OP1 control
//-----------------------------------------------------------------------------
void MDrv_Scaler_SetOPClkGating(BOOLEAN bEnable)
{
    U8 u8Bank;

    u8Bank = MDrv_ReadByte(BK_SELECT_00);
    MDrv_WriteByte(BK_SELECT_00, REG_BANK_OP1);

    if (bEnable)
    {
        MDrv_Write2Byte(BK_SC_OP1_35_L, 0xA71F);
    }
    else
    {
        MDrv_Write2Byte(BK_SC_OP1_35_L, 0x0000);
    }

    MDrv_WriteByte(BK_SELECT_00, u8Bank);
}

BOOLEAN MDrv_Scaler_GetOPClkGating(void)
{
    U8 u8Bank;
    U16 u16Value;

    u8Bank = MDrv_ReadByte(BK_SELECT_00);
    MDrv_WriteByte(BK_SELECT_00, REG_BANK_OP1);
    u16Value = MDrv_Read2Byte(BK_SC_OP1_35_L);
    MDrv_WriteByte(BK_SELECT_00, u8Bank);

    return ((u16Va

⌨️ 快捷键说明

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