📄 mxl5005_c.c
字号:
}
return status ;
}
///////////////////////////////////////////////////////////////////////////////
// //
// Function: MXL_IFSynthInit //
// //
// Description: Tuner IF Synthesizer related register initialization //
// //
// Globals: //
// NONE //
// //
// Functions used: //
// Tuner_struct: structure defined at higher level //
// //
// Inputs: //
// Tuner : Tuner structure defined at higher level //
// //
// Outputs: //
// Tuner //
// //
// Return: //
// 0 : Successful //
// > 0 : Failed //
// //
///////////////////////////////////////////////////////////////////////////////
_u16 MXL_IFSynthInit( Tuner_struct * Tuner )
{
_u16 status = 0 ;
// Declare Local Variables
_u32 Fref = 0 ;
_u32 Kdbl, intModVal ;
_u32 fracModVal ;
Kdbl = 2 ;
if (Tuner->Fxtal >= 12000000UL && Tuner->Fxtal <= 16000000UL)
Kdbl = 2 ;
if (Tuner->Fxtal > 16000000UL && Tuner->Fxtal <= 32000000UL)
Kdbl = 1 ;
//
// IF Synthesizer Control
//
if (Tuner->Mode == 0 && Tuner->IF_Mode == 1) // Analog Low IF mode
{
if (Tuner->IF_LO == 41000000UL) {
status += MXL_ControlWrite(Tuner, IF_DIVVAL, 0x08) ;
status += MXL_ControlWrite(Tuner, IF_VCO_BIAS, 0x0C) ;
Fref = 328000000UL ;
}
if (Tuner->IF_LO == 47000000UL) {
status += MXL_ControlWrite(Tuner, IF_DIVVAL, 0x08) ;
status += MXL_ControlWrite(Tuner, IF_VCO_BIAS, 0x08) ;
Fref = 376000000UL ;
}
if (Tuner->IF_LO == 54000000UL) {
status += MXL_ControlWrite(Tuner, IF_DIVVAL, 0x10) ;
status += MXL_ControlWrite(Tuner, IF_VCO_BIAS, 0x0C) ;
Fref = 324000000UL ;
}
if (Tuner->IF_LO == 60000000UL) {
status += MXL_ControlWrite(Tuner, IF_DIVVAL, 0x10) ;
status += MXL_ControlWrite(Tuner, IF_VCO_BIAS, 0x08) ;
Fref = 360000000UL ;
}
if (Tuner->IF_LO == 39250000UL) {
status += MXL_ControlWrite(Tuner, IF_DIVVAL, 0x08) ;
status += MXL_ControlWrite(Tuner, IF_VCO_BIAS, 0x0C) ;
Fref = 314000000UL ;
}
if (Tuner->IF_LO == 39650000UL) {
status += MXL_ControlWrite(Tuner, IF_DIVVAL, 0x08) ;
status += MXL_ControlWrite(Tuner, IF_VCO_BIAS, 0x0C) ;
Fref = 317200000UL ;
}
if (Tuner->IF_LO == 40150000UL) {
status += MXL_ControlWrite(Tuner, IF_DIVVAL, 0x08) ;
status += MXL_ControlWrite(Tuner, IF_VCO_BIAS, 0x0C) ;
Fref = 321200000UL ;
}
if (Tuner->IF_LO == 40650000UL) {
status += MXL_ControlWrite(Tuner, IF_DIVVAL, 0x08) ;
status += MXL_ControlWrite(Tuner, IF_VCO_BIAS, 0x0C) ;
Fref = 325200000UL ;
}
}
if (Tuner->Mode || (Tuner->Mode == 0 && Tuner->IF_Mode == 0))
{
if (Tuner->IF_LO == 57000000UL) {
status += MXL_ControlWrite(Tuner, IF_DIVVAL, 0x10) ;
status += MXL_ControlWrite(Tuner, IF_VCO_BIAS, 0x08) ;
Fref = 342000000UL ;
}
if (Tuner->IF_LO == 44000000UL) {
status += MXL_ControlWrite(Tuner, IF_DIVVAL, 0x08) ;
status += MXL_ControlWrite(Tuner, IF_VCO_BIAS, 0x08) ;
Fref = 352000000UL ;
}
if (Tuner->IF_LO == 43750000UL) {
status += MXL_ControlWrite(Tuner, IF_DIVVAL, 0x08) ;
status += MXL_ControlWrite(Tuner, IF_VCO_BIAS, 0x08) ;
Fref = 350000000UL ;
}
if (Tuner->IF_LO == 36650000UL) {
status += MXL_ControlWrite(Tuner, IF_DIVVAL, 0x04) ;
status += MXL_ControlWrite(Tuner, IF_VCO_BIAS, 0x08) ;
Fref = 366500000UL ;
}
if (Tuner->IF_LO == 36150000UL) {
status += MXL_ControlWrite(Tuner, IF_DIVVAL, 0x04) ;
status += MXL_ControlWrite(Tuner, IF_VCO_BIAS, 0x08) ;
Fref = 361500000UL ;
}
if (Tuner->IF_LO == 36000000UL) {
status += MXL_ControlWrite(Tuner, IF_DIVVAL, 0x04) ;
status += MXL_ControlWrite(Tuner, IF_VCO_BIAS, 0x08) ;
Fref = 360000000UL ;
}
if (Tuner->IF_LO == 35250000UL) {
status += MXL_ControlWrite(Tuner, IF_DIVVAL, 0x04) ;
status += MXL_ControlWrite(Tuner, IF_VCO_BIAS, 0x08) ;
Fref = 352500000UL ;
}
if (Tuner->IF_LO == 34750000UL) {
status += MXL_ControlWrite(Tuner, IF_DIVVAL, 0x04) ;
status += MXL_ControlWrite(Tuner, IF_VCO_BIAS, 0x08) ;
Fref = 347500000UL ;
}
if (Tuner->IF_LO == 6280000UL) {
status += MXL_ControlWrite(Tuner, IF_DIVVAL, 0x07) ;
status += MXL_ControlWrite(Tuner, IF_VCO_BIAS, 0x08) ;
Fref = 376800000UL ;
}
if (Tuner->IF_LO == 5000000UL) {
status += MXL_ControlWrite(Tuner, IF_DIVVAL, 0x09) ;
status += MXL_ControlWrite(Tuner, IF_VCO_BIAS, 0x08) ;
Fref = 360000000UL ;
}
if (Tuner->IF_LO == 4500000UL) {
status += MXL_ControlWrite(Tuner, IF_DIVVAL, 0x06) ;
status += MXL_ControlWrite(Tuner, IF_VCO_BIAS, 0x08) ;
Fref = 360000000UL ;
}
if (Tuner->IF_LO == 4570000UL) {
status += MXL_ControlWrite(Tuner, IF_DIVVAL, 0x06) ;
status += MXL_ControlWrite(Tuner, IF_VCO_BIAS, 0x08) ;
Fref = 365600000UL ;
}
if (Tuner->IF_LO == 4000000UL) {
status += MXL_ControlWrite(Tuner, IF_DIVVAL, 0x05) ;
status += MXL_ControlWrite(Tuner, IF_VCO_BIAS, 0x08) ;
Fref = 360000000UL ;
}
if (Tuner->IF_LO == 57400000UL)
{
status += MXL_ControlWrite(Tuner, IF_DIVVAL, 0x10) ;
status += MXL_ControlWrite(Tuner, IF_VCO_BIAS, 0x08) ;
Fref = 344400000UL ;
}
if (Tuner->IF_LO == 44400000UL)
{
status += MXL_ControlWrite(Tuner, IF_DIVVAL, 0x08) ;
status += MXL_ControlWrite(Tuner, IF_VCO_BIAS, 0x08) ;
Fref = 355200000UL ;
}
if (Tuner->IF_LO == 44150000UL)
{
status += MXL_ControlWrite(Tuner, IF_DIVVAL, 0x08) ;
status += MXL_ControlWrite(Tuner, IF_VCO_BIAS, 0x08) ;
Fref = 353200000UL ;
}
if (Tuner->IF_LO == 37050000UL)
{
status += MXL_ControlWrite(Tuner, IF_DIVVAL, 0x04) ;
status += MXL_ControlWrite(Tuner, IF_VCO_BIAS, 0x08) ;
Fref = 370500000UL ;
}
if (Tuner->IF_LO == 36550000UL)
{
status += MXL_ControlWrite(Tuner, IF_DIVVAL, 0x04) ;
status += MXL_ControlWrite(Tuner, IF_VCO_BIAS, 0x08) ;
Fref = 365500000UL ;
}
if (Tuner->IF_LO == 36125000UL) {
status += MXL_ControlWrite(Tuner, IF_DIVVAL, 0x04) ;
status += MXL_ControlWrite(Tuner, IF_VCO_BIAS, 0x08) ;
Fref = 361250000UL ;
}
if (Tuner->IF_LO == 6000000UL) {
status += MXL_ControlWrite(Tuner, IF_DIVVAL, 0x07) ;
status += MXL_ControlWrite(Tuner, IF_VCO_BIAS, 0x08) ;
Fref = 360000000UL ;
}
if (Tuner->IF_LO == 5400000UL)
{
status += MXL_ControlWrite(Tuner, IF_DIVVAL, 0x07) ;
status += MXL_ControlWrite(Tuner, IF_VCO_BIAS, 0x0C) ;
Fref = 324000000UL ;
}
if (Tuner->IF_LO == 5380000UL) {
status += MXL_ControlWrite(Tuner, IF_DIVVAL, 0x07) ;
status += MXL_ControlWrite(Tuner, IF_VCO_BIAS, 0x0C) ;
Fref = 322800000UL ;
}
if (Tuner->IF_LO == 5200000UL) {
status += MXL_ControlWrite(Tuner, IF_DIVVAL, 0x09) ;
status += MXL_ControlWrite(Tuner, IF_VCO_BIAS, 0x08) ;
Fref = 374400000UL ;
}
if (Tuner->IF_LO == 4900000UL)
{
status += MXL_ControlWrite(Tuner, IF_DIVVAL, 0x09) ;
status += MXL_ControlWrite(Tuner, IF_VCO_BIAS, 0x08) ;
Fref = 352800000UL ;
}
if (Tuner->IF_LO == 4400000UL)
{
status += MXL_ControlWrite(Tuner, IF_DIVVAL, 0x06) ;
status += MXL_ControlWrite(Tuner, IF_VCO_BIAS, 0x08) ;
Fref = 352000000UL ;
}
if (Tuner->IF_LO == 4063000UL) //add for 2.6.8
{
status += MXL_ControlWrite(Tuner, IF_DIVVAL, 0x05) ;
status += MXL_ControlWrite(Tuner, IF_VCO_BIAS, 0x08) ;
Fref = 365670000UL ;
}
}
// CHCAL_INT_MOD_IF
// CHCAL_FRAC_MOD_IF
intModVal = Fref / (Tuner->Fxtal * Kdbl/2) ;
status += MXL_ControlWrite(Tuner, CHCAL_INT_MOD_IF, intModVal ) ;
fracModVal = (2<<15)*(Fref/1000 - (Tuner->Fxtal/1000 * Kdbl/2) * intModVal);
fracModVal = fracModVal / ((Tuner->Fxtal * Kdbl/2)/1000) ;
status += MXL_ControlWrite(Tuner, CHCAL_FRAC_MOD_IF, fracModVal) ;
return status ;
}
///////////////////////////////////////////////////////////////////////////////
// //
// Function: MXL_GetXtalInt //
// //
// Description: return the Crystal Integration Value for //
// TG_VCO_BIAS calculation //
// //
// Globals: //
// NONE //
// //
// Functions used: //
// NONE //
// //
// Inputs: //
// Crystal Frequency Value in Hz //
// //
// Outputs: //
// Calculated Crystal Frequency Integration Value //
// //
// Return: //
// 0 : Successful //
// > 0 : Failed //
// //
///////////////////////////////////////////////////////////////////////////////
_u32 MXL_GetXtalInt(_u32 Xtal_Freq)
{
if ((Xtal_Freq % 1000000) == 0)
return (Xtal_Freq / 10000) ;
else
return (((Xtal_Freq / 1000000) + 1)*100) ;
}
///////////////////////////////////////////////////////////////////////////////
// //
// Function: MXL5005_TuneRF //
// //
// Description: Set control names to tune to requested RF_IN frequency //
// //
// Globals: //
// None //
// //
// Functions used: //
// MXL_SynthRFTGLO_Calc //
// MXL5005_ControlWrite //
// MXL_GetXtalInt //
// //
// Inputs: //
// Tuner : Tuner structure defined at higher level //
// //
// Outputs: //
// Tuner //
// //
// Return: //
// 0 : Successful //
// 1 : Unsuccessful //
///////////////////////////////////////////////////////////////////////////////
_u16 MXL_TuneRF(Tuner_struct *Tuner, _u32 RF_Freq)
{
// Declare Local Variables
_u16 status = 0 ;
_u32 divider_val = 0, E3, E4, E5, E5A ;
_u32 Fmax = 0, Fmin = 0, FmaxBin, FminBin ;
_u32 Kdbl_RF = 2;
_u32 tg_divval ;
_u32 tg_lo ;
_u32 Xtal_Int ;
_u32 Fref_TG;
_u32 Fvco;
// _u32 temp;
Xtal_Int = MXL_GetXtalInt(Tuner->Fxtal ) ;
Tuner->RF_IN = RF_Freq ;
MXL_SynthRFTGLO_Calc( Tuner ) ;
if (Tuner->Fxtal >= 12000000UL && Tuner->Fxtal <= 22000000UL)
Kdbl_RF = 2 ;
if (Tuner->Fxtal > 22000000 && Tuner->Fxtal <= 32000000)
Kdbl_RF = 1 ;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -