📄 sync.c
字号:
/******************************************************************************
Copyright (c) 2005 MStar Semiconductor, Inc.
All rights reserved.
[Module Name]: Sync.c
[Date]: 16-Feb-2005
[Comment]:
For video input sync detect functions.
[Reversion History]:
*******************************************************************************/
#define _SYNC_C_
/********************
* INCLUDE FILES *
*********************/
#include "Project.h"
#include "TypeDef.h"
#include "Ms7X_reg.h"
#include "Global.h"
#include "Mcu_reg.h"
#include "PANEL.h"
#include "Debug.h"
#include "Ms_Rwreg.h"
#include "Misc.h"
#include "Sync.h"
#include "OSDMenu.h"
#include "Ms_Func.h"
#include "msACE.h"
#if ((MARIA_TYPE_SEL == MARIA_2) && ENABLE_VD_DSP)
#include "Maria2_dsp_lib.h"
#endif // ENABLE_VD_DSP
/**********************
* FUNCTION PROTOTYPES *
***********************/
#if !DEMODULELATOR_MODE
void mstSyncDemodulationModeSet(BIT bMode)
{
mstWriteByte(GEN_00_REGBK, REGBANKVCF); // Switch to Bank3 VCF
if(bMode)
mstWriteByte(BK3_11_COMBCFGB, 0x20); // Set demodulation to mode 1
else
mstWriteByte(BK3_11_COMBCFGB, 0x00); // Set demodulation to mode 0
mstWriteByte(GEN_00_REGBK, REGBANKSCALER); //Switch to Bank0 Scaler
}
#endif // !DEMODULELATOR_MODE
void mstSyncSourceSwitch(void)
{
mstPowerManagement(PM_POWER_ON);
mstEnableMute();
#if (MARIA_TYPE_SEL == MARIA_2)
//-------------- seven 051018----------------------------
mstWriteByte(GEN_00_REGBK, REGBANKADC);
if(tOSDSourcSELSequence[Display.ucSourceSEL]==VGA)
{
mstWriteByte(BK1_55,0xC0);
// msACEPCYUV2RGBCtl(1);
}
else
{
mstWriteByte(BK1_55,0x00);
// msACEPCYUV2RGBCtl(0);
}
mstWriteByte(GEN_00_REGBK, REGBANKSCALER);
//-------------------------------------------------------
#endif
switch (tOSDSourcSELSequence[Display.ucSourceSEL])
{
case CVBS1:
#if RS232DBG
sysWriteString("CVBS 1 IN \x0d\x0a");
#endif // RS232DBG
mstWriteDataTable(tSyncCVBSTable);
mstWriteByte(GEN_00_REGBK, REGBANKADC);
mstWriteByte(BK1_18_CALEN, 0x00); // Disable YCbCr/YPbPr whitw balance
#if ((BOARD_TYPE_SEL == BD_DEMO_7985M_IDP)||(BOARD_TYPE_SEL == BD_DEMO_7988M_IAP)||(BOARD_TYPE_SEL == BD_SOCKET_7988M_IAP)||(BOARD_TYPE_SEL == BD_SOCKET_7985M_IDP)||(BOARD_TYPE_SEL == BD_EXMCU_7988M_IAP))//kevin
mstWriteByte(BK1_2F_ADC_MUX, 0x10); // select CVBS1 input
mstWriteByte(BK1_90_SARADC_CTRL, (mstReadByte(BK1_90_SARADC_CTRL)&~_BIT3));
#else
mstWriteByte(BK1_2F_ADC_MUX, 0x00); // select CVBS1 input
#endif
mstWriteByte(GEN_00_REGBK, REGBANKVFE);
#if (MARIA_TYPE_SEL == MARIA_2)
mstWriteByte(BK2_1A_SVD_EN, 0x40); // SVD_EN[7] (CVBS)
#else
mstWriteByte(BK2_1A_SVD_EN, 0x07); // SVD_EN[7] (CVBS)
#endif
#if (!DEMODULELATOR_MODE && FSC_8X && (MARIA_TYPE_SEL == MARIA_1))
mstWriteByte(BK2_2D_VDFD_CTRL3, 0x80);
#endif
#if (MARIA_TYPE_SEL == MARIA_1)
mstWriteByte(BK2_69_SRC_CTRL1, 0x82);
#endif
mstWriteByte(GEN_00_REGBK, REGBANKVCF); // select register bank scaler
#if DEMODULELATOR_MODE
mstWriteByte(BK3_11_COMBCFGB, 0x20);
#endif
#if (MARIA_TYPE_SEL == MARIA_2)
mstWriteByte(BK3_A1, 0x02); // for SECAM input
#else
mstWriteByte(BK3_40_TIMDETCFGA, mstReadByte(BK3_40_TIMDETCFGA) | _BIT5);
// mstWriteByte(BK3_65_REG_SAT, 0x80); // (65h ORG:0x80)
mstWriteByte(BK3_4C_DEGDETCFG, 0x00);
#endif
mstWriteByte(GEN_00_REGBK, REGBANKSCALER); // select register bank scaler
mstWriteByte(BK0_04_ISCTRL, 0x10);
mstResetVedioDecoder(); // Reset vedio decoder
#if USE_ALLMACEOSD
mstSetMACE(1);
#else
mstSetMACE(Display.ucMACE);
#endif //USE_ALLMACEOSD
mstSetContrast(Display.ucVedioContrast);
break;
case CVBS2:
#if RS232DBG
sysWriteString("CVBS 2 IN \x0d\x0a");
#endif // RS232DBG
mstWriteDataTable(tSyncCVBSTable);
mstWriteByte(GEN_00_REGBK, REGBANKADC);
mstWriteByte(BK1_18_CALEN, 0x00); // Disable YCbCr/YPbPr whitw balance
#if ((BOARD_TYPE_SEL == BD_DEMO_7985M_IDP)||(BOARD_TYPE_SEL == BD_DEMO_7988M_IAP)||(BOARD_TYPE_SEL == BD_SOCKET_7988M_IAP)||(BOARD_TYPE_SEL == BD_SOCKET_7985M_IDP)||(BOARD_TYPE_SEL == BD_EXMCU_7988M_IAP))//kevin
mstWriteByte(BK1_2F_ADC_MUX, 0x10); // select CVBS2 input
mstWriteByte(BK1_90_SARADC_CTRL, (mstReadByte(BK1_90_SARADC_CTRL)|_BIT3));
#else
mstWriteByte(BK1_2F_ADC_MUX, 0x08);
#endif
mstWriteByte(GEN_00_REGBK, REGBANKVFE);
#if (MARIA_TYPE_SEL == MARIA_2)
mstWriteByte(BK2_1A_SVD_EN, 0x40); // SVD_EN[7] (CVBS)
#else
mstWriteByte(BK2_1A_SVD_EN, 0x07); // SVD_EN[7] (CVBS)
#endif
#if (!DEMODULELATOR_MODE && FSC_8X && (MARIA_TYPE_SEL == MARIA_1))
mstWriteByte(BK2_2D_VDFD_CTRL3, 0x80);
#endif
#if (MARIA_TYPE_SEL == MARIA_1)
mstWriteByte(BK2_69_SRC_CTRL1, 0x82);
#endif
mstWriteByte(GEN_00_REGBK, REGBANKVCF); // select register bank scaler
#if DEMODULELATOR_MODE
mstWriteByte(BK3_11_COMBCFGB, 0x20);
#endif
#if (MARIA_TYPE_SEL == MARIA_2)
mstWriteByte(BK3_A1, 0x02); // for SECAM input
#else
mstWriteByte(BK3_40_TIMDETCFGA, mstReadByte(BK3_40_TIMDETCFGA) | _BIT5);
// mstWriteByte(BK3_65_REG_SAT, 0x80); // (65h ORG:0x80)
mstWriteByte(BK3_4C_DEGDETCFG, 0x00);
#endif
mstWriteByte(GEN_00_REGBK, REGBANKSCALER); // select register bank scaler
mstWriteByte(BK0_04_ISCTRL, 0x10);
mstResetVedioDecoder(); // Reset vedio decoder
#if USE_ALLMACEOSD
mstSetMACE(1);
#else
mstSetMACE(Display.ucMACE);
#endif //USE_ALLMACEOSD
mstSetContrast(Display.ucVedioContrast);
break;
case SVIDEO1:
#if RS232DBG
sysWriteString("SVIDEO 1 IN \x0d\x0a");
#endif // RS232DBG
mstWriteDataTable(tSyncCVBSTable);
mstWriteByte(GEN_00_REGBK, REGBANKADC);
mstWriteByte(BK1_18_CALEN, 0x00); // Disable YCbCr/YPbPr whitw balance
#if ((BOARD_TYPE_SEL == BD_DEMO_7985M_IDP)||(BOARD_TYPE_SEL == BD_DEMO_7988M_IAP)||(BOARD_TYPE_SEL == BD_SOCKET_7988M_IAP)||(BOARD_TYPE_SEL == BD_SOCKET_7985M_IDP)||(BOARD_TYPE_SEL == BD_EXMCU_7988M_IAP))//kevin
mstWriteByte(BK1_2F_ADC_MUX, 0x10); // select S-Video input
mstWriteByte(BK1_90_SARADC_CTRL, (mstReadByte(BK1_90_SARADC_CTRL)&~_BIT3));
#else
mstWriteByte(BK1_2F_ADC_MUX, 0x10);
#endif
mstWriteByte(GEN_00_REGBK, REGBANKVFE);
#if (MARIA_TYPE_SEL == MARIA_2)
mstWriteByte(BK2_1A_SVD_EN, 0xC0); // SVD_EN[7] (CVBS)
#else
mstWriteByte(BK2_1A_SVD_EN, 0x07); // SVD_EN[7] (CVBS)
#endif
#if (!DEMODULELATOR_MODE && FSC_8X && (MARIA_TYPE_SEL == MARIA_1))
mstWriteByte(BK2_2D_VDFD_CTRL3, 0x82);
#endif
#if (MARIA_TYPE_SEL == MARIA_1)
mstWriteByte(BK2_69_SRC_CTRL1, 0x04);
#endif
mstWriteByte(GEN_00_REGBK, REGBANKVCF); // select register bank scaler
#if DEMODULELATOR_MODE
mstWriteByte(BK3_11_COMBCFGB, 0x20);
#endif
#if (MARIA_TYPE_SEL == MARIA_2)
mstWriteByte(BK3_A1, 0x0A); // for SECAM input
#else
mstWriteByte(BK3_40_TIMDETCFGA, mstReadByte(BK3_40_TIMDETCFGA) & ~_BIT5);
mstWriteByte(BK3_4C_DEGDETCFG, 0x20);
// mstWriteByte(BK3_65_REG_SAT, 0x80); // jordan0609
#endif
mstWriteByte(GEN_00_REGBK, REGBANKSCALER); // select register bank scaler
mstWriteByte(BK0_04_ISCTRL, 0x01);
mstResetVedioDecoder(); // Reset vedio decoder
#if USE_ALLMACEOSD
mstSetMACE(1);
#else
mstSetMACE(Display.ucMACE);
#endif //USE_ALLMACEOSD
mstSetContrast(Display.ucVedioContrast);
break;
case SVIDEO2:
#if RS232DBG
sysWriteString("SVIDEO 2 IN \x0d\x0a");
#endif // RS232DBG
mstWriteDataTable(tSyncCVBSTable);
mstWriteByte(GEN_00_REGBK, REGBANKADC);
mstWriteByte(BK1_18_CALEN, 0x00); // Disable YCbCr/YPbPr whitw balance
mstWriteByte(BK1_2F_ADC_MUX, 0x18);
mstWriteByte(GEN_00_REGBK, REGBANKVFE);
#if (MARIA_TYPE_SEL == MARIA_2)
mstWriteByte(BK2_1A_SVD_EN, 0xC0); // SVD_EN[7] (CVBS)
#else
mstWriteByte(BK2_1A_SVD_EN, 0x07); // SVD_EN[7] (CVBS)
#endif
#if (!DEMODULELATOR_MODE && FSC_8X && (MARIA_TYPE_SEL == MARIA_1))
mstWriteByte(BK2_2D_VDFD_CTRL3, 0x82);
#endif
#if (MARIA_TYPE_SEL == MARIA_1)
mstWriteByte(BK2_69_SRC_CTRL1, 0x04);
#endif
mstWriteByte(GEN_00_REGBK, REGBANKVCF); // select register bank scaler
#if DEMODULELATOR_MODE
mstWriteByte(BK3_11_COMBCFGB, 0x20);
#endif
#if (MARIA_TYPE_SEL == MARIA_2)
mstWriteByte(BK3_A1, 0x0A); // for SECAM input
#else
mstWriteByte(BK3_40_TIMDETCFGA, mstReadByte(BK3_40_TIMDETCFGA) & ~_BIT5);
mstWriteByte(BK3_4C_DEGDETCFG, 0x20);
// mstWriteByte(BK3_65_REG_SAT, 0x80); // jordan0609
#endif
mstWriteByte(GEN_00_REGBK, REGBANKSCALER); // select register bank scaler
mstWriteByte(BK0_04_ISCTRL, 0x01);
mstResetVedioDecoder(); // Reset vedio decoder
#if USE_ALLMACEOSD
mstSetMACE(1);
#else
mstSetMACE(Display.ucMACE);
#endif //USE_ALLMACEOSD
mstSetContrast(Display.ucVedioContrast);
break;
case VGA:
#if RS232DBG
sysWriteString("VGA IN \x0d\x0a");
#endif // RS232DBG
mstWriteDataTable(tSyncRGBTable);
mstWriteByte(GEN_00_REGBK, REGBANKADC);
mstWriteByte(BK1_2F_ADC_MUX, 0x20);
mstWriteByte(BK1_18_CALEN, 0xD8); // seven 051018 Disable YCbCr/YPbPr whitw balance
mstWriteByte(GEN_00_REGBK, REGBANKVFE);
mstWriteByte(BK2_1A_SVD_EN, 0x00);
mstWriteByte(GEN_00_REGBK, REGBANKVCF); // select register bank scaler
#if DEMODULELATOR_MODE
mstWriteByte(BK3_11_COMBCFGB, 0x00);
#endif
mstSetMACE(0);
#if((MARIA_TYPE_SEL == MARIA_2) && ENABLE_VD_DSP)
g_bEnableVDDSP = 0;
VD_DSP_Ctl(FALSE);
#endif
mstSetContrast(Display.ucPcContrast);
mstSetVGAGainOffset();
break;
case YPBPR:
#if RS232DBG
sysWriteString("YPbPr IN \x0d\x0a");
#endif // RS232DBG
mstWriteDataTable(tSyncYCbCrTable);
mstWriteByte(GEN_00_REGBK, REGBANKADC);
mstWriteByte(BK1_2F_ADC_MUX, 0x28); // Select YCbCr/YPbPr input
mstWriteByte(BK1_18_CALEN, 0x18); // Enable YCbCr/YPbPr whitw balance
mstWriteByte(GEN_00_REGBK, REGBANKVFE);
mstWriteByte(BK2_1A_SVD_EN, 0x00);
mstWriteByte(GEN_00_REGBK, REGBANKVCF); // select register bank scaler
#if DEMODULELATOR_MODE
mstWriteByte(BK3_11_COMBCFGB, 0x00);
#endif
mstWriteByte(GEN_00_REGBK, REGBANKSCALER);
#if USE_ALLMACEOSD
mstSetMACE(1);
#else
mstSetMACE(Display.ucMACE);
#endif //USE_ALLMACEOSD
#if((MARIA_TYPE_SEL == MARIA_2) && ENABLE_VD_DSP)
g_bEnableVDDSP = 0;
VD_DSP_Ctl(FALSE);
#endif
mstSetContrast(Display.ucVedioContrast);
mstSetYPbPrGainOffset();
break;
case CCIR656:
#if RS232DBG
sysWriteString("CCIR656 IN \x0d\x0a");
#endif // RS232DBG
mstWriteDataTable(tSyncCCIRTable);
mstWriteByte(GEN_00_REGBK, REGBANKADC);
mstWriteByte(BK1_18_CALEN, 0x00); // Disable YCbCr/YPbPr whitw balance
mstWriteByte(GEN_00_REGBK, REGBANKSCALER);
mstWriteByte(BK0_E2_SWRST0, 0x20); // Reset Digital input port
miscDelay1ms(20);
mstWriteByte(BK0_E2_SWRST0, 0x00);
#if USE_ALLMACEOSD
mstSetMACE(1);
#else
mstSetMACE(Display.ucMACE);
#endif //USE_ALLMACEOSD
#if((MARIA_TYPE_SEL == MARIA_2) && ENABLE_VD_DSP)
g_bEnableVDDSP = 0;
VD_DSP_Ctl(FALSE);
#endif
mstSetContrast(Display.ucVedioContrast);
break;
default:
break;
}
mstWriteByte(BK0_27_OPL_SET2, mstReadByte(BK0_27_OPL_SET2)); // For short line tune
g_ucSystemFlag |= INPUT_TIMING_CHANGE_FLAG;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -