📄 mxl5005_c.c
字号:
// MXL5005.cpp : Defines the initialization routines for the DLL.
// 2.6.14
//#ifdef _MXL_HEADER
//#include "stdafx.h"
//#endif
#include "MXL5005_c.h"
void InitTunerControls(Tuner_struct *Tuner)
{
MXL5005_RegisterInit(Tuner) ;
// printf("\nTest Tuner->TunerRegs[0].Reg_Val = 0x%02x",Tuner->TunerRegs[0].Reg_Val);//0x40
MXL5005_ControlInit(Tuner) ;
// printf("\nTest Tuner->Init_Ctrl[0].addr[0] = %d",Tuner->Init_Ctrl[0].addr[0]);//73
#ifdef _MXL_INTERNAL
MXL5005_MXLControlInit(Tuner) ;
#endif
}
///////////////////////////////////////////////////////////////////////////////
// //
// Function: MXL_ConfigTuner //
// //
// Description: Configure MXL5005Tuner structure for desired //
// Channel Bandwidth/Channel Frequency //
// //
// //
// Functions used: //
// MXL_SynthIFLO_Calc //
// //
// Inputs: //
// Tuner_struct: structure defined at higher level //
// Mode: Tuner Mode (Analog/Digital) //
// IF_Mode: IF Mode ( Zero/Low ) //
// Bandwidth: Filter Channel Bandwidth (in Hz) //
// IF_out: Desired IF out Frequency (in Hz) //
// Fxtal: Crystal Frerquency (in Hz) //
// TOP: 0: Dual AGC; Value: take over point //
// IF_OUT_LOAD: IF out load resistor (200/300 Ohms) //
// CLOCK_OUT: 0: Turn off clock out; 1: turn on clock out //
// DIV_OUT: 0: Div-1; 1: Div-4 //
// CAPSELECT: 0: Disable On-chip pulling cap; 1: Enable //
// EN_RSSI: 0: Disable RSSI; 1: Enable RSSI //
// //
// Outputs: //
// Tuner //
// //
// Return: //
// 0 : Successful //
// > 0 : Failed //
// //
///////////////////////////////////////////////////////////////////////////////
_u16 MXL5005_TunerConfig(Tuner_struct *Tuner,
_u8 Mode, // 0: Analog Mode ; 1: Digital Mode
_u8 IF_mode, // for Analog Mode, 0: zero IF; 1: low IF
_u32 Bandwidth, // filter channel bandwidth (6, 7, 8)
_u32 IF_out, // Desired IF Out Frequency
_u32 Fxtal, // XTAL Frequency
_u8 AGC_Mode, // AGC Mode - Dual AGC: 0, Single AGC: 1
_u16 TOP, // 0: Dual AGC; Value: take over point
_u16 IF_OUT_LOAD, // IF Out Load Resistor (200 / 300 Ohms)
_u8 CLOCK_OUT, // 0: turn off clock out; 1: turn on clock out
_u8 DIV_OUT, // 0: Div-1; 1: Div-4
_u8 CAPSELECT, // 0: disable On-Chip pulling cap; 1: enable
_u8 EN_RSSI, // 0: disable RSSI; 1: enable RSSI
_u8 Mod_Type, // Modulation Type;
// 0 - Default; 1 - DVB-T; 2 - ATSC; 3 - QAM; 4 - Analog Cable
_u8 TF_Type // Tracking Filter
// 0 - Default; 1 - Off; 2 - Type C; 3 - Type C-H
)
{
_u16 status = 0 ;
Tuner->Mode = Mode ;
Tuner->IF_Mode = IF_mode ;
Tuner->Chan_Bandwidth = Bandwidth ;
Tuner->IF_OUT = IF_out ;
Tuner->Fxtal = Fxtal ;
Tuner->AGC_Mode = AGC_Mode ;
Tuner->TOP = TOP ;
Tuner->IF_OUT_LOAD = IF_OUT_LOAD ;
Tuner->CLOCK_OUT = CLOCK_OUT ;
Tuner->DIV_OUT = DIV_OUT ;
Tuner->CAPSELECT = CAPSELECT ;
Tuner->EN_RSSI = EN_RSSI ;
Tuner->Mod_Type = Mod_Type ;
Tuner->TF_Type = TF_Type ;
//
// Initialize all the controls and registers
//
InitTunerControls (Tuner) ;
//
// Synthesizer LO frequency calculation
//
MXL_SynthIFLO_Calc( Tuner ) ;
return status ;
}
///////////////////////////////////////////////////////////////////////////////
// //
// Function: MXL_SynthIFLO_Calc //
// //
// Description: Calculate Internal IF-LO Frequency //
// //
// Globals: //
// NONE //
// //
// Functions used: //
// NONE //
// //
// Inputs: //
// Tuner_struct: structure defined at higher level //
// //
// Outputs: //
// Tuner //
// //
// Return: //
// 0 : Successful //
// > 0 : Failed //
// //
///////////////////////////////////////////////////////////////////////////////
void MXL_SynthIFLO_Calc(Tuner_struct *Tuner)
{
if (Tuner->Mode == 1) // Digital Mode
{
Tuner->IF_LO = Tuner->IF_OUT ;
}
else // Analog Mode
{
if(Tuner->IF_Mode == 0) // Analog Zero IF mode
{
Tuner->IF_LO = Tuner->IF_OUT + 400000 ;
}
else // Analog Low IF mode
{
Tuner->IF_LO = Tuner->IF_OUT + Tuner->Chan_Bandwidth/2 ;
}
}
}
///////////////////////////////////////////////////////////////////////////////
// //
// Function: MXL_SynthRFTGLO_Calc //
// //
// Description: Calculate Internal RF-LO frequency and //
// internal Tone-Gen(TG)-LO frequency //
// //
// Globals: //
// NONE //
// //
// Functions used: //
// NONE //
// //
// Inputs: //
// Tuner_struct: structure defined at higher level //
// //
// Outputs: //
// Tuner //
// //
// Return: //
// 0 : Successful //
// > 0 : Failed //
// //
///////////////////////////////////////////////////////////////////////////////
void MXL_SynthRFTGLO_Calc(Tuner_struct *Tuner)
{
if (Tuner->Mode == 1) // Digital Mode
{
//remove 20.48MHz setting for 2.6.10
Tuner->RF_LO = Tuner->RF_IN ;
Tuner->TG_LO = Tuner->RF_IN - 750000 ; //change for 2.6.6
}
else // Analog Mode
{
if(Tuner->IF_Mode == 0) // Analog Zero IF mode
{
Tuner->RF_LO = Tuner->RF_IN - 400000 ;
Tuner->TG_LO = Tuner->RF_IN - 1750000 ;
}
else // Analog Low IF mode
{
Tuner->RF_LO = Tuner->RF_IN - Tuner->Chan_Bandwidth/2 ;
Tuner->TG_LO = Tuner->RF_IN - Tuner->Chan_Bandwidth + 500000 ;
}
}
}
///////////////////////////////////////////////////////////////////////////////
// //
// Function: MXL_OverwriteICDefault //
// //
// Description: Overwrite the Default Register Setting //
// //
// //
// Functions used: //
// //
// Inputs: //
// Tuner_struct: structure defined at higher level //
// Outputs: //
// Tuner //
// //
// Return: //
// 0 : Successful //
// > 0 : Failed //
// //
///////////////////////////////////////////////////////////////////////////////
_u16 MXL_OverwriteICDefault( Tuner_struct *Tuner)
{
_u16 status = 0 ;
status += MXL_ControlWrite(Tuner, OVERRIDE_1, 1) ;
status += MXL_ControlWrite(Tuner, OVERRIDE_2, 1) ;
status += MXL_ControlWrite(Tuner, OVERRIDE_3, 1) ;
status += MXL_ControlWrite(Tuner, OVERRIDE_4, 1) ;
return status ;
}
///////////////////////////////////////////////////////////////////////////////
// //
// Function: MXL_BlockInit //
// //
// Description: Tuner Initialization as a function of 'User Settings' //
// * User settings in Tuner strcuture must be assigned //
// first //
// //
// 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_BlockInit( Tuner_struct *Tuner )
{
_u16 status = 0 ;
status += MXL_OverwriteICDefault(Tuner) ;
//status += MXL_ControlWrite(Tuner, RFA_DIVCLK, 0);
if (Tuner->Mode == 1)
{
//
// Downconverter Control
// Dig Ana
status += MXL_ControlWrite(Tuner, DN_IQTN_AMP_CUT, 1) ;
//
// Filter Control
// Dig Ana
status += MXL_ControlWrite(Tuner, BB_MODE, 0) ;
status += MXL_ControlWrite(Tuner, BB_BUF, 3) ;
status += MXL_ControlWrite(Tuner, BB_BUF_OA, 1) ;
status += MXL_ControlWrite(Tuner, BB_IQSWAP, 0) ;
}
else
{
//
// Downconverter Control
// Dig Ana
status += MXL_ControlWrite(Tuner, DN_IQTN_AMP_CUT, 0) ;
//
// Filter Control
// Dig Ana
status += MXL_ControlWrite(Tuner, BB_MODE, 1) ;
status += MXL_ControlWrite(Tuner, BB_BUF, 2) ;
status += MXL_ControlWrite(Tuner, BB_BUF_OA, 0) ;
status += MXL_ControlWrite(Tuner, BB_IQSWAP,1) ;
}
status += MXL_ControlWrite(Tuner, BB_INITSTATE_DLPF_TUNE, 0) ;
// Initialize Low-Pass Filter
if (Tuner->Mode) { // Digital Mode
switch (Tuner->Chan_Bandwidth) {
case 8000000:
status += MXL_ControlWrite(Tuner, BB_DLPF_BANDSEL, 0) ;
break ;
case 7000000:
status += MXL_ControlWrite(Tuner, BB_DLPF_BANDSEL, 2) ;
break ;
case 6000000:
status += MXL_ControlWrite(Tuner, BB_DLPF_BANDSEL, 3) ;
break ;
}
} else { // Analog Mode
switch (Tuner->Chan_Bandwidth) {
case 8000000: // Low Zero
if (Tuner->IF_Mode == 1)
{
status += MXL_ControlWrite(Tuner, BB_ALPF_BANDSELECT, 0) ;
}
else
{
status += MXL_ControlWrite(Tuner, BB_ALPF_BANDSELECT, 3) ;
}
break ;
case 7000000:
if (Tuner->IF_Mode == 1)
{
status += MXL_ControlWrite(Tuner, BB_ALPF_BANDSELECT, 1) ;
}
else
{
status += MXL_ControlWrite(Tuner, BB_ALPF_BANDSELECT, 4) ;
}
break ;
case 6000000:
if (Tuner->IF_Mode == 1)
{
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -