📄 mstar.c
字号:
#define EnableUseGammaTbl
#define _MSTAR_C_
#define _EnableFCC_
#define _VDCaptureSetting_
#define EnableUseModeTbl
#include <math.h>
#include "board.h"
#include "types.h"
#include "ms_reg.h"
#include "global.h"
#include "panel.h"
#include "adjust.h"
#include "ms_rwreg.h"
#include "DEBUG.h"
#include "misc.h"
#include "power.h"
#include "detect.h"
#include "msOsd.h"
#include "extlib.h"
#include "Valuetbl.h"
#include "msAce.h"
#include "userpref.h"
#include "mstar.h"
#include "DevVd.h"
#include "msVD.h"
#include "devvd_user.h"
#include "devtuner.h"
#include "Maria2_FSC_Lib.h"
#include "M2_VD_AGC_Lib.h"
#include "M2_VD_Std_Lib.h"
#if(ENABLE_VD_DSP)
#include "Maria2_dsp_lib.h"
#endif
//*******************************************************************
//
// Constant Definition
//
//*******************************************************************
//14.318 * 15 * 8 / 4 = 429.54, 429.54<<19=225202667.52, 429.54<<3=8=3436.32
#define DClkFactor 225202667ul
//*******************************************************************
//
// extern declaration
//
//*******************************************************************
//*******************************************************************
//
// local declaration
//
//*******************************************************************
#define SSCSTEP 0x119
#define SSCSPAN 0xEC
//*******************************************************************
//
//*******************************************************************
// Function Name: msInit(void)
//
// Description: Initialize mStar chip while 1st power on system
//
// Caller: msInitADC(), msInitTCON, msSetupFreeRunMode()
// msSetupInputPort() in mStar.c
// msWriteByte(), msWriteWord() in ms_rwreg.c
// msWriteDDC1(), msWriteDDC2() in ddc.c
// msInitGamma() in gamma.c
// Osd_InitOSD() in osd.c
// Callee: Init_Device() in main.c
//*******************************************************************
#ifdef EnableUseModeTbl
DynamicLoadModeTblType code tModeIndexTbl[]=
{
{
1<<Input_CVBS1|1<<Input_CVBS2|1<<Input_SVIDEO1|1<<Input_TV,
MD_720x480_60I,
tNtscModeTbl,
},
{
1<<Input_CVBS1|1<<Input_CVBS2|1<<Input_SVIDEO1|1<<Input_TV,
MD_720x576_50I,
tPalModeTbl,
},
{
1<<Input_CVBS1|1<<Input_CVBS2|1<<Input_SVIDEO1,
MD_FreeRun,
tFreeRunModeTbl,
},
{
1<<Input_TV,
MD_TVsnow,
tTVSnowModeTbl,
},
#if VGA_ENABLE
{
1<<Input_VGA,
MD_640x480_60,
t640_480_VGA_ModeTbl,
},
#ifdef D800480PANEL
{
1<<Input_VGA,
MD_640x480_72,
t640_480_VGA_72HZ_ModeTbl,
},
#endif
{
1<<Input_VGA,
MD_800x600_60,
t800_600_VGA_ModeTbl,
},
{
1<<Input_VGA,
MD_1024x768_60,
t1024_768_VGA_ModeTbl,
},
#endif
{
_END_OF_TBL_,
0,
tENDModeTbl
},
};
#endif
void msInit(void)
{
msWriteRegsTbl(tInitializeScaler);
msWriteRegsTbl(tInitializeFCC);
msWriteRegsTbl(tInitializeADC);
#if PANEL_TTL
msWriteByte(BK0_00_REGBK, REG_BANK1_ADC_ACE_MCU);
msWriteByte(BK1_C1_BND_RST, 0x21);
msWriteByte(BK1_C0_TUNE_FRAME_NO, 0x80);
msWriteByte(BK0_00_REGBK, REG_BANK_SCALER);
#endif
#ifdef P6_GPIO_Enable
msWriteBit(BK0_5E_PATTERN, _ENABLE, _BIT6); // Nelson Switch ITU656 to P6 port 2006-01-25
#endif
#ifdef P5_GPIO_Enable
msWriteBit(BK0_5E_PATTERN, _ENABLE, _BIT7);
#endif
msWriteByte(BK0_00_REGBK, REG_BANK1_ADC_ACE_MCU); // select register bank ADC
msWriteByte(BK1_0C_GCTRL, 0x02);
#if (PANEL_DIGITAL_TCON|PANEL_ANALOG_TCON)
msWriteRegsTbl(tInitializeTCON);
//VCOM SETTING
msWriteByte(BK1_43_BVOM_DC, g_VideoSetting.VcomDC);
msWriteByte(BK1_44_BVOM_OUT, g_VideoSetting.VcomAC);
#else
msWriteByte(BK1_D0_PTC_MODE1, 0x0C); // Disable TCON function
#endif
msWriteByte(BK1_4E, (msReadByte(0x4E)|_BIT0));
//msWriteByte(BK1_F4_PWM1C, 0xFF);
msWriteByte(BK1_F6_PWM1EPL, 0x00);
msWriteByte(BK1_F7_PWM1EPH, 0x01);
msWriteByte(BK1_92_SARADC_AISEL, msReadByte(BK1_92_SARADC_AISEL)|KEY_PORT);
msWriteByte(BK1_94_SAR_CH1_UPB, 0x3F);
msWriteByte(BK1_95_SAR_CH1_LOB, 0x05);
msWriteByte(BK1_96_SAR_CH2_UPB, 0x3F);
msWriteByte(BK1_97_SAR_CH2_LOB, 0x00);
msWriteByte(BK1_98_SAR_CH3_UPB, 0x3F);
msWriteByte(BK1_99_SAR_CH3_LOB, 0x00);
msWriteByte(BK1_7B_TERM_SEL, BK1_7B_TERM_SEL_VALUE);
msWriteByte(BK1_7C_CROING, BK1_7C_CROING_VALUE);
msWriteRegsTbl(tInitializeVFE);
msWriteRegsTbl(tInitializeVCE);
#if (CCFL_FUNCTION)
msWriteRegsTbl(tInitializeCCFL);
#endif
msSetupInputPort();
msWriteByte(BK0_00_REGBK, REG_BANK2_VD);
msWriteByteMask(BK2_9A_SYNC_CTRL1, 0x01, 0x01);
msWriteBit(BK2_38_VSTROBE_LIMIT, HIBYTE(INIT_MSVD_TV_BRIGHTNESS)&0x10,_BIT6);
msWriteByte(BK2_3A,LOBYTE(INIT_MSVD_TV_BRIGHTNESS));
msWriteByte(BK0_00_REGBK, REG_BANK3_COMB);
if( VD_Type == MARIA2_D )
msWriteByte(BK3_B9, 0x01);
else if( VD_Type >= MARIA2_E )
msWriteByte(BK3_B9, 0x05);
msWriteByte(BK0_00_REGBK, REG_BANK_SCALER);
msWriteByte(BK0_F8_TEST_MODE, 0);
msWriteByte(BK0_FF_BOUNDING_MISC, 0x02 );
}
void OSDGammaInit(void)
{
Osd_InitOSD();
msInitGamma(); // programming gamma table
}
//*******************************************************************
// Function Name: msSetupInputPort
//
// Decscription: setup input port registers for
// Analog/Digital/YCbCr(Video) input
//
// caller: mSar_WriteByte(), msReadByte() in ms_rwreg.c
// callee: msMonitorInputTiming() in detect.c
//*******************************************************************
#if ((MST_CHIP==MST716A)||(MST_CHIP==MST717A)||(MST_CHIP==MST726A))
void SwitchInputPort(InputPortType PortSwitch)
{
BYTE bk1_2F_value;
BYTE bk1_90_mask=0;
switch(PortSwitch)
{
case Input_TV:
bk1_2F_value=TV_RealPortSet;
break;
case Input_CVBS1:
bk1_2F_value=CVBS1_RealPortSet;
break;
case Input_CVBS2:
bk1_2F_value=CVBS2_RealPortSet;
break;
case Input_CVBS3:
bk1_2F_value=CVBS3_RealPortSet;
break;
case Input_VGA:
bk1_2F_value=VGA_RealPortSet;
break;
case Input_SVIDEO1:
default:
bk1_2F_value=SVIDEO1_RealPortSet;
break;
}
#if VGA_ENABLE
if(PortSwitch==Input_VGA)
msWriteRegsTbl(tPCFCC);
else
#endif
msWriteRegsTbl(tVideoFCC);
if(IsVideoPortInUse())
{
if(PortSwitch==Input_TV)
msWriteRegsTbl(t_TVInitializeFCC);
else
msWriteRegsTbl(t_AVInitializeFCC);
}
//if (bk1_2F_value==PORT_CVBS_SV1C)
//bk1_90_mask=_BIT3;
msWriteByte(BK0_00_REGBK, REG_BANK1_ADC_ACE_MCU);
msWriteByte(BK1_2F, bk1_2F_value);
bk1_2F_value=msReadByte(BK1_90_SARADC_CTRL);
bk1_2F_value&=~_BIT3;
msWriteByte(BK1_90_SARADC_CTRL, bk1_2F_value|bk1_90_mask);
msWriteByte(BK0_00_REGBK, REG_BANK_SCALER);
}
#elif (MST_CHIP==MST710A)
void SwitchInputPort(InputPortType PortSwitch)
{
BYTE bk1_2F_value;
BYTE bk1_90_mask=0;
switch(PortSwitch)
{
case Input_TV:
bk1_2F_value=TV_RealPortSet;
break;
case Input_CVBS1:
default:
bk1_2F_value=CVBS1_RealPortSet;
break;
}
if(IsVideoPortInUse())
{
msWriteRegsTbl(tVideoFCC); // Nelson 2006-03-25 Add
if(PortSwitch==Input_TV)
msWriteRegsTbl(t_TVInitializeFCC);
else
msWriteRegsTbl(t_AVInitializeFCC);
}
if (bk1_2F_value==PORT_CVBS_SV1C)
bk1_90_mask=_BIT3;
msWriteByte(BK0_00_REGBK, REG_BANK1_ADC_ACE_MCU);
msWriteByte(BK1_2F, bk1_2F_value);
bk1_2F_value=msReadByte(BK1_90_SARADC_CTRL);
bk1_2F_value&=~_BIT3;
msWriteByte(BK1_90_SARADC_CTRL, bk1_2F_value|bk1_90_mask);
msWriteByte(BK0_00_REGBK, REG_BANK_SCALER);
}
#elif (MST_CHIP==MST720A)
void SwitchInputPort(InputPortType PortSwitch)
{
BYTE bk1_2F_value;
BYTE bk1_90_mask=0;
switch(PortSwitch)
{
case Input_TV:
bk1_2F_value=TV_RealPortSet;
break;
case Input_CVBS1:
bk1_2F_value=CVBS1_RealPortSet;
//bk1_90_mask=_BIT3;
break;
case Input_SVIDEO1:
default:
bk1_2F_value=SVIDEO1_RealPortSet;
break;
}
if(IsVideoPortInUse())
{
msWriteRegsTbl(tVideoFCC); // Nelson 2006-03-25 Add
if(PortSwitch==Input_TV)
msWriteRegsTbl(t_TVInitializeFCC);
else
msWriteRegsTbl(t_AVInitializeFCC);
}
msWriteByte(BK0_00_REGBK, REG_BANK1_ADC_ACE_MCU);
msWriteByte(BK1_2F, bk1_2F_value);
bk1_2F_value=msReadByte(BK1_90_SARADC_CTRL);
bk1_2F_value&=~_BIT3;
msWriteByte(BK1_90_SARADC_CTRL, bk1_2F_value|bk1_90_mask);
msWriteByte(BK0_00_REGBK, REG_BANK_SCALER);
}
#endif
void SetChromaMode(void)
{
BYTE uctemp, temp2;
#if TV_ENABLE
if(IsTVInUse())
{
#if TV_SYSTEM==TV_NTSC
uctemp=CHROMA_NTSC;
#else
uctemp=((g_TVChSetting.TvCurChannelMisc&ColorSysMask)>>4)%CHROMA_NUMS;
#endif
devSetSWF(((g_TVChSetting.TvCurChannelMisc&SoundSysMask)%TV_SOUND_NUMS));
}
else
#endif
uctemp=g_VideoSetting.VideoColorSys%CHROMA_NUMS;
msWriteByte(BK0_00_REGBK, REG_BANK3_COMB);
switch (uctemp)
{
case CHROMA_SECAM:
case CHROMA_AUTO:
temp2=0;
break;
case CHROMA_PAL:
temp2=0x02;
break;
case CHROMA_NTSC:
default:
temp2=0x01;
break;
}
msWriteByteMask(BK3_1C_CTRLSWCH, temp2, 0x03);
msWriteByte(BK0_00_REGBK, REG_BANK_SCALER);
}
void msLineBufferDelayCtl( BOOL bInterlace )
{
BYTE ucTmp = 0;
bInterlace=bInterlace;
ucTmp = 0x20;
msWriteByte(BK0_0F_ASCTRL, ucTmp );
}
///////////////////////////////////////////////////////////////////////////////
// <Function>: msSetInterrupt
//
// <Description>: Set chip interrrupt.
//
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -