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

📄 ms_func.c

📁 MST720-DEMO程序
💻 C
📖 第 1 页 / 共 3 页
字号:
/******************************************************************************
 Copyright (c) 2005 MStar Semiconductor, Inc.
 All rights reserved.

 [Module Name]: Ms_Func.c
 [Date]:	17-Feb-2005
 [Comment]:
   For MST IC functions.
 [Reversion History]:
*******************************************************************************/

#define _MSFUNC_C_
/********************
* INCLUDE FILES     *
*********************/
#include "Project.h"
#include "TypeDef.h"
#include "Ms7X_reg.h"
#include "Global.h"
#include "Debug.h"
#include "Ms_Rwreg.h"
#include "Misc.h"
#include "Sync.h"
#include "Ms_Func.h"
#include "OSDMenu.h"
#include "OSDFunc.h"
#include "Mcu.h"
#include "I2C.h"
#include "msACE.h"
#include "PANEL.h"
#if ((MARIA_TYPE_SEL == MARIA_2) && ENABLE_VD_DSP)
#include "Maria2_dsp_lib.h"
#endif	// ENABLE_VD_DSP


/**********************
* FUNCTION PROTOTYPES *
***********************/
void mstEnableMute(void)
{
	mstWriteByte(GEN_00_REGBK, REGBANKSCALER);
	// Set frame color to BLUE (20050609)
	mstWriteByte(BK0_5C_FRAME_COLOR_1, 0x3F);
	mstWriteByte(BK0_5D_FRAME_COLOR_2, 0x00);
	// Enable free-run mode
	mstWriteByte(BK0_02_ISELECT, mstReadByte(BK0_02_ISELECT)|NIS_B);
	// Set Display CLK to default

	// Set Display HTotal and VTotal to default
	//mstWriteWord(BK0_4F_VDTOT_H, PANEL_VTOTAL);
	mstWriteWord(BK0_55_HDTOT_H, PANEL_HTOTAL-1);	//BK0_54_HDTOT_L, BK0_55_HDTOT_H
}

void mstDisableMute(void)
{
	mstWriteByte(GEN_00_REGBK, REGBANKSCALER);
	// Disable free-run mode
	mstWriteByte(BK0_02_ISELECT, mstReadByte(BK0_02_ISELECT) & ~NIS_B);
}

#if SSC_ENABLE
void mstEnableSSC(void)
{
	// toggle BK0_E2[3] (Reset output)
	mstWriteByte(GEN_00_REGBK, REGBANKSCALER);
	mstWriteByte(BK0_E2_SWRST0, _BIT3);
	miscDelay1ms(20);
	mstWriteByte(BK0_E2_SWRST0, 0x00);

}
#endif	// SSC_ENABLE

void mstResetVedioDecoder(void)
{
	mstWriteByte(GEN_00_REGBK, REGBANKVFE);
	mstWriteByte(BK2_14_SOFT_RST, 0x90);
	miscDelay1ms(2);
	mstWriteByte(BK2_14_SOFT_RST, 0x10);
	mstWriteByte(GEN_00_REGBK, REGBANKSCALER);

#if((MARIA_TYPE_SEL == MARIA_2) && ENABLE_VD_DSP)
	VD_DSP_Ctl(TRUE);
	g_bEnableVDDSP = 1;
	miscDelay1ms(50);
#endif
}

