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

📄 devvd.h

📁 主要用于液晶电视解码,内置51单片机,全部代码用C编写,编译环境为KEILC
💻 H
字号:
#ifndef _DEVVD_H_
#define _DEVVD_H_

#ifdef _DEVVD_C_
  #define _DEVVDDEC_
#else
  #define _DEVVDDEC_ extern
#endif

#ifdef _MSVD_C_
  #define _MSVDDEC_
#else
  #define _MSVDDEC_ extern
#endif


typedef enum _vdSignalType
{
    SIG_NTSC,// M
    SIG_PAL,// B/G, D/K, I, H, N
    SIG_SECAM,
    SIG_NTSC_443,
    SIG_PAL_60,
    SIG_PAL_M,
    SIG_PAL_NC,
    SIG_NUMS, // signal number
    SIG_NONE = -1
}vdSignalType;


typedef enum _FreeRunBoardColor
{
    FR_BLACK,
    FR_WHITE,
    FR_BLUE,
}FreeRunBoardColor;

typedef enum _LPFCtrlType
{
    //LPF_CTL_VD_443,
    //LPF_CTL_VD_358,
    //LPF_CTL_ANALOG_PORT,
    LPF_CTL_TV_STRONG,
	LPF_CTL_TV_NORMAL,
	LPF_CTL_TURN_OFF=0xff
} LPFCtrlType;

typedef enum _VdFroceFscType
{
    VD_FORCE_FSC_443,
    VD_FORCE_FSC_358
} VdFroceFscType;

typedef enum _MSVDCombLineBufCtlType
{
    MSVD_COMB_LINE_BUFFER_CTL_HW_AUTO,
    MSVD_COMB_LINE_BUFFER_CTL_SW
} MSVDCombLineBufCtlType;
typedef struct _StuVDInfo
{
    WORD wVideoStatus;
    vdSignalType ucVideoSystem;
    BYTE ucVideoStableCounter;
    BYTE ucVideoPollingCounter;
    BOOL bVideoDoModeSetting;
} StuVDInfo;

typedef struct _StuVideoSystemInfo
{
    WORD _wHTotal;
    WORD _wHActive;
}StuVideoSystemInfo;

//////////////////////////////////////////////////////////////////////////////////////////
// Definition
//////////////////////////////////////////////////////////////////////////////////////////
// video decoder status
#define VD_HSYNC_LOCKED     _BIT15
#define VD_SYNC_LOCKED      _BIT14

#define VD_VSYNC_50HZ       _BIT13
#define VD_INTERLACED       _BIT12
#define VD_MACROVISION      _BIT11

#define VD_COLOR_LOCKED     _BIT9
#define VD_PAL_SWITCH       _BIT8

#define VD_FSC_TYPE         (_BIT7|_BIT6|_BIT5|_BIT4)
#define VD_FSC_3579         (0)             // NTSC
#define VD_FSC_3575         (_BIT4)         // PAL(M)
#define VD_FSC_3582         (_BIT5)         // PAL(Nc)
#define VD_FSC_4433         (_BIT6)         // PAL
#define VD_FSC_4285         (_BIT6|_BIT7)   // SECAM
#define VD_FSC_4XXX         (_BIT6)

#define VD_RESET_ON         _BIT3
#define VD_STD_TYPE         0x0007


//#define VD_MODE_DETECT_MASK (VD_HSYNC_LOCKED|VD_VSYNC_50HZ|VD_FSC_TYPE|VD_PAL_SWITCH|VD_RESET_ON)
#define VD_MODE_DETECT_MASK (VD_HSYNC_LOCKED|VD_VSYNC_50HZ|(_BIT6|_BIT7)|VD_PAL_SWITCH|VD_RESET_ON)
// Video status 2 for Debug
#define VD_H_PERIOD_INVALID _BIT0
#define VD_H_FREQ_INVALID   _BIT1
#define VD_V_TOTAL_INVALID  _BIT2
#define VD_V_FREQ_INVALID   _BIT3

// video polling
#define VD_NO_INPUT_STABLE_COUNT 20
#define VD_INPUT_STABLE_COUNT    20
#define VD_VSYNC_CHANGE_COUNT       3

#define VD_FORCE_AUTO       0
#define VD_FORCE_PAL        1   // 443 50Hz
#define VD_FORCE_NTSC_443   2   // 443 60Hz
#define VD_FORCE_PAL_358    3   // 358 ( 60Hz -> PAL_M, 50Hz -> PAL_NC )
#define VD_FORCE_NTSC       4   // 358 60Hz
#define VD_FORCE_SECAM      5   // 428 50Hz
_DEVVDDEC_ XDATA BYTE g_ucMSVDForceSystem;


//#define VD_PATCH_001    // PAL-N -> (PAL+No burst) ==> VD state machine abnormal
#define VD_PATCH_002    // PAL-M -> NTSC ==> VD color abnormal
#define VD_PATCH_003    // NTSC -> PAL-M ==> VD color abnormal
//#define VD_PATCH_004    // NTSC <-> PAL ==> Scaler Vtotal != VD vtotal
#define VD_PATCH_005    // VD output H freq abnormal

