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

📄 panel.c

📁 mstar 776 开发的车载dvd
💻 C
📖 第 1 页 / 共 3 页
字号:
    pPanelData += stGenSetting.g_SysSetting.u8PanelModel;
    return pPanelData->m_wPanelHTotal;
#endif
}

U16 devPanel_VTOTAL(void)
{
#if (USE_PANEL_DEFINE == 1)
    return PANEL_VTOTAL;
#else
    PanelType * pPanelData;
    pPanelData = tPanelIndexTbl[stGenSetting.g_SysSetting.enPanelResType];
    pPanelData += stGenSetting.g_SysSetting.u8PanelModel;
    DBG_PANEL(printf("m_wPanelVTotal!%u\n" , pPanelData->m_wPanelVTotal));
    return pPanelData->m_wPanelVTotal;
#endif
}
#if (KEEP_UNUSED_FUNC == 1)
U16 pnlGetMaxHTotal(void)
{
#if (USE_PANEL_DEFINE == 1)
    return PANEL_MAX_HTOTAL;
#else
    PanelType * pPanelData;
    pPanelData = tPanelIndexTbl[stGenSetting.g_SysSetting.enPanelResType];
    pPanelData += stGenSetting.g_SysSetting.u8PanelModel;
    return pPanelData->m_wPanelMaxHTotal;
#endif
}
U16 pnlGetMinHTotal(void)
{
#if (USE_PANEL_DEFINE == 1)
    return PANEL_MIN_HTOTAL;
#else
    PanelType * pPanelData;
    pPanelData = tPanelIndexTbl[stGenSetting.g_SysSetting.enPanelResType];
    pPanelData += stGenSetting.g_SysSetting.u8PanelModel;
    return pPanelData->m_wPanelMinHTotal;
#endif
}

U16 pnlGetMaxVTotal(void)
{
#if (USE_PANEL_DEFINE == 1)
    return PANEL_MAX_VTOTAL;
#else
    PanelType * pPanelData;
    pPanelData = tPanelIndexTbl[stGenSetting.g_SysSetting.enPanelResType];
    pPanelData += stGenSetting.g_SysSetting.u8PanelModel;
    return pPanelData->m_wPanelMaxVTotal;
#endif
}

U16 pnlGetMinVTotal(void)
{
#if (USE_PANEL_DEFINE == 1)
    return PANEL_MIN_VTOTAL;
#else
    PanelType * pPanelData;
    pPanelData = tPanelIndexTbl[stGenSetting.g_SysSetting.enPanelResType];
    pPanelData += stGenSetting.g_SysSetting.u8PanelModel;
    return pPanelData->m_wPanelMinVTotal;
#endif
}
#endif

U8 pnlGetDCLK(void)
{
#if (USE_PANEL_DEFINE == 1)
    return PANEL_DCLK;
#else
    PanelType * pPanelData;
    pPanelData = tPanelIndexTbl[stGenSetting.g_SysSetting.enPanelResType];
    pPanelData += stGenSetting.g_SysSetting.u8PanelModel;
    return pPanelData->m_dwPanelDCLK;
#endif
}
#if (KEEP_UNUSED_FUNC == 1)
U8 pnlGetMaxDCLK(void)
{
#if (USE_PANEL_DEFINE == 1)
    return PANEL_MAX_DCLK;
#else
    PanelType * pPanelData;
    pPanelData = tPanelIndexTbl[stGenSetting.g_SysSetting.enPanelResType];
    pPanelData += stGenSetting.g_SysSetting.u8PanelModel;
    return pPanelData->m_dwPanelMaxDCLK;
#endif
}
U8 pnlGetMinDCLK(void)
{
#if (USE_PANEL_DEFINE == 1)
    return PANEL_MIN_DCLK;
#else
    PanelType * pPanelData;
    pPanelData = tPanelIndexTbl[stGenSetting.g_SysSetting.enPanelResType];
    pPanelData += stGenSetting.g_SysSetting.u8PanelModel;
    return pPanelData->m_dwPanelMinDCLK;
#endif
}
#endif

U16 pnlGetSpreadSpectrumStep(void)
{
#if (USE_PANEL_DEFINE == 1)
    return SET_SSC_STEP;
#else
    PanelType * pPanelData;
    pPanelData = tPanelIndexTbl[stGenSetting.g_SysSetting.enPanelResType];
    pPanelData += stGenSetting.g_SysSetting.u8PanelModel;
    return pPanelData->m_wSpreadSpectrumStep;
#endif
}

U16 pnlGetSpreadSpectrumSpan(void)
{
#if (USE_PANEL_DEFINE == 1)
    return SET_SSC_SPAN;
#else
    PanelType * pPanelData;
    pPanelData = tPanelIndexTbl[stGenSetting.g_SysSetting.enPanelResType];
    pPanelData += stGenSetting.g_SysSetting.u8PanelModel;
    return pPanelData->m_wSpreadSpectrumSpan;
#endif
}

