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

📄 mxl5005_c.c

📁 DVB软件,基于CT216软件的开发源程序.
💻 C
📖 第 1 页 / 共 5 页
字号:
// 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 + -