#define ENABLE_MONITOR_SIGNAL   1
#if( ENABLE_MONITOR_SIGNAL )
_DEVVDDEC_ XDATA WORD g_wMonitorSignal_Timer;
#define MONITOR_SIGNAL_INIT _BIT7
_DEVVDDEC_ void msMonitorSignal(BYTE ucFlag);
#endif


#define VTotalTorlance			10

#define VD_COLOR_BURST_HANDLER_RESET   _BIT7

#define ENABLE_FOLLOW_MODE_AUTO_CLOCK   1

#define MSVD_CTL_FLAG_VSYNC                 _BIT0
#define MSVD_CTL_FLAG_DSP_STD               _BIT1
#define MSVD_CTL_FLAG_FSC_DETECT            _BIT2
#define MSVD_CTL_FLAG_ACC                   _BIT3
#define MSVD_CTL_FLAG_COLOR_BURST_HANDLER   _BIT4
#define MSVD_CTL_FLAG_NOISE_HANDLER         _BIT5
#define MSVD_CTL_FLAG_COMB_LINE_BUF         _BIT6
#define MSVD_CTL_FLAG_COMB_HANDLER          _BIT7

#define MSVD_CTL2_FLAG_AGC_MONITOR          _BIT0
#define MSVD_CTL2_FLAG_AGC_PROCESSOR        _BIT1
#define MSVD_CTL2_FLAG_VCR                  _BIT2
#define MSVD_CTL2_FLAG_SECAM                _BIT3
#define MSVD_CTL2_FLAG_HSYNC                _BIT4
#define MSVD_CTL2_FLAG_PATCH5               _BIT5
#define MSVD_CTL2_FLAG_PAL_SWITCH           _BIT6
#define MSVD_CTL2_FLAG_AFEC                 _BIT7

#define DSP_RUN_MODE_NONE		1
#define DSP_RUN_MODE_POLLING	2
//#define DSP_RUN_MODE_INT		3
#define DSP_RUN_MODE_TIMER_AND_POLLING	4

#if( ENABLE_VD_DSP )
#define DSP_RUN_MODE    DSP_RUN_MODE_TIMER_AND_POLLING
#else
#define DSP_RUN_MODE    DSP_RUN_MODE_NONE
#endif

#define OUTPUT_SIG      0
#define OUTPUT_FREERUN  _BIT0
#define OUTPUT_SNOW     _BIT1

#define AFCTUNEINITCOUNT 0x80
#define AFCTUNERANGE	 20
#define AFCTUNEMINCOUNT	 AFCTUNEINITCOUNT-AFCTUNERANGE
#define AFCTUNEMAXCOUNT	 AFCTUNEINITCOUNT+AFCTUNERANGE

_DEVVDDEC_ BYTE g_ucmsVDCtl2;
_DEVVDDEC_ BYTE g_ucmsVDCtl;


_DEVVDDEC_ XDATA BOOL g_bVDCurLineLockStatus;
_DEVVDDEC_ bit g_bVDColorBurstHandler_LastColorBurstStatus;
_DEVVDDEC_ bit g_bDetectInterlace_LastInterlaceFlag;
_DEVVDDEC_ XDATA BYTE g_ucMSVDSwitchLineLockCnt;
_DEVVDDEC_ XDATA WORD g_wVDColorBurstHandlerTimer;
_DEVVDDEC_ XDATA BYTE g_ucVDColorBurstHandlerStableCounter;
_DEVVDDEC_ XDATA StuVDInfo g_VdInfo;
_DEVVDDEC_ XDATA BYTE g_ucAGCGain;
_DEVVDDEC_ XDATA WORD g_wLastSyncStatus;
#ifdef VD_PATCH_002
_DEVVDDEC_ XDATA BYTE g_msVD_Patch002_LastVideoSystem;
#endif

_DEVVDDEC_ XDATA BYTE g_ucMSVDNoiseHandlerTimer;
//========================================================================

_DEVVDDEC_ BOOL msForceChromaDetect(BYTE ucSignalType);

_DEVVDDEC_ void msVDNoiseHandlerInit(void);
_DEVVDDEC_ void msVDNoiseHandler(void);
_DEVVDDEC_ void msVDNoiseHandlerReset(void);

_DEVVDDEC_ void msVDDSPWriteByte( BYTE ucAddr, BYTE ucData );
_DEVVDDEC_ BYTE msDecoderSyncDetect(void);
//_DEVVDDEC_ void SetColorSystem(StuChannelData ChannelData);
_DEVVDDEC_ void vdMonitorInput(void);
_DEVVDDEC_ void vdModeHandler(void);
_DEVVDDEC_ void vdInitVariable(void);
_DEVVDDEC_ void msVDColorKill( BOOL bColorKill );
_DEVVDDEC_ void msLPFCtl( BYTE ucLPFParaIdx );
_DEVVDDEC_ void msVDColorBurstHandler(BYTE ucFlag);
_DEVVDDEC_ WORD msVDGetSyncStatus(void);
_DEVVDDEC_ BOOL msVDGetSyncStable( BYTE ucStableCount, BYTE wMaxTime );
_DEVVDDEC_ void msFieldDetectCtl(void);
_DEVVDDEC_ BYTE msVDGetVideoSystem( WORD wVideoStatus );
_DEVVDDEC_ WORD msVDDSPRead2Bytes( BYTE ucAddr );
_DEVVDDEC_ BYTE msVDDSPReadByte( BYTE ucAddr );
_DEVVDDEC_ void msVDCombLineBufferCtl( BYTE flag );
_DEVVDDEC_ bit msVDGetColorLockBit(void);
_DEVVDDEC_ void msVDSetupMode( WORD wStatus, BYTE ucSignalType );

_DEVVDDEC_ BOOL msGetInterlaceBit(void);
_DEVVDDEC_ void msDetectInterlace( BYTE ucFlag );

_DEVVDDEC_ void msSetBlueScreen( BOOL bEnable, BYTE ucColor );
_DEVVDDEC_ void msCommSetupMode(void);
_DEVVDDEC_ void msVDForceSystem( BYTE ucSystem );

_DEVVDDEC_ void msVDLineLockCtl( BOOL bLock );
_DEVVDDEC_ void PrintVDStatus(WORD wStatus);
_DEVVDDEC_ WORD msVDGetVTotal(void);
_DEVVDDEC_ BYTE msVDSpecialRead( BYTE ucMux, BYTE ucAddr );

_DEVVDDEC_ void ResetupMode(void);
_DEVVDDEC_ void msVDCombHandler(void);
_DEVVDDEC_ WORD msGetVideoHPeriod( BYTE ucFlag );
_DEVVDDEC_ void Fsm_ResetHandle(void);

#define ENABLE_VCR_HANDLER  0

#if(ENABLE_VCR_HANDLER)
_DEVVDDEC_ XDATA BYTE g_ucVDVCRHandler_Ctl;
//_DEVVDDEC_ XDATA BYTE g_ucVDVCRHandler_Timer;
#define MSVD_VCR_CTL_HW_AUTO        0
#define MSVD_VCR_CTL_SW_AUTO        1
#define MSVD_VCR_CTL_FORCE_NON_VCR  2
#define MSVD_VCR_CTL_FORCE_VCR      3
_DEVVDDEC_ void msVDVCRHandler(void);
#endif

#define ENABLE_HSYNC_HANDLER    1
#if( ENABLE_HSYNC_HANDLER )
_DEVVDDEC_ XDATA BYTE g_ucVDHSyncHandler_Timer;
void msVDHSyncHandlerReset(void);
void msVDHSyncHandler(void);
#endif

//_DEVVDDEC_ XDATA BYTE g_ucAFECHnadler_Timer;
_DEVVDDEC_ XDATA BYTE g_ucAFECHnadler_LaseDplSel;
_DEVVDDEC_ void msVDAFECHandler(void);

#ifdef VD_PATCH_001
// Call this function one time when no signal
_DEVVDDEC_ BOOL msVD_Patch_001(void);
#endif

#ifdef VD_PATCH_002
// Call this function when mode change!
_DEVVDDEC_ BOOL msVD_Patch_002( WORD wVDStatus );
#endif

#ifdef VD_PATCH_003
_DEVVDDEC_ BOOL msVD_Patch_003(BYTE ucFlag);
#endif

#ifdef VD_PATCH_004
_DEVVDDEC_ void msVD_Patch_004( BOOL bEnable );
#endif

#ifdef VD_PATCH_005
_DEVVDDEC_ XDATA BYTE g_msVD_Patch005_Timer;
_DEVVDDEC_ void msVD_Patch_005( BYTE ucResetTime );
#endif


#if( ENABLE_SECAM )
#define MSVD_SECAM_OFF          0
#define MSVD_SECAM_AUTO         1
_DEVVDDEC_ XDATA BYTE g_ucVDSecamHandlerTimer;
_DEVVDDEC_ XDATA DWORD g_dwVDSecamHandler_PreMagThl;
_DEVVDDEC_ XDATA WORD g_wVDSecamHandler_PreNoiseMag;
_DEVVDDEC_ XDATA BYTE g_ucVDSecamThdCnt;
_DEVVDDEC_ void msVDSecamHandler(void);
#endif


_DEVVDDEC_ XDATA BYTE g_ucMSVDDebug;           // For debug
_DEVVDDEC_ XDATA BYTE g_ucMSVDDebug2;          // For debug

_DEVVDDEC_ BYTE msVDCheckScalerStatus( BYTE ucCheckFlag );
_DEVVDDEC_ void msVideoAGCHandle(void);

#endif

⌨️ 快捷键说明

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