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

📄 ms_func.c

📁 MST720-DEMO程序
💻 C
📖 第 1 页 / 共 3 页
字号:
		{
		#if DEMODULELATOR_MODE
			mstWriteByte(BK3_65_REG_SAT, _INIT_VD_SATURATION);
		#else
			mstWriteByte(BK3_13_CBGAIN, _INIT_VD_SATURATION);
			mstWriteByte(BK3_14_CRGAIN, _INIT_VD_SATURATION);
		#endif // !DEMODULELATOR_MODE
		}

		if(wTemp < 0)
			wTemp = 0;
		
		mstWriteByte(GEN_00_REGBK, REGBANKSCALER);	// select register bank scaler
		msAdjustVideoSaturation((BYTE)wTemp);
	}
#else
	SINT wTemp;
	wTemp = _COLOR_DEF_SATURATION+((SCHAR)(SatValue - DEF_SATURATION));
	msAdjustVideoSaturation((BYTE)wTemp);
#endif
}

void mstSetGamma(BYTE GammaValue)
{
	BYTE i;
	BYTE count;

	mstWriteByte(BK0_90_GAMMA_EN, (GammaValue&0x01));

	if (GammaValue&0x01)
	{
		mstWriteByte(BK0_90_GAMMA_EN,0x03);
		mstWriteByte(BK0_91_GAMMA_ADR_PORT,0x00);

		for (i=0;i<3;i++)
		{
			for(count=0;count<33;count++)
			{
				mstWriteByte(BK0_92_GAMMA_DAT_PORT,tGammaTableNormal[i][count]);
			}
		}	
	}
}

#if USE_ALLMACEOSD
void mstSetSharpness(BYTE SharpValue)
{
	BYTE ucTemp;
	
	mstWriteByte(GEN_00_REGBK, REGBANKADC);
	ucTemp = mstReadByte(BK1_78_PEAK_BAND1) & 0xC7;
	ucTemp |= ((SharpValue&0x07)<<3);
	mstWriteByte(BK1_78_PEAK_BAND1, ucTemp);
	mstWriteByte(GEN_00_REGBK, REGBANKSCALER);	

}

void mstSetDLTI(BYTE DLTIValue)
{
	BYTE ucTemp;
	
	mstWriteByte(GEN_00_REGBK, REGBANKADC);
	ucTemp = mstReadByte(BK1_7A_LTI) & 0xC7;
	ucTemp |= ((DLTIValue&0x07) << 3);
	mstWriteByte(BK1_7A_LTI, ucTemp);
	mstWriteByte(GEN_00_REGBK, REGBANKSCALER);
}

void mstSetDCTI(BYTE DCTIValue)
{
	BYTE ucTemp;
	
	mstWriteByte(GEN_00_REGBK, REGBANKADC);
	ucTemp = mstReadByte(BK1_7D_CTI) & 0xE7;
	ucTemp |= ((DCTIValue&0x03) << 3);
	mstWriteByte(BK1_7D_CTI, ucTemp);
	mstWriteByte(GEN_00_REGBK, REGBANKSCALER);
}

void mstSetBlackExtension(BYTE BEValue)
{
	BYTE ucTemp;
	
	mstWriteByte(GEN_00_REGBK, REGBANKADC);
	ucTemp = mstReadByte(BK1_7E_VIP_Y_CTRL) & 0xFE;
	ucTemp |= (BEValue&0x01) ;
	mstWriteByte(BK1_7E_VIP_Y_CTRL, ucTemp);
	mstWriteByte(GEN_00_REGBK, REGBANKSCALER);

}

void mstSetWhiteExtension(BYTE WEValue)
{
	BYTE ucTemp;
	
	mstWriteByte(GEN_00_REGBK, REGBANKADC);
	ucTemp = mstReadByte(BK1_7E_VIP_Y_CTRL) & 0xFD;
	ucTemp |= ((WEValue&0x01) << 1);
	mstWriteByte(BK1_7E_VIP_Y_CTRL, ucTemp);
	mstWriteByte(GEN_00_REGBK, REGBANKSCALER);
}

void mstSetFavorColor(BYTE FCValue)
{
	mstWriteByte(GEN_00_REGBK, REGBANKADC);
	
	if (FCValue != 0)
		mstWriteByte(BK1_76_FCC_CTRL, 0xFF);  //Forte 0x5B
	else
		mstWriteByte(BK1_76_FCC_CTRL, 0x00);
	
	mstWriteByte(GEN_00_REGBK, REGBANKSCALER);
}

#endif	//USE_ALLMACEOSD

void mstSetMACE(BYTE MACEValue)
{
	mstWriteByte(GEN_00_REGBK, REGBANKADC);
	
	if (MACEValue != 0)
	{
		mstWriteByte(BK1_76_FCC_CTRL, 0x89);		//gan	0x4f to 0x89
		mstWriteByte(BK1_77_APP_CTRL, 0x78);
		//mstWriteByte(BK1_7E_VIP_Y_CTRL, 0x00);
	}
	else
	{
		mstWriteByte(BK1_76_FCC_CTRL, 0x00);
		mstWriteByte(BK1_77_APP_CTRL, 0x00);
		//mstWriteByte(BK1_7E_VIP_Y_CTRL, 0x00);
	}
	
	mstWriteByte(GEN_00_REGBK, REGBANKSCALER);
}

void mstSetScalingMode(BYTE ucScalingMode)
{

#if (PANEL_TYPE_SEL == PNL_HITACHI26_L)
	BYTE  ucTemp;
	ucTemp = ucScalingMode;
	return;
#else

#if 0	//Not Ready
	DWORD ulV_Scaling_Factor;
	WORD  uwInput_V_Resol;
#endif
	DWORD ulH_Scaling_Factor,ulNewHsize;
	WORD  uwInput_H_Resol,uwTemp,uwCutOffNum;
	BYTE  ucLace_status;
	DWORD  ulTemp;
	BYTE  ucTemp;

	if (tOSDSourcSELSequence[Display.ucSourceSEL] == VGA)	// If VGA input HZOOM by table
		return;

	mstWriteByte(GEN_00_REGBK, REGBANKSCALER);	//Switch to Bank 0
	
	if( g_ucSyncStatus & INTERLANCE_MODE_B)
		ucLace_status = 2;//Interlace
	else
		ucLace_status = 1;//Progracive
	
	//Cal H scaling factor	
	uwInput_H_Resol = mstReadWord(BK0_0C_SPRHDC_H);//Get Input H resolution
	
	ulH_Scaling_Factor = (DWORD)PANEL_WIDTH <<20 ;// The max available panel H_resolution is 0xFFF(4095).
	
	uwCutOffNum =(uwInput_H_Resol*SCAL_CUTOFF_H_PER)/SCAL_CUTOFF_RESOL;

	mstWriteWord(BK0_08_SPRHST_H, g_uwHStar + uwCutOffNum/2);//Capture H Start //BK0_07_SPRHST_L,BK0_08_SPRHST_H
	
	if(ucScalingMode == FULL)		// 16:9
	{
		mstWriteByte(BK0_38_NLDTI, 0x00);				// Disable Nonlinear scaling function
		ulH_Scaling_Factor /= uwInput_H_Resol- uwCutOffNum;
		
		//MsSetScalingHImage();
		
		mstWriteWord(BK0_49_SIHST_H,PANEL_HSTART);// Start	//BK0_48_SIHST_L, BK0_49_SIHST_H
		mstWriteWord(BK0_4D_SIHEND_H,PANEL_HSTART+PANEL_WIDTH);// End //BK0_4C_SIHEND_L, BK0_4D_SIHEND_H
//1 robbie fixed the parameter  only for the panasonic panel   2006-01-12
		#if PANEL_TYPE_SEL==PNL_LTA07_AT
		mstWriteWord(BK0_4D_SIHEND_H,0x02c6);// End //BK0_4C_SIHEND_L, BK0_4D_SIHEND_H
		#endif//robbie added only for panasonic 2006-01-12
		ulH_Scaling_Factor += 0xC00;//0xc00 get from fine tune
	
	}
	else if(ucScalingMode == LETTERBOX)					// 4:3
	{
		mstWriteByte(BK0_38_NLDTI, 0x00);				// Disable Nonlinear scaling function
		
		// Get the new H image size
		//ulNewHsize=(((PANEL_HEIGHT*Dot_H)/Dot_W*4)/3)/3;//X*4/3=>4:3,X/3=>3dot in 1 pixel
		ulNewHsize=PANEL_DOT_HEIGHT;//X*4/3=>4:3,X/3=>3dot in 1 pixel
		ulNewHsize=ulNewHsize*PANEL_HEIGHT;
		ulNewHsize=ulNewHsize/PANEL_DOT_WIDTH;
		ulNewHsize=(ulNewHsize*SCAL_RATIO_NUMERATOR)/(SCAL_RATIO_DENOMINATOR*3);
		
		//New start point
		uwTemp = PANEL_HSTART + (PANEL_WIDTH - ulNewHsize )/2;
		mstWriteWord(BK0_49_SIHST_H,uwTemp);//new Start	//BK0_48_SIHST_L, BK0_49_SIHST_H
		
		// New end point
		mstWriteWord(BK0_4D_SIHEND_H,uwTemp+ulNewHsize);//new End //BK0_4C_SIHEND_L, BK0_4D_SIHEND_H
		
		// Get new scaling factor
		ulH_Scaling_Factor = (DWORD)ulNewHsize <<20 ;
		ulTemp = (DWORD)uwInput_H_Resol*(SCAL_CUTOFF_RESOL - SCAL_CUTOFF_H_PER);
		ulH_Scaling_Factor /= (ulTemp/SCAL_CUTOFF_RESOL);
		
		
		// Mask the front and back block
		mstWriteWord(BK0_5D_FRAME_COLOR_2,0);//BK0_5C_FRAME_COLOR_1, BK0_5D_FRAME_COLOR_2

		ulH_Scaling_Factor += 0xC00;//0xc00 get from fine tune
	}
	else if(ucScalingMode == PARANOMA)					// Nonlinear 1 // Patten,Widerscreen Enhanced Circle Hatch 100 IRE
	{
		// New H. scaling factor
		ulH_Scaling_Factor /= SCAL_NON_LINEAR_RESOL;
		ulH_Scaling_Factor *= SCAL_NON_LINEAR_RATIO;
			
		ulH_Scaling_Factor /= uwInput_H_Resol;			//F0
		ulH_Scaling_Factor += 0x1a00;
		// Size of the count0,count1 and count2 	
		uwTemp = uwInput_H_Resol /10 ;
		ucTemp = (BYTE)uwTemp/2;
		mstWriteByte(BK0_3B_NLDC0, ucTemp*2);				// Counter0
		mstWriteByte(BK0_3C_NLDC1, ucTemp*2); 			// Counter1
		mstWriteByte(BK0_3D_NLDC2, (uwInput_H_Resol/4)-ucTemp*4 );	// Counter2
		// Enable nonlinear scaling,C0:C1:C2=2:2:1
		//Offset=5*(Pan_H/In_H)*((1/2)-(a/2b))
		ulTemp=5*PANEL_WIDTH;
		ulTemp *= (SCAL_NON_LINEAR_RESOL - SCAL_NON_LINEAR_RATIO)>>1;
		ulTemp /= SCAL_NON_LINEAR_RESOL;
		ulTemp = (ulTemp<<7) / uwInput_H_Resol;
		mstWriteByte(BK0_38_NLDTI, 0x80 + (BYTE)ulTemp);	//[7]Nonlinear enable/disable.[6:0]Offset Initial 
		
		// To get Delta
		ulTemp = ulTemp<< 8;
		ulTemp /= (4*2*ucTemp) ;
		
		mstWriteByte(BK0_39_NLDT0, (BYTE)ulTemp);		//Deltar0.[7]sign of the offset initial value,[6:0]Delta value
		mstWriteByte(BK0_3A_NLDT1, (BYTE)ulTemp);		//Delta1
		
		// Set Display H image size End and Start
		mstWriteWord(BK0_49_SIHST_H,PANEL_HSTART);		//Start //BK0_48_SIHST_L, BK0_49_SIHST_H
		mstWriteWord(BK0_4D_SIHEND_H,PANEL_HSTART+PANEL_WIDTH);//End //BK0_4C_SIHEND_L, BK0_4D_SIHEND_H
		
		ulH_Scaling_Factor += 0x800;//0xc00 get from fine tune

	}
	if((uwInput_H_Resol-uwCutOffNum) > PANEL_WIDTH)
	{
		sysWriteString("H-Scaling Rate:");
		sysWriteUartHex4((WORD)(ulH_Scaling_Factor>>16),0);
		sysWriteUartHex4((WORD)(ulH_Scaling_Factor),0);
		sysWriteString(tChangeLine);

	#if 0 //(MARIA_TYPE_SEL == MARIA_2)
		mstWriteWord(BK0_31_SRH_M,(unsigned int)(ulH_Scaling_Factor) );//BK0_30_SRH_L,BK0_31_SRH_M
		mstWriteByte(BK0_32_SRH_H,(unsigned char)((ulH_Scaling_Factor&0x0F0000)>>16)+0xC0);
	#else
		mstWriteWord(BK0_31_SRH_M,(unsigned int)(ulH_Scaling_Factor&0xFFF000) );//BK0_30_SRH_L,BK0_31_SRH_M
		mstWriteByte(BK0_32_SRH_H,(unsigned char)((ulH_Scaling_Factor&0x0F0000)>>16)+0xC0);
	#endif
	}
	else
	{
		mstWriteWord(BK0_08_SPRHST_H, g_uwHStar);
		mstWriteByte(BK0_32_SRH_H, 0x00);
	}
		
	
	
#if 0	//Not Ready
	//Cal V scaling factor		
	uwInput_V_Resol = mstReadWord(BK0_0A_SPRVDC_H)-SCAL_CUTOFF_V_NUM;//Get Input V resolution	
	
	if((uwInput_V_Resol / PANEL_HEIGHT)>1)
	{
		ulV_Scaling_Factor = (DWORD)uwInput_V_Resol  <<20; 			// The max available panel H_resolution is 0xFFF(4095).
		ulV_Scaling_Factor /= PANEL_HEIGHT*ucLace_status;//*2=>interlace
		
		mstWriteWord(BK0_34_SRV_M,(unsigned int)ulV_Scaling_Factor);
		*((BYTE pdata*) BK0_35_SRV_H) = (unsigned char)((ulV_Scaling_Factor&0x3F0000)>>16)+0x80;
	}
	else
		*((BYTE pdata*) BK0_35_SRV_H) = 0x00;

#endif
		//1 robbie fixed the parameter  only for the panasonic panel   2006-01-12
	#if PANEL_TYPE_SEL==PNL_LTA07_AT
		if((g_ucSyncStatus & PAL_MODE_B) != 0)
		{
		mstWriteWord(BK0_31_SRH_M,0x6000);//
		mstWriteByte(BK0_32_SRH_H,0xCB);
		}//
	#endif//robbie added only for panasonic 2006-01-12
#endif
}

