📄 sfli2310.c
字号:
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 + -