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

📄 sfli2310.c

📁 Fil2310.c De-interlace芯片源码
💻 C
📖 第 1 页 / 共 5 页
字号:

	if (gSt_Fli2300BEPLLTable[B_InputFreqMHz].ODiv == 4)
		B_RegValue = 0x01;

	fli2300_Write08(BE_DIV_VALUE, B_RegValue);
	fli2300_Write08(CLK_CTRL_8, B_ClkCtrl);

} // end - fli2300_ConfigureBackEndPllByTable


//*******************************************************************************
// FUNCTION:	void fli2300_ConfigureBackEndPll(Fli2300PllCaseCadeDesc_t 
//													*Stp_PllDesc)
//
// USAGE:		This module programs the Back clock pll settings with given
//				decriptor value. The descriptor contains divider values
//				fout = (fin * NDiv1 * NDiv2) / (MDiv1 * MDiv2 * PDiv1 * PDiv2 * ODiv)
//				This function is basically supported to allow user to 
//				generate his own table and program PLL
//
// DESCRIPTION:	
//
// INPUT:		PllDesc	- pointer to pll desc
//	
// OUTPUT:		None
//
// GLOBALS:		gSt_Fli2300BEPLLTable
//				gB_Fli2300BEPLLTableMinFreqMHz, gB_Fli2300BEPLLTableMaxFreqMHz
//
// USED_REGS:	CLK_CTRL_6, CLK_CTRL_7, CLK_CTRL_8
//				BE_PLL_FEEDBACK_DIVIDER_1_L, BE_PLL_FEEDBACK_DIVIDER_2_L	
//				BE_DIV_VALUE
//*******************************************************************************
void fli2300_ConfigureBackEndPll(Fli2300PllCaseCadeDesc_t *Stp_PllDesc)
{
	BYTE B_RegValue;
	BYTE B_ClkCtrl;

	fli2300_Write08(CLK_CTRL_8,0x12); // disable pll

	B_RegValue = Stp_PllDesc->MDiv1 - 2;
	B_RegValue |= ((Stp_PllDesc->PDiv1 - 1) << 5);
	fli2300_Write08(CLK_CTRL_6, B_RegValue);
	fli2300_Write16(BE_PLL_FEEDBACK_DIVIDER_1_L, (WORD)(Stp_PllDesc->NDiv1 - 2));

  	B_RegValue = Stp_PllDesc->MDiv2 - 2;
	B_RegValue |= ((Stp_PllDesc->PDiv2 - 1) << 5);
	fli2300_Write08(CLK_CTRL_7, B_RegValue);
	fli2300_Write16(BE_PLL_FEEDBACK_DIVIDER_2_L, (WORD)(Stp_PllDesc->NDiv2 - 2));

	B_ClkCtrl = 0x00;
	B_RegValue  = 0x00;

	if (Stp_PllDesc->ODiv == 1)
		B_ClkCtrl |= 0x40; // ODIV bypass when output divider = 1
	if (Stp_PllDesc->ODiv == 4)
		B_RegValue = 0x01;

	fli2300_Write08(BE_DIV_VALUE, B_RegValue);
	fli2300_Write08(CLK_CTRL_8, B_ClkCtrl);

} // end - fli2300_ConfigureBackEndPll

//*******************************************************************************
// FUNCTION:	void fli2300_ConfigureClockDoubler(BYTE DelayTapCtrl)
//
// USAGE:		Enables the clock doubler interface. Use only for 656 input
//
// DESCRIPTION:	
//
// INPUT:		DelayTapCtrl - Delay tap control setting (0 - 3)
//	
// OUTPUT:		None
//
// GLOBALS:		
//				
//
// USED_REGS:	CLK_CTRL_6, CLK_CTRL_7, CLK_CTRL_8
//				BE_PLL_FEEDBACK_DIVIDER_1_L, BE_PLL_FEEDBACK_DIVIDER_2_L	
//				BE_DIV_VALUE
//*******************************************************************************
void fli2300_ConfigureClockDoubler(BYTE DelayTapCtrl)
{

	fli2300_Write08(CLK_CTRL_2, 0x02);	// disable pll
	fli2300_Write08(CLK_CTRL_0,((BYTE)((DelayTapCtrl & 0x03) | 0x04)));
	fli2300_Write08(CLK_CTRL_3,0x01E);	// enable Clock enable 1 and 2

} // end - fli2300_ConfigureClockDoubler
//#ifdef _FLI2300_REV_BC_
//*******************************************************************************
// FUNCTION:	void fli2300_SetSDIClock1Delay(BYTE B_DelayTap)
//
// USAGE:		Sets SDI clock delay. 
//
// DESCRIPTION:	
//
// INPUT:		B_DelayTap - Delay tap control setting (0 - 63)
//	
// OUTPUT:		None
//
// GLOBALS:		
//				
// USED_REGS:	
//
//*******************************************************************************
void fli2300_SetSDIClock1Delay(BYTE B_DelayTap)
{
	B_DelayTap = ( ((B_DelayTap >> 2) & 0x0F) | ((B_DelayTap << 5) & 0x60) | ((B_DelayTap >> 2)& 0x10)) ;
	fli2300_Write08(SDI_CLK_DLY1, B_DelayTap);
} // end - fli2300_SetSDIClock1Delay


//*******************************************************************************
// FUNCTION:	void fli2300_SetSDIClock2Delay(BYTE B_DelayTap)
//
// USAGE:		Sets SDI clock delay. 
//
// DESCRIPTION:	
//
// INPUT:		B_DelayTap - Delay tap control setting (0 - 63)
//	
// OUTPUT:		None
//
// GLOBALS:		
//				
// USED_REGS:	
//
//*******************************************************************************
void fli2300_SetSDIClock2Delay(BYTE B_DelayTap)
{
	B_DelayTap = ( ((B_DelayTap >> 2) & 0x0F) | ((B_DelayTap << 5) & 0x60) | ((B_DelayTap >> 2)& 0x10)) ;
	fli2300_Write08(SDI_CLK_DLY2, B_DelayTap);	
} // end - fli2300_SetSDIClock2Delay

//*******************************************************************************
// FUNCTION:	void fli2300_SetFEClockDelay(BYTE B_DelayTap)
//

// USAGE:		Sets SDI clock delay. 
//
// DESCRIPTION:	
//
// INPUT:		B_DelayTap - Delay tap control setting (0 - 31)
//	
// OUTPUT:		None
//
// GLOBALS:		
//				
// USED_REGS:	
//
//*******************************************************************************
void fli2300_SetFEClockDelay(BYTE B_DelayTap)
{
	B_DelayTap = ( ((B_DelayTap >> 2) & 0x0F) | ((B_DelayTap << 5) & 0x60) | ((B_DelayTap >> 2)& 0x10)) ;
	fli2300_Write08(FE_CLK_DLY, B_DelayTap);	  
} // end - fli2300_SetFEClockDelay

//*******************************************************************************
// FUNCTION:	void fli2300_SetOutputClockDelay(BYTE B_DelayTap)
//
// USAGE:		Sets SDI clock delay. 
//
// DESCRIPTION:	
//
// INPUT:		B_DelayTap - Delay tap control setting (0 - 31)
//	
// OUTPUT:		None
//
// GLOBALS:		
//				
// USED_REGS:	
//
//*******************************************************************************
void fli2300_SetOutputClockDelay(BYTE B_DelayTap)
{
	B_DelayTap = ( ((B_DelayTap >> 2) & 0x0F) | ((B_DelayTap << 5) & 0x60) | ((B_DelayTap >> 2)& 0x10)) ;
	fli2300_Write08(OUT_CLK_DEY, B_DelayTap);
} // end - fli2300_SetOutputClockDelay



//NRD
//*******************************************************************************
// FUNCTION:	void fli2300_SetNRDControls(BYTE B_CtrlFlag)
//
// USAGE:		Sets the NRD controls
//					Bypass, DCDI, Memory Mode, Film mode, Edit correction
//					CCS, Noise reducer
//
// DESCRIPTION:	
//
// INPUT:		B_CtrlFlag	- ORed value of following definitions
//								D_FLI2300_NRD_BYPASS	
//								D_FLI2300_DCDI_ON		
//								D_FLI2300_FILM_ON		
//								D_FLI2300_MEMMODE_ON	
//								D_FLI2300_CCS_ON		
//								D_FLI2300_FEDIT_ON			
//								D_FLI2300_NOISERED_ON	
//								D_FLI2300_NOISERED_OFF	
// OUTPUT:		None
//
// GLOBALS:		gB_Fli2300NRDCtrl0Shadow
//
// USED_REGS:	NRD_CTRL_0
//*******************************************************************************
void fli2300_SetNRDControls(BYTE B_CtrlFlag)
{
	gB_Fli2300NRDCtrl0Shadow = B_CtrlFlag;
	fli2300_Write08(NRD_CTRL_0, gB_Fli2300NRDCtrl0Shadow);

} // end - fli2300_SetNRDControls

//*******************************************************************************
// FUNCTION:	void fli2300_SetNRDFlyWheelControls(EnDisCtrl_t BypassCtrl,
//											FidPol_t FidPolarity)
//
// USAGE:		Sets the NRD Flywheel controls
//					Bypass control and polarity
//
// DESCRIPTION:	
//
// INPUT:		BypassCtrl - flywheel bypass enable/disable
//				FidPolarity - default fid polarity in case of loss of field id
//
// OUTPUT:		None
//
// GLOBALS:		gB_Fli2300NRDCtrl1Shadow
//
// USED_REGS:	NRD_CTRL_0
//*******************************************************************************
void fli2300_SetNRDFlyWheelControls(EnDisCtrl_t BypassCtrl,FidPol_t FidPolarity)
{
	gB_Fli2300NRDCtrl1Shadow &= 0x3F;
	if (BypassCtrl == EnDisCtrl_Enable)
		gB_Fli2300NRDCtrl1Shadow |= 0x40;
	if (FidPolarity == FidPol_ActiveHigh)
		gB_Fli2300NRDCtrl1Shadow |= 0x80;
	fli2300_Write08(NRD_CTRL_1, gB_Fli2300NRDCtrl1Shadow);

} // end - fli2300_SetNRDFlyWheelControls

//*******************************************************************************
// FUNCTION:	void fli2300_ConfigureNoiseReducer(Fli2300NoiseReducerDesc_t
//														 *Stp_NrDesc)	
//
// USAGE:		Configures the noise reducer parameters including 
//				mode of operation, recursion levels, noise reduction levels 
//				and  the sensitivity table values. 
//				The configuration parameters for the noise reducer are part of 
//				the Noise Reducer descriptor data structure. 
//
// DESCRIPTION:	
//
// INPUT:		Stp_NrDesc	- noise reducer config descriptor
//
// OUTPUT:		None
//
// GLOBALS:		gB_Fli2300NRDCtrl2Shadow, gB_Fli2300NRDCtrl3Shadow
//
// USED_REGS:	NRD_CTRL_2, NRD_CTRL_3
//*******************************************************************************
void fli2300_ConfigureNoiseReducer(Fli2300NoiseReducerDesc_t *Stp_NrDesc)
{
	BYTE B_Index;
	BYTE B_Value;

	// clear controls
	gB_Fli2300NRDCtrl2Shadow &= 0x0F;
	if (Stp_NrDesc->Mode == OpMode_Auto)
	{
		gB_Fli2300NRDCtrl2Shadow |= 0x10;
		if (Stp_NrDesc->RecursionLevel == Fli2300Nrrl_Max)
			gB_Fli2300NRDCtrl2Shadow |= 0x20;
	}
	else // manual
	{
		gB_Fli2300NRDCtrl3Shadow &= 0xF0;
		gB_Fli2300NRDCtrl3Shadow |= Stp_NrDesc->ReductionLevel & 0x0F;
	}

	fli2300_Write08(NRD_CTRL_2, gB_Fli2300NRDCtrl2Shadow);
	fli2300_Write08(NRD_CTRL_3, gB_Fli2300NRDCtrl3Shadow);

	// Noise reducer motion sensitivity table
	for (B_Index = 0;B_Index < 16;B_Index += 2)
	{
		B_Value = Stp_NrDesc->MotionSensitivityTable[B_Index] & 0x0F;
		B_Value |= (Stp_NrDesc->MotionSensitivityTable[B_Index + 1] & 0x0F) << 4;
		fli2300_Write08((WORD)(NRD_MSLUT_01 + (B_Index / 2)), B_Value);
	}

	// Noise reducer recursion limit table
	for (B_Index = 0;B_Index < 16;B_Index += 2)
	{
		B_Value = Stp_NrDesc->MaxRecursionLimitTable[B_Index] & 0x0F;
		B_Value |= (Stp_NrDesc->MaxRecursionLimitTable[B_Index + 1] & 0x0F) << 4;
		fli2300_Write08((WORD)(NRD_YRLUT_01 + (B_Index / 2)), B_Value);
	}

} // end - fli2300_ConfigureNoiseReducer


//*******************************************************************************
// FUNCTION:	void fli2300_ConfigureCCS(Fli2300CCSDesc_t *Stp_CCSDesc)	
//
// USAGE:		Configures the Cross color suppression 
//					mode of operation and threshold levels
//				The configuration parameters for the CCS is part of the 
//				CCS descriptor data structure. 
//
// DESCRIPTION:	
//
// INPUT:		Stp_CCSDesc	- CCS config descriptor
//
// OUTPUT:		None
//
// GLOBALS:		gB_Fli2300NRDCtrl3Shadow, gB_Fli2300NRDCtrl4Shadow
//				gB_Fli2300NRDCtrl5Shadow
//
// USED_REGS:	NRD_CTRL_3, NRD_CTRL_4, NRD_CTRL_5
//*******************************************************************************
void fli2300_ConfigureCCS(Fli2300CCSDesc_t *Stp_CCSDesc)	
{
	gB_Fli2300NRDCtrl4Shadow &= 0xDF;
	gB_Fli2300NRDCtrl5Shadow &= 0xE3;
	if (Stp_CCSDesc->Mode == OpMode_Manual)
	{
		gB_Fli2300NRDCtrl4Shadow |= 0x20;
		gB_Fli2300NRDCtrl5Shadow |= (Stp_CCSDesc->ManualLevel & 0x07) << 2;
	}
	gB_Fli2300NRDCtrl3Shadow &= 0x0F;
	gB_Fli2300NRDCtrl3Shadow |= (Stp_CCSDesc->AttenuationLevel & 0x0F) << 4;

	fli2300_Write08(NRD_CTRL_3, gB_Fli2300NRDCtrl3Shadow);
	fli2300_Write08(NRD_CTRL_4, gB_Fli2300NRDCtrl4Shadow);
	fli2300_Write08(NRD_CTRL_5, gB_Fli2300NRDCtrl5Shadow);

} // end - fli2300_ConfigureCCS


//*******************************************************************************
// FUNCTION:	void fli2300_ConfigureFilmModeProcess(Fli2300FilmModeDesc_t
//														 *Stp_FMDesc)	
//
// USAGE:		Configures the Filim Mode processing Controls
//					detection controls, detection thresholds, 
//					processing thresholds
//				The configuration parameters for the Film Mode processing are
//				part of the Film Mode descriptor data structure. 
//
// DESCRIPTION:	
//
// INPUT:		Stp_FMDesc	- film mode processing config descriptor
//
// OUTPUT:		None
//
// GLOBALS:		gB_Fli2300NRDCtrl1Shadow, gB_Fli2300NRDCtrl7Shadow
//
// USED_REGS:	NRD_CTRL_1, NRD_CTRL_6, NRD_FILMS_1
//*******************************************************************************
void fli2300_ConfigureFilmModeProcess(Fli2300FilmModeDesc_t *Stp_FMDesc)	
{
	BYTE B_CtrlValue;

	// 30Hz film detection control
	gB_Fli2300NRDCtrl1Shadow &= 0xF8;
	if (Stp_FMDesc->FilmDetectEnable30Hz == EnDisCtrl_Enable)
	{
		gB_Fli2300NRDCtrl1Shadow |= 0x01;
		if (Stp_FMDesc->FilmDetectControl30Hz == SigSrc_External)
			gB_Fli2300NRDCtrl1Shadow |= 0x02; 
		if (Stp_FMDesc->FilmDetectFIdPolarity30Hz == FidPol_ActiveLow)
			gB_Fli2300NRDCtrl1Shadow |= 0x04; 
	}
	fli2300_Write08(NRD_CTRL_1, gB_Fli2300NRDCtrl1Shadow);

	// film sequence id controls & film sync delay
	B_CtrlValue = 0;
	if (Stp_FMDesc->SequenceIdSource == SigSrc_External)
	{
		B_CtrlValue |= 0x01;
		if (Stp_FMDesc->ExtSequenceIdType == Fli2300ExtFilmSeq_Type1)
			B_CtrlValue |= 0x02;
		if (Stp_FMDesc->ExtSeqIdPolarity == SigCtrl_Invert)
			B_CtrlValue |= 0x04;
	}
	B_CtrlValue |= (Stp_FMDesc->SyncDelay << 3);
	fli2300_Write08(NRD_FILMS_1, B_CtrlValue);

	// Detection Threshold settings
	gB_Fli2300NRDCtrl7Shadow &= 0x0F;
	gB_Fli2300NRDCtrl7Shadow |= (Stp_FMDesc->MotionThreshold  & 0x0F) << 4;
	fli2300_Write08(NRD_CTRL_7, gB_Fli2300NRDCtrl7Shadow);

} // end - fli2300_ConfigureFilmModeProcess


//*******************************************************************************
// FUNCTION:	void fli2300_ConfigureFilmEditProcess(Fli2300FilmEditDesc_t
//														 *Stp_FEDesc)	
//
// USAGE:		Configures the Filim Edit processing Controls
//					detection controls, detection thresholds, 
//					processing thresholds
//				The configuration parameters for the Film Edit processing are

⌨️ 快捷键说明

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