/*void mstSetScalingHImage(void)
{
	//mstWriteByte(BK0_48_SIHST_L, IMAGE_HSTAR);			//Start
	mstWriteByte(BK0_48_SIHST_L, PANEL_HSTART);				// Start
	mstWriteByte(BK0_49_SIHST_H, 0);
	mstWriteByte(BK0_4C_SIHEND_L, PANEL_HSTART+PANEL_WIDTH);		// End
	mstWriteByte(BK0_4D_SIHEND_H, ((PANEL_HSTART+PANEL_WIDTH)&0xFF00)>>8);
}*/
	
#if USE_ROTATE_OSD
void mstSetDisplayRotate(BYTE ucStatus)
{
	BYTE ucRotateStatus;
	
	ucRotateStatus = SET_PTC_MODE2;
	if(ucStatus != 0)
#if (PANEL_TYPE_SEL == PNL_LG07_AT)
		ucRotateStatus ^= 0x0B;
#else
		ucRotateStatus ^= 0x0F;
#endif	
	mstWriteByte(GEN_00_REGBK, REGBANKADC);
	mstWriteByte(BK1_D1_PTC_MODE2, ucRotateStatus);
	mstWriteByte(GEN_00_REGBK, REGBANKSCALER);
}
#endif	// USE_ROTATE_OSD

void mstSetAdcRedGain(BYTE GainValue)
{
	mstWriteByte(GEN_00_REGBK, REGBANKADC);
	mstWriteByte(BK1_04_RGAIN_ADC, GainValue);
	mstWriteByte(GEN_00_REGBK, REGBANKSCALER);
}

void mstSetAdcGreenGain(BYTE GainValue)
{
	mstWriteByte(GEN_00_REGBK, REGBANKADC);
	mstWriteByte(BK1_05_GGAIN_ADC, GainValue);
	mstWriteByte(GEN_00_REGBK, REGBANKSCALER);
}

void mstSetAdcBlueGain(BYTE GainValue)
{
	mstWriteByte(GEN_00_REGBK, REGBANKADC);
	mstWriteByte(BK1_06_BGAIN_ADC, GainValue);
	mstWriteByte(GEN_00_REGBK, REGBANKSCALER);
}

void mstSetAdcRedOffset(BYTE OffsetValue)
{
	mstWriteByte(GEN_00_REGBK, REGBANKADC);
	mstWriteByte(BK1_07_ROFFS_ADC, OffsetValue);
	mstWriteByte(GEN_00_REGBK, REGBANKSCALER);
}

void mstSetAdcGreenOffset(BYTE OffsetValue)
{
	mstWriteByte(GEN_00_REGBK, REGBANKADC);
	mstWriteByte(BK1_08_GOFFS_ADC, OffsetValue);
	mstWriteByte(GEN_00_REGBK, REGBANKSCALER);
}

