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

📄 mstar.c

📁 主要用于液晶电视解码,内置51单片机,全部代码用C编写,编译环境为KEILC
💻 C
📖 第 1 页 / 共 4 页
字号:
#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 + -