void mstPowerManagement(BYTE status)
{
	switch (status)
	{
		
		case PM_CVBS:
			mstWriteByte(GEN_00_REGBK, REGBANKADC);	// switch to Bank 1
			
		#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_31, 0x20);
			mstWriteByte(BK1_32, 0x34);
		#else
			mstWriteByte(BK1_31, 0x24);
			mstWriteByte(BK1_32, 0x76);
		#endif
			mstWriteByte(GEN_00_REGBK, REGBANKSCALER);	// switch to Bank 0
			mstWriteByte(BK0_E0_PDMD0, 0x80);
			mstWriteByte(BK0_E1_PDMD1, 0x18);
			break;

		case PM_SVIDEO:
			mstWriteByte(GEN_00_REGBK, REGBANKADC);	// switch to Bank 1
			mstWriteByte(BK1_31, 0x20);
			mstWriteByte(BK1_32, 0x34);
			mstWriteByte(GEN_00_REGBK, REGBANKSCALER);	// switch to Bank 0
			mstWriteByte(BK0_E0_PDMD0, 0x90);
			mstWriteByte(BK0_E1_PDMD1, 0x18);
			break;

		case PM_YCbCr:
			mstWriteByte(GEN_00_REGBK, REGBANKADC);	// switch to Bank 1
			mstWriteByte(BK1_31, 0x00);
			mstWriteByte(BK1_32, 0x04);
			mstWriteByte(GEN_00_REGBK, REGBANKSCALER);	// switch to Bank 0
			mstWriteByte(BK0_E0_PDMD0, 0xB0);
			mstWriteByte(BK0_E1_PDMD1, 0x11);
		#if 0 //(MARIA_TYPE_SEL == MARIA_2)
			mstWriteByte(BK0_E3_SWRST1, 0x80);
			miscDelay1ms(10);
			mstWriteByte(BK0_E3_SWRST1, 0x00);
		#endif
			break;

		case PM_VGA:
			mstWriteByte(GEN_00_REGBK, REGBANKADC);	// switch to Bank 1
			mstWriteByte(BK1_31, 0x00);
			mstWriteByte(BK1_32, 0x04);
			mstWriteByte(GEN_00_REGBK, REGBANKSCALER);	// switch to Bank 0
			mstWriteByte(BK0_E0_PDMD0, 0xB0);
			mstWriteByte(BK0_E1_PDMD1, 0x11);
			break;

		case PM_CCIR656:
			mstWriteByte(GEN_00_REGBK, REGBANKADC);	// switch to Bank 1
			mstWriteByte(BK1_31, 0x3E);
			mstWriteByte(BK1_32, 0xFF);
			mstWriteByte(GEN_00_REGBK, REGBANKSCALER);	// switch to Bank 0
			mstWriteByte(BK0_E0_PDMD0, 0xB0);
			mstWriteByte(BK0_E1_PDMD1, 0x19);
			break;

		case PM_REG_WRITE_ENABLE:
			mstWriteByte(GEN_00_REGBK, REGBANKSCALER);	// switch to Bank 0
			mstWriteByte(BK0_E1_PDMD1, (mstReadByte(BK0_E1_PDMD1) & ~BIUCLK_GAT_B));
			break;

		case PM_REG_WRITE_DISABLE:
			mstWriteByte(GEN_00_REGBK, REGBANKSCALER);	// switch to Bank 0
			mstWriteByte(BK0_E1_PDMD1, (mstReadByte(BK0_E1_PDMD1) | BIUCLK_GAT_B));
			break;

		case PM_OSD_TURN_ON:
			mstWriteByte(GEN_00_REGBK, REGBANKSCALER);	// switch to Bank 0
			mstWriteByte(BK0_E1_PDMD1, (mstReadByte(BK0_E1_PDMD1) & ~OSDCLK_GAT_B));
			break;

		case PM_OSD_TURN_OFF:
			mstWriteByte(GEN_00_REGBK, REGBANKSCALER);	// switch to Bank 0
			mstWriteByte(BK0_E1_PDMD1, (mstReadByte(BK0_E1_PDMD1) | OSDCLK_GAT_B));
			break;


		case PM_POWER_OFF:
			mstWriteByte(GEN_00_REGBK, REGBANKADC);	// switch to Bank 1
			mstWriteByte(BK1_31, 0x7F);
			mstWriteByte(BK1_32, 0xFF);
			mstWriteByte(BK1_45, 0x01);
			mstWriteByte(BK1_A9_PD_VDAC, 0x0F);
		#if !PANEL_ANALOG_TCON
			mstWriteByte(BK1_4C, 0x5F);
		#endif
			mstWriteByte(GEN_00_REGBK, REGBANKSCALER);	// switch to Bank 0
			mstWriteByte(BK0_E0_PDMD0, 0xB0);
			mstWriteByte(BK0_E1_PDMD1, 0x80);
			mstWriteByte(BK0_E1_PDMD1, 0xFF);

		#if (MARIA_TYPE_SEL == MARIA_2 && PANEL_LVDS)
			mstWriteByte(GEN_00_REGBK, REGBANKLVDS_CCFL);	// switch to Bank 4
			mstWriteByte(BK4_1E_MOD_CTRL, 0x04);
			mstWriteByte(GEN_00_REGBK, REGBANKADC);	// switch to Bank 1
			mstWriteByte(BK1_AC_EN_CDAC, 0x00);
			mstWriteByte(GEN_00_REGBK, REGBANKSCALER);	// switch to Bank 0
		#endif
		
			break;

		case PM_POWER_ON:
			mstWriteByte(GEN_00_REGBK, REGBANKSCALER);	// switch to Bank 0
			mstWriteByte(BK0_E1_PDMD1, 0x00);
			mstWriteByte(BK0_E0_PDMD0, 0x00);
			miscDelay1ms(50);
			mstWriteByte(GEN_00_REGBK, REGBANKADC);	// switch to Bank 1
		#if PANEL_ANALOG_TCON
			//mstWriteByte(BK1_45, 0x00);
			mstWriteByte(BK1_A9_PD_VDAC, 0x00);
		#else
			mstWriteByte(BK1_4C, 0x5F);
		#endif
			mstWriteByte(BK1_31, 0x00);
			mstWriteByte(BK1_32, 0x00);
		
		#if (MARIA_TYPE_SEL == MARIA_2 && PANEL_LVDS)
			mstWriteByte(GEN_00_REGBK, REGBANKLVDS_CCFL);	// switch to Bank 4
			mstWriteByte(BK4_1E_MOD_CTRL, 0x02);
			mstWriteByte(GEN_00_REGBK, REGBANKADC); // switch to Bank 1
			mstWriteByte(BK1_AC_EN_CDAC, 0x01);
		#endif
			miscDelay1ms(50);
			mstWriteByte(GEN_00_REGBK, REGBANKSCALER);	// switch to Bank 0
			//mstWriteByte(BK0_E1_PDMD1, 0x00);
			break;

	}
	miscDelay1ms(10);

}