/******************************************************************************/
///Get the panel ratio type
/******************************************************************************/
U8 devPanel_PANEL_TYPE(void)
{
#if (PANEL_TYPE_SEL == PNL_DAC_CRT)
     return  OTHER_PANEL;
#else
    if( devPanel_WIDTH() * 9 >= devPanel_HEIGHT() * 16 )
        return  _16_9_PANEL;
    else if ( devPanel_WIDTH() * 3 > devPanel_HEIGHT() * 4 )
        return  WIDE_PANEL;
    else if( devPanel_WIDTH() * 4 == devPanel_HEIGHT() * 5 )
        return  _5_4_PANEL;
    else if( devPanel_WIDTH() * 3 == devPanel_HEIGHT() * 4 )
        return  _4_3_PANEL;
    else
        return  OTHER_PANEL;

#endif
}

BOOLEAN devPanel_IsWidePanel(void)
{
    if( devPanel_PANEL_TYPE() == _16_9_PANEL ||
        devPanel_PANEL_TYPE() == WIDE_PANEL )
    {
        //puts("\r\nWide panel");// kevin XX
        return TRUE;
    }
    else
    {
        //puts("\r\nNot Wide panel");// kevin XX
        return FALSE;
}
}

/******************************************************************************/
///initialize registers for Gamma
/******************************************************************************/
/////////////////////////////////////////////////////////////////////////////
// Gamma format
// 0, 1, 2, 3, ..., 255, 255 (must re-fill 255 (2bytes))
// tNormalGammaR/G/B[]
// _____________________________________________
//  Byte | 1            2            3 ..
//     [inc|cnt]    [inc|cnt]    [inc|cnt]
//
// tNormalGammaR/G/B_2[]
// _____________________________________________
//  Byte | 1              2
//   [p3|p2|p1|p0]  [p7|p6|p5|p4]
BYTE msWriteGammaTbl( BYTE channel, BYTE* ucTab1, BYTE* ucTab2 )
{
    BYTE ucCurVal = 0;
    BYTE ucInc, ucLen;
    WORD wOutCnt = 0;
    BYTE i;
    BYTE ucSecondData = 0;
    BYTE ucMinor;
    U16 u16GammaValue;
    U8 u8Bank;

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

    for( i = 0; wOutCnt < 256; ++ i )
    {
        ucInc = ucTab1[i]>>5;
        ucLen = ( ucTab1[i] & 0x1f ) + 1;
        while( ucLen > 0 )
        {
            // calculate gamma value
            ucCurVal = ucCurVal + ucInc;
            ucMinor = (ucTab2[wOutCnt/4] >> ((wOutCnt%4)*2)) & 0x3;
            u16GammaValue = (ucCurVal << 2) | ucMinor;
            //printf("ch=%bu,tab1[%bu]=0x%bx,tab2[%u]=0x%bx\n", channel, i, ucTab1[i], wOutCnt/4, ucTab2[wOutCnt/4]);
            //printf("                                      Gamma[%u]=0x%bx,0x%bx,0x%x\n", wOutCnt, ucCurVal, ucMinor, u16GammaValue);

            if (SC_GAMMA_LUT_TYPE == SC_GAMMA_LUT_12BIT)
                u16GammaValue *= 4;

            // write gamma value
            while ((MDrv_ReadByte(BK_SC_VOP_71_L)) & 0xE0);                     //Check whether the Write chanel is ready
            MDrv_WriteByte(BK_SC_VOP_70_L, (U8) wOutCnt);                       // set address port
            MDrv_Write2Byte(BK_SC_VOP_72_L+(channel*2), u16GammaValue);
            MDrv_WriteByte(BK_SC_VOP_71_L, 0x1 << (5+channel));                 // kick off
            /*{
                // wait write finished
                while ((MDrv_ReadByte(BK_SC_VOP_71_L)) & 0xE0);                 //Check whether the Write chanel is ready

                //read back
                MDrv_WriteByte(BK_SC_VOP_70_L, (U8) wOutCnt);                   // set address port
                MDrv_WriteByte(BK_SC_VOP_71_H, 0x1 << (5+channel));             // kick off
                while ((MDrv_ReadByte(BK_SC_VOP_71_H)) & 0xE0);                 //Check whether the Write chanel is ready
                //u16GammaValue = MDrv_Read2Byte(L_BK_VOP(0x75+channel));
                u16GammaValue = MDrv_Read2Byte(BK_SC_VOP_75_L+(channel*2));
                printf("                                      regGamma=0x%x\n", u16GammaValue);
            }*/

            if( 0 == wOutCnt )
            {
                ucSecondData = ucCurVal;
            }
            ++ wOutCnt;

            -- ucLen;
        } // while
    } // for

    MDrv_WriteByte(BK_SELECT_00, u8Bank);

    return ucSecondData;
}

void devPanel_InitGammaTbl(void)
{
    BYTE ucBank;
    BYTE ucTgtChannel = 0;
    BYTE* pcTab1;
    BYTE* pcTab2;
    BYTE ucFirstData;

    BYTE ucBackupMainSubEnableFlag = 0;

    ucBank = MDrv_ReadByte(BK_SELECT_00);
    MDrv_WriteByte(BK_SELECT_00, REG_BANK_VOP);

    // If gamma is on, turn if off
    if(MDrv_ReadByte(BK_SC_VOP_50_L) & _BIT0)
    {
        MDrv_WriteByteMask(BK_SC_VOP_50_L, 0, _BIT0);
        ucBackupMainSubEnableFlag |= _BIT0;
    }

    while( ucTgtChannel < 3 )   // 0 for R, 1 for G, 2 for B
    {
        pcTab1 = tAllGammaTab[0][0+2*ucTgtChannel];
        pcTab2 = tAllGammaTab[0][1+2*ucTgtChannel];

        // Write data to gamma channel
        ucFirstData = msWriteGammaTbl( ucTgtChannel, pcTab1, pcTab2 );

        ucTgtChannel += 1;
    }

    // Recovery gamma table
    if( ucBackupMainSubEnableFlag & _BIT0 )
        MDrv_WriteByteMask(BK_SC_VOP_50_L, 1, _BIT0);

    MDrv_WriteByte(BK_SELECT_00, ucBank);
}

U32 devPanel_DClkFactor(void)
{
    return (((U32)MST_XTAL_CLOCK_MHZ * PANEL_LPLL_MM)*(524288 * PANEL_LPLL_LM * PANEL_LPLL_K)/PANEL_LPLL_A);
}

/******************************************************************************/
///Get the panel DCLK
/******************************************************************************/
U8 devPanel_DCLK(void)
{
    return PANEL_DCLK;
}

/******************************************************************************/
///Get the panel has dual port or not
/******************************************************************************/
BOOLEAN devPanel_Is_DUAL_PORT(void)
{
    return PANEL_DUAL_PORT;
}

BOOLEAN devPanel_Is_ChannelSwap(void)
{
    return PANEL_DUAL_PORT ? ((PANEL_CONNECTOR_SWAP_PORT != FALSE) != (PANEL_SWAP_PORT != FALSE)) : FALSE;
}

U16 devPanel_MaxVTOTAL(void)
{
    return PANEL_MAX_VTOTAL;
}

U16 devPanel_MinHTOTAL(void)
{
    return PANEL_MIN_HTOTAL;
}

U8 devPanel_LockYLine(void)
{
    return PANEL_LOCK_Y_LINE;
}

/******************************************************************************/
///Get the panel type is LVDS or not
/******************************************************************************/
BOOLEAN devPanel_IsLVDS(void)
{
    return PANEL_LVDS;
}

/******************************************************************************/
///Get the panel type is TTL or not
/******************************************************************************/
BOOLEAN devPanel_IsTTL(void)
{
    return PANEL_TTL;
}

/******************************************************************************/
///Get the panel has TCON or not
/******************************************************************************/
BOOLEAN devPanel_IsTCON(void)
{
    return PANEL_DTCON;
}

/******************************************************************************/
///Get the panel has analog TCON or not
/******************************************************************************/
BOOLEAN devPanel_Is_ANALOG_TCON(void)
{
    return PANEL_ATCON;
}

U16 devPanel_DE_VSTART(void)
{
    return PANEL_DE_VSTART;
}

U16 devPanel_OCTRL(void)
{
    return ((((PANEL_DUAL_PORT & _BIT0) | (PANEL_CONNECTOR_SWAP_PORT & _BIT1))<<8) |
            ((PANEL_SWAP_EVEN_RB & _BIT0) | (PANEL_SWAP_ODD_RB & _BIT1) |
            (PANEL_SWAP_EVEN_ML & _BIT2) | (PANEL_SWAP_ODD_ML &_BIT3)));
}

U16 devPanel_OSTRL(void)
{
    return ((U16)(0xF7<<8) | (PANEL_DCLK_DELAY << 4 ) | (_BIT3 & PANEL_INV_DCLK) |
            (_BIT2 & PANEL_INV_DE) | (_BIT1 & PANEL_INV_VSYNC) |
            (_BIT0 & PANEL_INV_HSYNC));
}

U8 devPanel_ODRV (void)
{
    return ((PANEL_DCLK_CURRENT << 6) | (PANEL_DE_CURRENT << 4) |
            (PANEL_ODD_DATA_CURRENT << 2) | (PANEL_EVEN_DATA_CURRENT));
}

U16 devPanel_DITHCTRL(void)
{
#if (PANEL_DITHER)
    return 0x2D05;
#else
    return 0x2D00;
#endif
}

⌨️ 快捷键说明

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