ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

DVB-C TUNER RF_ALPS_TDAE3X 驱动代码指南

2022-01-28 12:00:20  阅读:143  来源: 互联网

标签:ALPS word TDAE3X temp GX ms DVB data fvalue


DVB-C TUNER 驱动代码指南

//请参考《GX1001P软件包说明-V8.2.doc》
//Please refer to <GX1001 Software Developer Kit User's Manual_V8.2>
/*
Abbreviation
    GX		--	GUOXIN 
    IF		--	intermediate frequency
    RF		--  radiate frequency
    SNR		--	signal to noise ratio
    OSC		--	oscillate
    SPEC	--	spectrum
    FREQ	--	frequency
*/

#include "gx1001.h"
#include <stdlib.h>
#if (GX1001_TUNER==RF_ALPS_TDAE3X)

U32  GX_IF_FREQUENCY	   = 36125;	//(tuner carrier center frequency) ( Unit: KHz ) 

U16  GX_TS_OUTPUT_MODE    = 1;        // 1: Parallel output,  0: Serial output
S32  GX_RF_AGC_MIN_VALUE	=0x00; // This parameter is effective only for GX1001B
S32  GX_RF_AGC_MAX_VALUE	=0xff; // This parameter is effective only for GX1001B
S32  GX_IF_AGC_MIN_VALUE	=0x00; // This parameter is effective only for GX1001B
S32  GX_IF_AGC_MAX_VALUE	=0xff; // This parameter is effective only for GX1001B
S32  SFenable=DISABLE;//DISABLE :do not open the sf function,ENABLE:open the sf function
S32  FMenable=ENABLE;//DISABLE:do not open the fm function,ENABLE:opne the fm function
/*============ ============================================================================================================*/
/*========================================================================================================================*/
/*========================= User-defined GX1001 software interface begin =================================================*/
/*========================================================================================================================*/

/*
Function:	Delay N ms
Input:		
        ms_value - delay time (ms)
*/
void GX1001_Delay_N_ms(S32 ms_value)
{
	//User must add the delay function
	gx_timedelay_ms(ms_value); 
}

/*
Function:	Set RF frequency (Unit: KHz)
Input:
        fvalue -- RF frequency (Unit: KHz)
Output:
        SUCCESS or FAILURE
*/
GX_STATE GX_Set_RFFrequency(U32 fvalue)
{
	U8 UCtmp = FAILURE;
	unsigned char data[6];
	unsigned long freq;

	freq=(fvalue+GX_IF_FREQUENCY)*10/625;              /*freq=(fvalue+GX_IF_FREQUENCY)*/
	data[0] = 0xC0;	                                /*Tunner Address*/
	data[1] =(unsigned char)((freq>>8)&0xff);	
	data[2] =(unsigned char)(freq&0xff);	
	data[3] = 0x9B;	/*62.5KHz*/
	data[4] = 0x20;
	data[5] = 0xC6;
		
	if (fvalue < 125000) 
	{
		data[4] |= 0x80;
	}	
	else if ((fvalue >= 125000) && (fvalue<366000)) 
	{
		data[4] |= 0x82;
	}	
	else if ((fvalue >= 366000) && (fvalue<622000)) 
	{
		data[4] |= 0x48;
	}	
	else if ((fvalue >= 622000) && (fvalue<726000)) 
	{
		data[4] |= 0x88;
	}	
	else if (fvalue >= 726000) 
	{
		data[4] |= 0xC8;
	}	

	//if (SUCCESS ==  GX_Set_Tunner_Repeater_Enable(1))	/*open the chip repeater */
	{   
		GX1001_Delay_N_ms(10);
		if (SUCCESS == GXTuner_I2cReadWrite( WRITE, data[0],data[1],&data[2], 4 ))	
		{
			GX1001_Delay_N_ms(10);
			//UCtmp =  GX_Set_Tunner_Repeater_Enable(0);	/*close the chip repeater*/
		}
	}

	//if (SUCCESS == UCtmp)
	{
		GX1001_Delay_N_ms(50);
		UCtmp =  GX_HotReset_CHIP();
	}
	return UCtmp;
}



/*
Function:   Set AGC parameter
Output:
        SUCCESS or FAILURE
*/
GX_STATE GX_Set_AGC_Parameter(void)
{
	 GX_Write_one_Byte( GX_AGC_STD,23);

	int temp=0;
	temp= GX_Read_one_Byte( GX_MODE_AGC);
	if(temp!=FAILURE)
	{
		temp&=0xe6;
		temp=temp+0x10;
		 GX_Write_one_Byte( GX_MODE_AGC,temp);
	}		
	return SUCCESS;
}




/*
Function:   get the signal intensity expressed in percentage
Output:
        The signal Strength value  ( Range is [0,100] )
*/
U8 GX_Get_Signal_Strength(void)
{
    unsigned short iAGC1_word=300,iAGC2_word=300,Amp_Value;
	unsigned short agc1_temp=0,agc2_temp=0;
    
     //the following parameters are specific for certain tuner
    int C0=95;
    int C1=0xb2,	A1=20;
    int C2=204,		A2=0;
    int C3=0x8c,	A3=20;
    int C4=179,		A4=0;
    //-----------------------------------------------
        
	int i=0;

	while (i<40)
	{
		agc1_temp = GX_Read_one_Byte( GX_AGC1_CTRL);
		agc2_temp = GX_Read_one_Byte( GX_AGC2_CTRL);

		
		if ((agc1_temp>0)&&(agc2_temp>0))
		{

			//if ((((agc1_temp - iAGC1_word)<5)||((agc1_temp - iAGC1_word)>-5))&&(((agc2_temp - iAGC2_word)<5)||((agc2_temp - iAGC2_word)>-5)))
			if((abs(agc1_temp - iAGC1_word)<5)&&(abs(agc2_temp - iAGC2_word)<5))
			{
				break;
			}
			
			iAGC1_word = agc1_temp;
			iAGC2_word = agc2_temp;
		}

		GX1001_Delay_N_ms(10);
		i++;

	}

	if (i>=40) 
	{
		iAGC1_word = GX_Read_one_Byte( GX_AGC1_CTRL);
		iAGC2_word = GX_Read_one_Byte( GX_AGC2_CTRL);
	}

	if (iAGC1_word > 0xe4) iAGC1_word = 0xe4;
	Amp_Value = C0 - ((iAGC1_word-C1)*(A1-A2))/(C2-C1) - ((iAGC2_word-C3)*(A3-A4))/(C4-C3);
	return  GX_Change2percent(Amp_Value,0,100);

}         
#endif//(RF_ALPS_TDAE == GX1001_TUNER)



标签:ALPS,word,TDAE3X,temp,GX,ms,DVB,data,fvalue
来源: https://blog.csdn.net/xushx_bigbear/article/details/122729197

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有