void mstSetAdcBlueOffset(BYTE OffsetValue)
{
	mstWriteByte(GEN_00_REGBK, REGBANKADC);
	mstWriteByte(BK1_09_BOFFS_ADC, OffsetValue);
	mstWriteByte(GEN_00_REGBK, REGBANKSCALER);
}

void mstSetVcomDC( BYTE DCValue)
{
	mstWriteByte(GEN_00_REGBK, REGBANKADC);
	mstWriteByte(BK1_43_BVOM_DC, DCValue);
	mstWriteByte(GEN_00_REGBK, REGBANKSCALER);
}

void mstSetVcomAC( BYTE ACValue)
{
	mstWriteByte(GEN_00_REGBK, REGBANKADC);
	mstWriteByte(BK1_44_BVOM_OUT, ACValue);
	mstWriteByte(GEN_00_REGBK, REGBANKSCALER);
}

void mstSetSSCStep(BYTE StepValue)
{
	mstWriteByte(BK0_28_OPL_STEP0, StepValue);
}

void mstSetSSCSpan(BYTE SpanValue)
{
	mstWriteByte(BK0_2A_OPL_SPAN0, SpanValue);
}

void mstSetVGAGainOffset(void)
{
	mstSetAdcRedGain(Display.ucVgaRedGain);
	mstSetAdcGreenGain(Display.ucVgaGreenGain);
	mstSetAdcBlueGain(Display.ucVgaBlueGain);
	mstSetAdcRedOffset(Display.ucVgaRedOffset);
	mstSetAdcGreenOffset(Display.ucVgaGreenOffset);
	mstSetAdcBlueOffset(Display.ucVgaBlueOffset);

}

void mstSetYPbPrGainOffset(void)
{
	mstSetAdcRedGain(Display.ucYPbPrPrGain);
	mstSetAdcGreenGain(Display.ucYPbPrYGain);
	mstSetAdcBlueGain(Display.ucYPbPrPbGain);
	mstSetAdcRedOffset(Display.ucYPbPrPrOffset);
	mstSetAdcGreenOffset(Display.ucYPbPrYOffset);
	mstSetAdcBlueOffset(Display.ucYPbPrPbOffset);
}

⌨️ 快捷键说明

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