#if VIDEO_NON_LINEAR_ADJ
BYTE mstNonLinearCalculate(NonLinearCurveType NoLinear,BYTE AdjustValue)
{
	BYTE rValue,ucXVStart,ucXVEnd,ucXStar,ucXEnd,ucStartPoint;
	WORD wDistance;
	BYTE temData = AdjustValue;
	
	if (AdjustValue < NON_LINEAR_POINT_X1)
	{
		ucXVStart = NoLinear.X0;
		ucXVEnd   = NoLinear.X1;
		ucXStar   = NON_LINEAR_POINT_X0;
		ucXEnd    = NON_LINEAR_POINT_X1;
	}
	else if (AdjustValue < NON_LINEAR_POINT_X2)
	{
		ucXVStart = NoLinear.X1;
		ucXVEnd   = NoLinear.X2;
		ucXStar   = NON_LINEAR_POINT_X1;
		ucXEnd    = NON_LINEAR_POINT_X2;
	}
	else if (AdjustValue < NON_LINEAR_POINT_X3)
	{
		ucXVStart = NoLinear.X2;
		ucXVEnd   = NoLinear.X3;
		ucXStar   = NON_LINEAR_POINT_X2;
		ucXEnd    = NON_LINEAR_POINT_X3;
	}
	else
	{
		ucXVStart = NoLinear.X3;
		ucXVEnd   = NoLinear.X4;
		ucXStar   = NON_LINEAR_POINT_X3;
		ucXEnd    = NON_LINEAR_POINT_X4;
	}

	if (ucXVEnd > ucXVStart)
	{
		wDistance = ucXVEnd - ucXVStart;
		ucStartPoint = ucXVStart;
		temData  = AdjustValue - ucXStar;
	}
	else
	{
		wDistance = ucXVStart - ucXVEnd;
		ucStartPoint = ucXVEnd;
		temData  = ucXEnd - AdjustValue;
	}
	
	rValue = ((WORD)wDistance*temData/(ucXEnd - ucXStar)) + ucStartPoint;
		
	return rValue;
}

void mstInitialConBriNLCCurve(void)
{
	g_NLCVideoContrast.X0 = INIT_VIDEO_CONTRAST_X0;
	g_NLCVideoContrast.X1 = INIT_VIDEO_CONTRAST_X1;
	g_NLCVideoContrast.X2 = INIT_VIDEO_CONTRAST_X2;
	g_NLCVideoContrast.X3 = INIT_VIDEO_CONTRAST_X3;
	g_NLCVideoContrast.X4 = INIT_VIDEO_CONTRAST_X4;

	g_NLCVideoBrightness.X0 = INIT_VIDEO_BRIGHTNESS_X0;
	g_NLCVideoBrightness.X1 = INIT_VIDEO_BRIGHTNESS_X1;
	g_NLCVideoBrightness.X2 = INIT_VIDEO_BRIGHTNESS_X2;
	g_NLCVideoBrightness.X3 = INIT_VIDEO_BRIGHTNESS_X3;
	g_NLCVideoBrightness.X4 = INIT_VIDEO_BRIGHTNESS_X4;

	g_NLCVideoSaturation.X0 = INIT_VIDEO_SATURATION_X0;
	g_NLCVideoSaturation.X1 = INIT_VIDEO_SATURATION_X1;
	g_NLCVideoSaturation.X2 = INIT_VIDEO_SATURATION_X2;
	g_NLCVideoSaturation.X3 = INIT_VIDEO_SATURATION_X3;
	g_NLCVideoSaturation.X4 = INIT_VIDEO_SATURATION_X4;
}

#endif	// VIDEO_NON_LINEAR_ADJ

void mstSetContrast(BYTE ConValue)
{
	BYTE ucTemp; 
	
	mstWriteByte(GEN_00_REGBK, REGBANKSCALER);	// select register bank scaler
	if (tOSDSourcSELSequence[Display.ucSourceSEL] == VGA)
	{

		ucTemp = 0x80 + ((SCHAR)(ConValue - DEF_CONTRAST));
		msAdjustPCContrast(ucTemp);

	}
	else
	{
#if VIDEO_NON_LINEAR_ADJ
		ucTemp=mstNonLinearCalculate(g_NLCVideoContrast,ConValue);
#else
		ucTemp = _COLOR_DEF_CONTRAST+((SCHAR)(ConValue - DEF_CONTRAST));
#endif	// VIDEO_NON_LINEAR_ADJ
		msAdjustVideoContrast(ucTemp);
	}
	
}


void msSetCCFLBrightness(void)
{
#if ENABLE_CCFL_FUNCTION
	mstWriteByte(GEN_00_REGBK,REGBANKLVDS_CCFL);	
	mstWriteByte(BK4_6B, 0x80);
	
#if CCFL_BURST_MODE
	mstWriteByte(BK4_91, 0x00);
	mstWriteByte(BK4_90, 0xae);//tony for SZ demo 0xAE);//0x90
#else
	mstWriteByte(BK4_82, 0xAA);
#endif

	mstWriteByte(BK4_6B, 0x00);
	mstWriteByte(GEN_00_REGBK, REGBANKSCALER);
#endif	
	;
}

void mstSetBrightness(BYTE BriValue)
{
	BYTE ucTemp;
	
#if VIDEO_NON_LINEAR_ADJ
	ucTemp=mstNonLinearCalculate(g_NLCVideoBrightness,BriValue);	
#else
	if(BriValue >= DEF_BRIGHTNESS)
		ucTemp = 0x80 + (BriValue - DEF_BRIGHTNESS);
	else
		ucTemp = 0x80 - (DEF_BRIGHTNESS - BriValue);

#endif	// VIDEO_NON_LINEAR_ADJ
	mstWriteByte(GEN_00_REGBK, REGBANKSCALER);
	mstWriteByte(BK0_59_BRI_R, ucTemp-8);
	mstWriteByte(BK0_5A_BRI_G, ucTemp-8);
	mstWriteByte(BK0_5B_BRI_B, ucTemp-8);
	mstWriteByte(BK0_58_BRIGHTNESS_EN, 0x01);
}

void mstSetHue(BYTE HueValue)
{
	BYTE ucTemp;
	
	if (tOSDSourcSELSequence[Display.ucSourceSEL] != VGA)
	{
		if (HueValue >= 50)
			ucTemp = ((WORD)(100 -_COLOR_DEF_HUE)*(HueValue-DEF_HUE)/(100-DEF_HUE))+_COLOR_DEF_HUE;
		else
			ucTemp = (WORD)_COLOR_DEF_HUE*HueValue/DEF_HUE;
		msAdjustVideoHue(ucTemp);
	}
}

#define SAT_ACC_DOWN	30
void mstSetSaturation(BYTE SatValue)//The saturation way  is the bad.
{

#if 0
	SINT wTemp,wBurstGap;  
	
	if (tOSDSourcSELSequence[Display.ucSourceSEL] != VGA)
	{
		mstWriteByte(GEN_00_REGBK, REGBANKVCF);	// select register bank scaler
		wBurstGap = (0x38-mstReadByte(BK3_76_DET_BST_HGHT))*2;
		if (tOSDSourcSELSequence[Display.ucSourceSEL] == YPBPR)
			wBurstGap = 0;

		// Patch for saturattion low level range not enough
		if (SatValue <= SAT_ACC_DOWN)
		{
			wBurstGap *= SatValue;
			wBurstGap /= SAT_ACC_DOWN;
		}
		
#if VIDEO_NON_LINEAR_ADJ
		wTemp = mstNonLinearCalculate(g_NLCVideoSaturation,SatValue);
		wTemp += wBurstGap;
#else
		wTemp = _COLOR_DEF_SATURATION+wBurstGap+((SCHAR)(SatValue - DEF_SATURATION));
#endif
		if(wTemp>0xFF)//20050915 forte modify for changing different source
		{
			// For saturattion high level range not enough, patch BK3.65h value
			wBurstGap = (wTemp -0xFF) + _INIT_VD_SATURATION;
		#if DEMODULELATOR_MODE
			mstWriteByte(BK3_65_REG_SAT, (BYTE)wBurstGap);
		#else
			mstWriteByte(BK3_13_CBGAIN, (BYTE)wBurstGap);
			mstWriteByte(BK3_14_CRGAIN, (BYTE)wBurstGap);
		#endif // !DEMODULELATOR_MODE
			wTemp = 0xFF;
		}
		else

⌨️ 快捷键说明

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