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

📄 tuner.c

📁 STV0299 Minituner driver, for ST chipset
💻 C
📖 第 1 页 / 共 5 页
字号:
//#include <ansi_c.h>

//#include <utility.h>
#include "string.h"
#include "stdlib.h"

#include "gen_macros.h"
#include "tuner.h"
/*#include "RF4000Init.h"*/		// Required for RF4000 library function proto-types.
/*#include "mt2060.h"*/

#if (0)
/*****************************************************
**FUNCTION	::	PowOf2
**ACTION	::	Compute  2^n (where n is an integer) 
**PARAMS IN	::	number -> n
**PARAMS OUT::	NONE
**RETURN	::	2^n
*****************************************************/
static U32 PowOf2(U32 number)
{
	U32 i;
	U32 result=1;
	
	for(i=0;i<number;i++)
		result*=2;
		
	return result;
}
#endif
TUNER_Handle_t TunerInit(TUNER_InitParams_t *hTunerInitParams)
{
	TUNER_Handle_t hTuner = NULL;

    U8             *DefVal;

    /*
    **   REGISTER CONFIGURATION
    **     ----------------------
    */
    hTuner = calloc (1,sizeof(TUNER_InitParams_t));	/* Allocation of the chip structure	*/ 
    
    if((hTuner != NULL) && (hTunerInitParams != NULL))
    {
    	hTuner->Model		= hTunerInitParams->Model;    /* Tuner model */
        hTuner->NbDefVal	= hTunerInitParams->NbDefVal; /* number of default values (must match number of 399 registers) */
        hTuner->DefVal		= hTunerInitParams->DefVal;   /* pointer to table of default values */
        
    	switch(hTunerInitParams->Model)
    	{
    		case TUNER_NULL:
    			hTuner->StepSize = 0;					/* 4 MHz StepSize */
    			hTuner->IF = 0; 						/* 479.5 MHz intermediate frequency */
    			hTuner->BandWidth=0; 
    			hTuner->IQ_Wiring = TUNER_IQ_NORMAL;   /* No hardware IQ invertion */
    			
    			/* fill elements of external chip data structure */
			    hTunerInitParams->Chip->NbRegs   = 1;
			    hTunerInitParams->Chip->NbFields = 1;
			    hTunerInitParams->Chip->ChipMode = STCHIP_MODE_NOSUBADR;
			    hTunerInitParams->Chip->WrStart  = 0;
			    hTunerInitParams->Chip->WrSize   = 0;     
			    hTunerInitParams->Chip->RdStart  = 0;     
			    hTunerInitParams->Chip->RdSize   = 0; 
			    
			    hTuner->Chip = ChipOpen(hTunerInitParams->Chip);

		        if(hTuner->Chip != NULL)
				{
					/*	REGISTER INITIALISATION	*/
					/*	DIVM	*/
					ChipAddReg(hTuner->Chip,0,"NOT_A_REG",0x00,0x00,STCHIP_ACCESS_NON);  
					ChipAddField(hTuner->Chip,0,0,"NOT_A_FIELD",0,7,CHIP_UNSIGNED);
					
				}
    		break;
#if (0)    		
    		case TUNER_RF4000:

    			hTuner->IF			= hTunerInitParams->IF;				
    			hTuner->BandWidth	= hTunerInitParams->BandWidth;
    			hTuner->IQ_Wiring	= hTunerInitParams->IQ_Wiring;
    			hTuner->StepSize	= hTunerInitParams->StepSize;


			    if(hTunerInitParams->NbDefVal > 0)
			    {
			        hTuner->Chip = ChipOpen(hTunerInitParams->Chip);

			        if(hTuner->Chip != NULL)
					{
						if (RF4000_doInit(hTuner) == 1)
						{
							// Initialization error.  
							//printf("\nInitialization error\n");
						}
					}
				}
    		
    		break;
#endif
    		case TUNER_TDM1300:
    			/* 						*/
    			hTuner->StepSize = 166667;	/* 166,667 Khz StepSize */
    			hTuner->IF = 36130; 		/* 36 MHz intermediate frequency */
    			hTuner->BandWidth=8;
    			hTuner->IQ_Wiring = TUNER_IQ_NORMAL;   /* No hardware IQ invertion */
    			
			    /* fill elements of external chip data structure */
			    hTunerInitParams->Chip->NbRegs   = TDM1300_NBREGS;
			    hTunerInitParams->Chip->NbFields = TDM1300_NBFIELDS;
			    hTunerInitParams->Chip->ChipMode = STCHIP_MODE_NOSUBADR;
			    hTunerInitParams->Chip->WrStart  = RTDM1300_P_DIV1;
			    hTunerInitParams->Chip->WrSize   = 4;     
			    hTunerInitParams->Chip->RdStart  = RTDM1300_STATUS;     
			    hTunerInitParams->Chip->RdSize   = 1;     

			    if(hTunerInitParams->NbDefVal == TDM1300_NBREGS)
			    {
			        hTuner->Chip = ChipOpen(hTunerInitParams->Chip);

			        if(hTuner->Chip != NULL)
					{
						DefVal = hTuner->DefVal; /*  */    
    		
						/*	REGISTER INITIALISATION	*/
						/*	P_DIV1	*/
						ChipAddReg(hTuner->Chip,RTDM1300_P_DIV1,"P_DIV1",0x0000,*DefVal++,STCHIP_ACCESS_W);
						ChipAddField(hTuner->Chip,RTDM1300_P_DIV1,FTDM1300_FIX,"FIX",7,1,CHIP_UNSIGNED);
						ChipAddField(hTuner->Chip,RTDM1300_P_DIV1,FTDM1300_N_MSB,"N_MSB",0,7,CHIP_UNSIGNED);

						/*	P_DIV2	*/
						ChipAddReg(hTuner->Chip,RTDM1300_P_DIV2,"P_DIV2",0x0001,*DefVal++,STCHIP_ACCESS_W);
						ChipAddField(hTuner->Chip,RTDM1300_P_DIV2,FTDM1300_N_LSB,"N_LSB",0,8,CHIP_UNSIGNED);

						/*	CTRL1	*/
						ChipAddReg(hTuner->Chip,RTDM1300_CTRL1,"CTRL1",0x0002,*DefVal++,STCHIP_ACCESS_W);
						ChipAddField(hTuner->Chip,RTDM1300_CTRL1,FTDM1300_ONE,"ONE",7,1,CHIP_UNSIGNED);
						ChipAddField(hTuner->Chip,RTDM1300_CTRL1,FTDM1300_D_A,"D_A",6,1,CHIP_UNSIGNED);
						ChipAddField(hTuner->Chip,RTDM1300_CTRL1,FTDM1300_ZERO,"ZERO",4,2,CHIP_UNSIGNED);
						ChipAddField(hTuner->Chip,RTDM1300_CTRL1,FTDM1300_ATC,"ATC",3,1,CHIP_UNSIGNED);
						ChipAddField(hTuner->Chip,RTDM1300_CTRL1,FTDM1300_R_AL,"R_AL",0,3,CHIP_UNSIGNED);

						/*	CTRL2	*/
						ChipAddReg(hTuner->Chip,RTDM1300_CTRL2,"CTRL2",0x0003,*DefVal++,STCHIP_ACCESS_W);
						ChipAddField(hTuner->Chip,RTDM1300_CTRL2,FTDM1300_CP,"CP",5,3,CHIP_UNSIGNED);
						ChipAddField(hTuner->Chip,RTDM1300_CTRL2,FTDM1300_SP5,"SP5",4,1,CHIP_UNSIGNED);
						ChipAddField(hTuner->Chip,RTDM1300_CTRL2,FTDM1300_SP4,"SP4",3,1,CHIP_UNSIGNED); 
						ChipAddField(hTuner->Chip,RTDM1300_CTRL2,FTDM1300_SP123,"SP123",0,3,CHIP_UNSIGNED); 

						/*	STATUS	*/
						ChipAddReg(hTuner->Chip,RTDM1300_STATUS,"STATUS",0x0004,*DefVal++,STCHIP_ACCESS_R);
						ChipAddField(hTuner->Chip,RTDM1300_STATUS,FTDM1300_POR,"POR",7,1,CHIP_UNSIGNED);
						ChipAddField(hTuner->Chip,RTDM1300_STATUS,FTDM1300_FL,"FL",6,1,CHIP_UNSIGNED);
						ChipAddField(hTuner->Chip,RTDM1300_STATUS,FTDM1300_ZERO2,"ZERO2",5,1,CHIP_UNSIGNED);
						ChipAddField(hTuner->Chip,RTDM1300_STATUS,FTDM1300_FONE,"FONE",4,1,CHIP_UNSIGNED);
						ChipAddField(hTuner->Chip,RTDM1300_STATUS,FTDM1300_AGC,"AGC",3,1,CHIP_UNSIGNED);
						ChipAddField(hTuner->Chip,RTDM1300_STATUS,FTDM1300_FIX2,"FIX2",0,3,CHIP_UNSIGNED);
					 }
					}
    		
    		break;
    		case TUNER_DTT7592:
    			/* 						*/
    			hTuner->StepSize = 166667;	/* 166,667 Khz StepSize */
    			hTuner->IF = 36000; 		/* 36 MHz intermediate frequency */
    			hTuner->BandWidth=8;
    			hTuner->BandSelect=Band_UHF;
    			hTuner->IQ_Wiring = TUNER_IQ_NORMAL;   /* No hardware IQ invertion */
    			
			    /* fill elements of external chip data structure */
			    hTunerInitParams->Chip->NbRegs   = DTT7592_NBREGS;
			    hTunerInitParams->Chip->NbFields = DTT7592_NBFIELDS;
			    hTunerInitParams->Chip->ChipMode = STCHIP_MODE_NOSUBADR;
			    hTunerInitParams->Chip->WrStart  = RDTT7592_P_DIV1;
			    hTunerInitParams->Chip->WrSize   = 4;     
			    hTunerInitParams->Chip->RdStart  = RDTT7592_STATUS;     
			    hTunerInitParams->Chip->RdSize   = 1;     

			    if(hTunerInitParams->NbDefVal == DTT7592_NBREGS)
			    {
			        hTuner->Chip = ChipOpen(hTunerInitParams->Chip);

			        if(hTuner->Chip != NULL)
					{
						DefVal = hTuner->DefVal; /*  */    
						
						/*	REGISTER INITIALISATION	*/
						/*	P_DIV1	*/
						ChipAddReg(hTuner->Chip,RDTT7592_P_DIV1,"P_DIV1",0x0000,*DefVal++,STCHIP_ACCESS_W);
						ChipAddField(hTuner->Chip,RDTT7592_P_DIV1,FDTT7592_FIX,"FIX",7,1,CHIP_UNSIGNED);
						ChipAddField(hTuner->Chip,RDTT7592_P_DIV1,FDTT7592_N_MSB,"N_MSB",0,7,CHIP_UNSIGNED);

						/*	P_DIV2	*/
						ChipAddReg(hTuner->Chip,RDTT7592_P_DIV2,"P_DIV2",0x0001,*DefVal++,STCHIP_ACCESS_W);
						ChipAddField(hTuner->Chip,RDTT7592_P_DIV2,FDTT7592_N_LSB,"N_LSB",0,8,CHIP_UNSIGNED);

						/*	CTRL	*/
						ChipAddReg(hTuner->Chip,RDTT7592_CTRL,"CTRL",0x0002,*DefVal++,STCHIP_ACCESS_W);
						ChipAddField(hTuner->Chip,RDTT7592_CTRL,FDTT7592_ONE,"ONE",7,1,CHIP_UNSIGNED);
						ChipAddField(hTuner->Chip,RDTT7592_CTRL,FDTT7592_CP,"CP",6,1,CHIP_UNSIGNED);
						ChipAddField(hTuner->Chip,RDTT7592_CTRL,FDTT7592_T,"T",3,3,CHIP_UNSIGNED);
						ChipAddField(hTuner->Chip,RDTT7592_CTRL,FDTT7592_RS,"RS",1,2,CHIP_UNSIGNED);
						ChipAddField(hTuner->Chip,RDTT7592_CTRL,FDTT7592_ZERO,"ZERO",0,1,CHIP_UNSIGNED);

						/*	BW_AUX	*/
						ChipAddReg(hTuner->Chip,RDTT7592_BW_AUX,"BW_AUX",0x0003,*DefVal++,STCHIP_ACCESS_W);
						ChipAddField(hTuner->Chip,RDTT7592_BW_AUX,FDTT7592_ATC,"ATC",7,1,CHIP_UNSIGNED);
						ChipAddField(hTuner->Chip,RDTT7592_BW_AUX,FDTT7592_BW_AUX,"BW_AUX",0,6,CHIP_UNSIGNED); 
						
						/*	STATUS	*/
						ChipAddReg(hTuner->Chip,RDTT7592_STATUS,"STATUS",0x0004,*DefVal++,STCHIP_ACCESS_R);
						ChipAddField(hTuner->Chip,RDTT7592_STATUS,FDTT7592_POR,"POR",7,1,CHIP_UNSIGNED);
						ChipAddField(hTuner->Chip,RDTT7592_STATUS,FDTT7592_FL,"FL",6,1,CHIP_UNSIGNED);
						ChipAddField(hTuner->Chip,RDTT7592_STATUS,FDTT7592_ONES,"ONES",4,2,CHIP_UNSIGNED);
						ChipAddField(hTuner->Chip,RDTT7592_STATUS,FDTT7592_AGC,"AGC",3,1,CHIP_UNSIGNED);
						ChipAddField(hTuner->Chip,RDTT7592_STATUS,FDTT7592_A,"A",0,3,CHIP_UNSIGNED);

					}
				}
			break;
			
    		case  TUNER_MT2060:
    		    hTuner->StepSize = 50000;	/* 50 Khz StepSize */
    			hTuner->IF = 36000; 		/* 36 MHz intermediate frequency */
    			hTuner->FirstIF =1220; /* In MHz */
    			hTuner->BandWidth=8;
    			hTuner->IQ_Wiring = TUNER_IQ_NORMAL;   /* No hardware IQ invertion */
    
			    /* fill elements of external chip data structure */
			    hTunerInitParams->Chip->NbRegs   = MT2060_NBREGS;
			    hTunerInitParams->Chip->NbFields = MT2060_NBFIELDS;
			    hTunerInitParams->Chip->ChipMode = STCHIP_MODE_SUBADR_8;
			    hTunerInitParams->Chip->WrStart  = RMT2060_LO1C_1;
			    hTunerInitParams->Chip->WrSize   = 17;     
			    hTunerInitParams->Chip->RdStart  = RMT2060_PART_REV;     
			    hTunerInitParams->Chip->RdSize   = 18;     

			    if(hTunerInitParams->NbDefVal == MT2060_NBREGS)
			    {
			        hTuner->Chip = ChipOpen(hTunerInitParams->Chip);

			        if(hTuner->Chip != NULL)
					{
						DefVal = hTuner->DefVal; /*  */ 
						/*	REGISTER INITIALISATION	*/
						/*	PART_REV	*/
						ChipAddReg(hTuner->Chip,RMT2060_PART_REV,"PART_REV",0x0000,*DefVal++,STCHIP_ACCESS_R);
						ChipAddField(hTuner->Chip,RMT2060_PART_REV,FMT2060_PART_REV,"PART_REV",0,8,CHIP_UNSIGNED);

						/*	LO1C_1	*/
						ChipAddReg(hTuner->Chip,RMT2060_LO1C_1,"LO1C_1",0x0001,*DefVal++,STCHIP_ACCESS_WR);
						ChipAddField(hTuner->Chip,RMT2060_LO1C_1,FMT2060_LO1C_1,"LO1C_1",0,8,CHIP_UNSIGNED);

						/*	LO1C_2	*/
						ChipAddReg(hTuner->Chip,RMT2060_LO1C_2,"LO1C_2",0x0002,*DefVal++,STCHIP_ACCESS_WR);
						ChipAddField(hTuner->Chip,RMT2060_LO1C_2,FMT2060_LO1C_2,"LO1C_2",0,8,CHIP_UNSIGNED);

						/*	LO2C_1	*/
						ChipAddReg(hTuner->Chip,RMT2060_LO2C_1,"LO2C_1",0x0003,*DefVal++,STCHIP_ACCESS_WR);
						ChipAddField(hTuner->Chip,RMT2060_LO2C_1,FMT2060_LO2C_1,"LO2C_1",0,8,CHIP_UNSIGNED);

						/*	LO2C_2	*/
						ChipAddReg(hTuner->Chip,RMT2060_LO2C_2,"LO2C_2",0x0004,*DefVal++,STCHIP_ACCESS_WR);
						ChipAddField(hTuner->Chip,RMT2060_LO2C_2,FMT2060_LO2C_2,"LO2C_2",0,8,CHIP_UNSIGNED);

						/*	LO2C_3	*/
						ChipAddReg(hTuner->Chip,RMT2060_LO2C_3,"LO2C_3",0x0005,*DefVal++,STCHIP_ACCESS_WR);
						ChipAddField(hTuner->Chip,RMT2060_LO2C_3,FMT2060_LO2C_3,"LO2C_3",0,8,CHIP_UNSIGNED);

						/*	LO_STATUS	*/
						ChipAddReg(hTuner->Chip,RMT2060_LO_STATUS,"LO_STATUS",0x0006,*DefVal++,STCHIP_ACCESS_R);
						ChipAddField(hTuner->Chip,RMT2060_LO_STATUS,FMT2060_LO_STATUS,"LO_STATUS",0,8,CHIP_UNSIGNED);

						/*	FM_FREQ	*/
						ChipAddReg(hTuner->Chip,RMT2060_FM_FREQ,"FM_FREQ",0x0007,*DefVal++,STCHIP_ACCESS_R);
						ChipAddField(hTuner->Chip,RMT2060_FM_FREQ,FMT2060_FM_FREQ,"FM_FREQ",0,8,CHIP_UNSIGNED);

						/*	MISC_STATUS	*/
						ChipAddReg(hTuner->Chip,RMT2060_MISC_STATUS,"MISC_STATUS",0x0008,*DefVal++,STCHIP_ACCESS_R);
						ChipAddField(hTuner->Chip,RMT2060_MISC_STATUS,FMT2060_MISC_STATUS,"MISC_STATUS",0,8,CHIP_UNSIGNED);

						/*	MISC_CTRL_1	*/
						ChipAddReg(hTuner->Chip,RMT2060_MISC_CTRL_1,"MISC_CTRL_1",0x0009,*DefVal++,STCHIP_ACCESS_WR);
						ChipAddField(hTuner->Chip,RMT2060_MISC_CTRL_1,FMT2060_MISC_CTRL_1,"MISC_CTRL_1",0,8,CHIP_UNSIGNED);

						/*	MISC_CTRL_2	*/
						ChipAddReg(hTuner->Chip,RMT2060_MISC_CTRL_2,"MISC_CTRL_2",0x000a,*DefVal++,STCHIP_ACCESS_WR);
						ChipAddField(hTuner->Chip,RMT2060_MISC_CTRL_2,FMT2060_MISC_CTRL_2,"MISC_CTRL_2",0,8,CHIP_UNSIGNED);

						/*	MISC_CTRL_3	*/
						ChipAddReg(hTuner->Chip,RMT2060_MISC_CTRL_3,"MISC_CTRL_3",0x000b,*DefVal++,STCHIP_ACCESS_WR);

⌨️ 快捷键说明

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