亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? msvd.c

?? 主要用于液晶電視解碼,內置51單片機,全部代碼用C編寫,編譯環境為KEILC
?? C
?? 第 1 頁 / 共 4 頁
字號:
#include "board.h"

#include <math.h>

#define _MSVD_C_

#include <math.h>
#include "types.h"
#include "ms_reg.h"
#include "board.h"
#include "global.h"
#include "DEBUG.h"
#include "ms_rwreg.h"
#include "misc.h"
#include "userpref.h"
#include "power.h"
#include "panel.h"
#include "mstar.h"
#include "tv.h"
#include "DevVD.h"
#include "Detect.h"
#include "DEVTuner.h"
#include "adjust.h"
#include "Maria2_FSC_Lib.h"
#include "Maria2_ACC_Lib.h"
#include "M2_VD_Std_Lib.h"
#include "DevVD_User.h"
#include "menu.h"
#include "msvd.h"

#include "M2_VD_AGC_Lib.h"
#include "msVDField.h"

#if(ENABLE_VD_DSP)
#include "Maria2_dsp_lib.h"
#endif

///////////////////////////////////////////////////////////////////////////////
// h sync lock	:   DspReg[14.1] or DspReg[0x25]7:4(CTRL_STATE[3:0]) >= 6
// color lock   :   DspReg[0x25]7:4(CTRL_STATE[3:0]) == 8
// 50Hz         :   by DSP
// interlace	:   by scaler.
//
// BK2_01[2:0] => FREQ_FSC[2:0] ==> Detect Signal type
//  000: 4.43361875MHz.
//  010: 3.579545MHz.
//  100: 3.57561149MHz.
//  110: 3.58205625MHz
//
// BK2_01[7:4] => APLL_TRK_MD[3:0]
//  1000: APLL in tracking mode
//  0110: APLL in free run mode(no color)
//
// BK2_02[7:6] => APLL_LCK_STATE[1:0]
//  01: APLL in lock state(color on)
//  xx: APLL not in lock yet(color off)
//
// BK2_02[5:4] => FRM_LNS[1:0]
//  00: Unknown
//  10: Above 575 lines
//  01: Below 575 lines
//
// BK2_02[3:2] => Lock color burst
//  01: Lock
//  10: No lock
//
// BK2_02[1:0] => TV_SYSTEM[1:0]
//  01: NTSC system
//  10: PAL system
//
// BK2_03[7] ==> VCR_MD ==> VCR mode detect
// ------------------------------------------------------------------
// When Bk2_04 = 0x04, Bk2_02 ==> Noise level
// When Bk2_04 = 0x08, Bk2_01 ==> Gain level
// ------------------------------------------------------------------
// How to judge these situation:
//  VCR - Stop(OSD): Non-interlace
//  VCR - Pause: Vtotal is different with normal play
//  VCR : Vtotal is always change
///////////////////////////////////////////////////////////////////////////////
// BK3_72[2:0]
// 000: NTSC(M)
// 001: NTSC(443)
// 010: PAL(M)
// 011: PAL(BDGHIN)
// 100: PAL(Nc)
// 111: Unknow => No signal
///////////////////////////////////////////////////////////////////////////////
//              Htotal*Vtotal
// NTSC(M)      910*525
// NTSC-443     1127.1*525
// PAL(M)       909*525
// PAL(BDGHIN)  1135*625+4
// PAL(Nc)      917*625+4
//
// NTSC(M) New capture = 720*910/858
///////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////
// 3.58: 910    NTSC-M  525 NTSC
//       909    PAL-M   525 PAL
//       917    PAL-Nc  625
// 4.43:
//       1135   PAL-BDGHIN  625
//       1127   NTSC-443    525
///////////////////////////////////////////////////////////////////////////////
// Use ShibaSoku TG35CX get some info:
// NTSC:
// FH=15.735KHz ==> HP=0x2FB
// FV=59.94Hz   ==> VT=525
//-------------------------------------
// PAL:
// FH=15.625KHz ==> HP=0x334
// FV=50        ==> VT=625
////////////////////////////////////////////////////////////////////////////

WORD code tVideoSystemStdHTotal[SIG_NUMS] =
{
    910, // SIG_NTSC, // M
    1135, // SIG_PAL, // B/G, D/K, I, H, N
    1097, // SIG_SECAM,
    1127, // SIG_NTSC_443,
    1127, // SIG_PAL_60,
    909, // SIG_PAL_M,
    917, // SIG_PAL_NC,
};
void msVDDSPWriteByte( BYTE ucAddr, BYTE ucData )
{
    BYTE ucBk2_07 = msReadByte( BK2_07 );

    msWriteByte( BK2_07, ucAddr );
    msWriteByte( BK2_08, ucData );
    msWriteByte( BK2_07, ucBk2_07 );
}

BYTE msVDDSPReadByte( BYTE ucAddr )
{
    BYTE ucTmp;
    BYTE ucBk2_07 = msReadByte( BK2_07 );
    msWriteByte( BK2_07, ucAddr );
    ucTmp = msReadByte( BK2_09 );
    msWriteByte( BK2_07, ucBk2_07 );
    return ucTmp;
}

WORD msVDDSPRead2Bytes( BYTE ucAddr )
{
    return (msVDDSPReadByte(ucAddr) + (msVDDSPReadByte(ucAddr+1)<<8));
}

BYTE msVDSpecialRead( BYTE ucMux, BYTE ucAddr )
{
    BYTE ucBank;
    BYTE ucBackupBK2_04;
    BYTE ucTmp;

    ucBank = msReadByte( BK0_00_REGBK);
    msWriteByte( BK0_00_REGBK, REG_BANK2_VD );
    ucBackupBK2_04 = msReadByte( BK2_04 );
    msWriteByte( BK2_04, ucMux );
    ucTmp = msReadByte( ucAddr );
    msWriteByte( BK2_04, ucBackupBK2_04 );
    msWriteByte( BK0_00_REGBK, ucBank );
    return ucTmp;
}

void msVDReset(void)
{
    BYTE ucBank = msReadByte( BK0_00_REGBK );

    putstr("\r\n[Reset VD]");
    msWriteByte( BK0_00_REGBK, REG_BANK2_VD );

    #if( ENABLE_PAL_SWITCH_HANDLER )
    //if( g_ucmsVDCtl2&MSVD_CTL2_FLAG_PAL_SWITCH )
        msVDPalSwitchHandlerReset(PAL_SWITCH_AUTO); // Auto detect PAL/NTSC
    #endif

    msWriteByteMask(BK2_21_APLL_CTRL2, 0x00, 0x06); // Auto detect PAL/NTSC

    msWriteBit( BK2_14_SOFT_RST, 1, _BIT7 );
    Delay1ms(1);
    msWriteBit( BK2_14_SOFT_RST, 0, _BIT7 );
    Delay1ms(1);


    //if( g_ucmsVDCtl2&MSVD_CTL2_FLAG_AGC_PROCESSOR )
        VD_AGC_Ctl( VD_AGC_CTL_ENABLE );

#if(ENABLE_VD_DSP)
    //if( g_ucmsVDCtl&MSVD_CTL_FLAG_VSYNC )
    {
        BYTE ucVSyncCtl = VD_DSP_CTL_ENABLE;

        #if(ENABLE_VSYNC_CTL_AUTO_H_TOTAL)
        ucVSyncCtl |= VD_DSP_CTL_DISABLE_AUTO_H_TOTAL;
        #endif

        #if( TV_SYSTEM == TV_NTSC )
        VD_DSP_Ctl( ucVSyncCtl, 525 ); // Enable DSP, 60Hz
        #else
        VD_DSP_Ctl( ucVSyncCtl, 625 ); // Enable DSP, 50Hz
        #endif
    }
#elif( ENABLE_SW_FILED )
    msVDDSPWriteByte( DSP_0F, 0x04 );
#endif

    //if( g_ucmsVDCtl&MSVD_CTL_FLAG_NOISE_HANDLER )
        msVDNoiseHandlerInit();

//yurian for VD Reset DSP10 error
    {
      BYTE DSP10_Value=msVDDSPReadByte( 0x10 );
      while(DSP10_Value!=0x85)
        {
            Delay1ms(2);
            msVDDSPWriteByte(DSP_10, 0x85);
            msVDDSPWriteByte(DSP_11, 0x00);
            Delay1ms(1);
            DSP10_Value=msVDDSPReadByte( 0x10 );
        }
    }

    msWriteByte( BK0_00_REGBK, ucBank );
}

void msVD_FSM_Reset( BYTE ucCtl )
{
    BYTE ucBank = msReadByte( BK0_00_REGBK);
    putstr("\r\n[Reset FSM]");

    #if ( ENABLE_PAL_SWITCH_HANDLER )
    //if( g_ucmsVDCtl2&MSVD_CTL2_FLAG_PAL_SWITCH )
        msVDPalSwitchHandlerReset(ucCtl); // Auto detect PAL/NTSC
    #endif
    msWriteByte( BK0_00_REGBK, REG_BANK2_VD );
    msWriteBit( BK2_14_SOFT_RST, 1, _BIT6 );
    Delay1ms(1);
    msWriteBit( BK2_14_SOFT_RST, 0, _BIT6 );
    Delay1ms(1);
    msWriteByte( BK0_00_REGBK, ucBank );
}

WORD msVDGetVTotal(void)
{
    BYTE ucBank;
    WORD wVTotal;

    ucBank = msReadByte( BK0_00_REGBK);
    msWriteByte( BK0_00_REGBK, REG_BANK2_VD );
    wVTotal = msVDDSPRead2Bytes(0);
    msWriteByte( BK0_00_REGBK, ucBank );
    return wVTotal;
}
// ucFlag:
// [1:0]: 1 -> Always return a valid h freq
//        2 -> Return virtual H period
WORD msGetVideoHPeriod( BYTE ucFlag )
{
    BYTE i;
    WORD wInHP;
    WORD wInHF;

    if( (ucFlag&3) != 2 )
    {
        for( i = 0; i < 10; ++ i )
        {
            wInHP = msGetHorizontalPeriod();
            if( wInHP )
            {
                wInHF = MST_CLOCK_HZ/wInHP;
                if( (wInHF >= 13500)&&(wInHF <= 17800) )
                {
                    return wInHP;
                }
            }
        }
    }

    // H period invalid...
    if( (ucFlag&3) )
    {
        if( msVDGetVTotal() > 566 )
            return MST_CLOCK_HZ/15625;
        else
            return MST_CLOCK_HZ/15734;
    }
    return 0;
}

#if(ENABLE_CHECK_AUTO_H_TOTAL)

BYTE msVDCheckScalerStatus( BYTE ucCheckFlag )
{
    BYTE ucStatus = 0;
    WORD wTmp;
    WORD wHFreq;
    WORD wVTotal;

    // Calculate H frequency ...
    wTmp = msGetHorizontalPeriod();
    if( wTmp == 0x1fff || wTmp == 0 ) // Check H period
    {
        //printf("\r\nHP=%d", wTmp);
        ucStatus |= VD_H_PERIOD_INVALID;
    }
    else // H period is valid
    {
        wHFreq = msCalculateHFreqX10(wTmp); // Cal H freq
        if( wHFreq < 146 || wHFreq > 167 ) //200 ) // Hfreq < 14.6K, > 16.6K => freq invalid
        {
            ucStatus |= VD_H_FREQ_INVALID;
        }
        else // H freq is valid
        {
            if( ucCheckFlag&VD_V_TOTAL_INVALID )
            {
                wVTotal = msVDGetVTotal(); // Get VTotal from VD
                wTmp = msGetVerticalTotal(); // Get VTotal from scaler

                // Check VD&Scaler VTotal
                if( (wVTotal < 420) || (wVTotal > 730)
                  ||(wTmp < 420) || (wTmp > 730)
                  ||(abs((int)wVTotal - wTmp) > 50)) // The VTotal of VD and Scaler is different!!
                {
                    ucStatus |= VD_V_TOTAL_INVALID;
                }
                else // VTotal is valid
                {
                    if( ucCheckFlag&VD_V_FREQ_INVALID )
                    {
                        // Cal V freq
                        wTmp = msCalculateVFreqX10( wHFreq, wTmp )*2;
                        if( wTmp < 440 || wTmp > 660 )
                        {
                            ucStatus |= VD_V_FREQ_INVALID;
                        }
                    }
                }
            }
        }
    }
    return ucStatus;
}
#endif

bit msVDGetColorLockBit(void)
{
    return msVD_FSC_GetColorBurstStatus();
}

WORD msVDGetSyncStatus(void)
{
    BYTE ucBank;
    BYTE ucTmp;
    WORD wVDStatus = 0;
    BYTE ucCombStatus;
    WORD wVDVtotal = msVDGetVTotal();


    ucBank = msReadByte( BK0_00_REGBK);

    msWriteByte(BK0_00_REGBK, REG_BANK3_COMB);
    ucCombStatus = msReadByte( BK3_72_COMB_STSC);

    // Check V total
#if( ENABLE_VD_DSP )
    if( wVDVtotal > 566 ) // 625 lines
        wVDStatus |= VD_VSYNC_50HZ;
#else
    if( ucCombStatus&_BIT6 ) // 625 lines
        wVDStatus |= VD_VSYNC_50HZ;
#endif

    //if( 0 == (ucCombStatus&_BIT3) ) // Check comb: No any input signal
    {
        msWriteByte(BK0_00_REGBK, REG_BANK2_VD);
        if( ((msVDSpecialRead( 0x00, BK2_01 )&0xF0) >= 0x60)// Sync ctl state > 6
          &&(msVDDSPReadByte( 0x14 )&_BIT1) ) // SYNC_FOUND
        {
        #if( ENABLE_VD_DSP )
            if( wVDVtotal >= 420 && wVDVtotal <= 730 )
        #else
            if( (ucCombStatus&0x07) != 7 )
        #endif
           {
                wVDStatus |= (VD_HSYNC_LOCKED|VD_SYNC_LOCKED);

                // Check interlace
                if( msGetInterlaceBit() )
                {
                    wVDStatus |= VD_INTERLACED;
                }
            }
        }
    }

    // Get other VD status:
    if( wVDStatus&VD_HSYNC_LOCKED )
    {
        // Check color
        // Get bk2_02 value
        ucTmp = msVDSpecialRead( 0x00, BK2_02 );
        // Check Color burst lock
        if( (ucTmp&0x0C) == 0x04 )
        {
            wVDStatus |= VD_COLOR_LOCKED;
        }

        // Check FSC
        ucTmp = msVDSpecialRead( 0x00, BK2_01 );
        switch( ucTmp&0x07 )
        {
            default:
            case 0: wVDStatus |= VD_FSC_4433;
                break;
            case 2: wVDStatus |= VD_FSC_3579;
                break;
            case 4: wVDStatus |= VD_FSC_3575;
                break;
            case 6: wVDStatus |= VD_FSC_3582;
                break;
            case 1: wVDStatus |= VD_FSC_4285;
                break;
        }

        // Check PAL switch
        if( g_ucMSVDForceSystem == VD_FORCE_AUTO )
        {
            if( wVDStatus&VD_VSYNC_50HZ ) // 50 Hz
            {
                wVDStatus |= VD_PAL_SWITCH;
            }
            else // 60 Hz
            {
//                ucTmp = wVDStatus&VD_FSC_TYPE;
//                if( (ucTmp == VD_FSC_3579)
//                  ||(ucTmp == VD_FSC_3575)
//                  ||(ucTmp == VD_FSC_3582)
//                  ||(ucTmp == VD_FSC_4433)
//                  )
                {
                if (VD_Type<MARIA2_E)
                	{
                    ucTmp = msVDSpecialRead( 0x00, BK2_03 );
                    if( ucTmp&_BIT5 )
                        wVDStatus |= VD_PAL_SWITCH;
                	}
                #if( ENABLE_SW_DETECT_COLOR_STD )
                else if( g_ucVD_ColorStd == DSP_COLOR_PAL )
                        wVDStatus |= VD_PAL_SWITCH;
                #endif
                }
            }
        }
        else // Force color
        {
            if( (g_ucMSVDForceSystem == VD_FORCE_PAL)||(g_ucMSVDForceSystem == VD_FORCE_PAL_358) )
            {
                wVDStatus |= VD_PAL_SWITCH;
            }
        }

        //wVDStatus |= msVDGetVideoSystem( wVDStatus )
    }

    msWriteByte( BK0_00_REGBK, ucBank );

    return wVDStatus;
}

//////////////////////////////////////////////////////
//  Std     50/60   Vtotal  FSC HTotal  Color
//-----------------------------------------
//  NTSC     60     525     358 910
//  PAL-M    60     525     358 909     PAL-Switch
//  NTSC-443 60     525     443 1127
//  PAL-60   60     525     443 1127    PAL-Switch
//  xxx      50     625     358
//  PAL-Nc   50     625     358 917     PAL-Switch
//  xxx      50     625     443
//  PAL      50     625     443 1135    PAL-Switch
//  SECAM    50     625     428 1097
///////////////////////////////////////////////////////
BYTE msVDGetVideoSystem( WORD wVideoStatus )
{
    BYTE ucSignalType = SIG_NONE;

    putstr("\r\n");
    if( wVideoStatus&VD_HSYNC_LOCKED )
    {

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲成a人片综合在线| 蜜桃一区二区三区四区| 成人美女视频在线看| 亚洲男人都懂的| 色婷婷综合五月| 蜜臀va亚洲va欧美va天堂 | 午夜精品久久一牛影视| 欧洲一区在线观看| 激情综合五月婷婷| 午夜精品影院在线观看| 亚洲成人免费看| 日韩极品在线观看| 亚洲情趣在线观看| 亚洲第一会所有码转帖| 人妖欧美一区二区| 亚洲最大色网站| 国产精品全国免费观看高清| 91精品国产91热久久久做人人| 国内成人精品2018免费看| 亚洲一区二区在线免费观看视频 | 欧美性大战久久久久久久蜜臀| 日韩国产欧美在线视频| 亚洲图片欧美激情| 欧美经典三级视频一区二区三区| 一本久道久久综合中文字幕| 欧美性猛交一区二区三区精品| 日本电影欧美片| 91亚洲国产成人精品一区二区三| 日本亚洲天堂网| 久久爱www久久做| 爽好久久久欧美精品| 日韩不卡一区二区| 国产mv日韩mv欧美| 成人永久看片免费视频天堂| 91福利视频在线| 欧美精品一区视频| 精品盗摄一区二区三区| 亚洲少妇中出一区| 另类的小说在线视频另类成人小视频在线 | 国产精品理伦片| 精品国偷自产国产一区| 国产精品高潮久久久久无| 一二三区精品福利视频| 狠狠久久亚洲欧美| 欧美午夜电影网| 国产女主播在线一区二区| 久久久99精品免费观看| 久久久精品国产免费观看同学| 欧美精品久久久久久久多人混战| 99久久综合99久久综合网站| 日韩一区精品字幕| 国产99久久久精品| 91精品国产一区二区人妖| 亚洲欧美日韩电影| 国产福利91精品| 91天堂素人约啪| 26uuu欧美| 中文字幕一区二区日韩精品绯色| 久久伊人中文字幕| 婷婷开心激情综合| 欧美在线小视频| 国产精品初高中害羞小美女文| 一区二区三区欧美日| 成人高清视频免费观看| 91一区在线观看| 国产视频一区在线播放| 国模一区二区三区白浆| 精品国产乱码久久久久久图片| 亚洲人吸女人奶水| aaa欧美色吧激情视频| 欧美国产欧美综合| 国产一区二区在线观看免费| 成人午夜短视频| 久久中文字幕电影| 国产乱码字幕精品高清av| 91论坛在线播放| 国产精品久久久久久久久动漫| 青青草国产精品97视觉盛宴| 欧美日韩另类一区| 国产精品久久久久久久久晋中| 久久99精品国产麻豆婷婷| 日韩一区二区免费电影| 亚洲素人一区二区| 91丨九色丨尤物| 亚洲精选视频在线| 国产91色综合久久免费分享| 久久精品视频一区二区三区| 波波电影院一区二区三区| 亚洲欧洲日韩一区二区三区| 色综合久久久久综合体桃花网| 中文字幕av资源一区| 91色视频在线| 午夜久久久久久电影| 精品国产亚洲在线| 成人一区二区在线观看| 依依成人综合视频| 欧美一级免费大片| 国产精品中文字幕日韩精品| 中文字幕一区二区三中文字幕| 成人丝袜高跟foot| 亚洲成av人片在线| 欧美大片一区二区三区| 偷拍自拍另类欧美| 欧美精品一区二区三区高清aⅴ| 国产一区在线看| 亚洲欧美日韩在线| 日韩午夜激情电影| 99re热这里只有精品免费视频| 亚洲黄一区二区三区| 日韩一二三四区| 成人精品小蝌蚪| 男女男精品网站| 中文字幕日韩一区二区| 欧美一级黄色大片| 91美女视频网站| 九九**精品视频免费播放| 又紧又大又爽精品一区二区| 精品国产电影一区二区| 欧美三级三级三级爽爽爽| 亚洲午夜成aⅴ人片| 欧美性极品少妇| 成人午夜av影视| 久久精品国产精品青草| 亚洲精品国产成人久久av盗摄| 91精品国产福利| 欧美偷拍一区二区| 成人av资源在线观看| 美女诱惑一区二区| 亚洲电影一区二区三区| 国产清纯在线一区二区www| 91精品国产91久久久久久最新毛片| 国产一区二区h| 日日摸夜夜添夜夜添国产精品| 久久久久久久电影| 91精品国产一区二区三区| 色狠狠桃花综合| eeuss鲁片一区二区三区| 精品亚洲aⅴ乱码一区二区三区| 亚洲欧美日韩国产中文在线| 国产日韩欧美高清在线| 日韩一区二区三区四区| 欧美精品乱码久久久久久| 97成人超碰视| 99精品欧美一区| 99亚偷拍自图区亚洲| 国产揄拍国内精品对白| 精品无码三级在线观看视频 | 国产午夜精品一区二区三区四区 | 91福利精品第一导航| www.成人在线| 97aⅴ精品视频一二三区| 国产成人一区在线| 国产高清在线精品| 国内精品嫩模私拍在线| 国产主播一区二区三区| 国产麻豆欧美日韩一区| 国产精品影视网| 丰满少妇久久久久久久| 成人动漫在线一区| 91香蕉视频在线| 欧美三区在线观看| 欧美精品久久天天躁| 日韩欧美精品三级| 久久久久88色偷偷免费| 国产欧美一区二区精品性| 国产欧美日本一区视频| 国产精品卡一卡二| 亚洲黄色片在线观看| 午夜欧美电影在线观看| 日本vs亚洲vs韩国一区三区二区| 性欧美大战久久久久久久久| 日欧美一区二区| 国产在线精品视频| 成人午夜免费视频| 欧美日韩dvd在线观看| 精品国产制服丝袜高跟| 中文字幕电影一区| 午夜精品123| 国产黄色精品网站| 在线亚洲精品福利网址导航| 日韩欧美成人一区二区| 中文字幕国产一区| 亚洲国产美女搞黄色| 久久国内精品视频| av亚洲精华国产精华精| 欧美高清视频不卡网| 久久久久国产精品免费免费搜索| 久久嫩草精品久久久精品| 亚洲欧美aⅴ...| 精品亚洲欧美一区| 91在线国产观看| 欧美成人一区二区三区| 欧美怡红院视频| 精品欧美一区二区三区精品久久| 久久久久久97三级| 视频一区在线播放| 99久久久无码国产精品| 欧美tickling挠脚心丨vk| 亚洲美女少妇撒尿| 五月天丁香久久|