DVB-C TUNER RF_TDA18250驱动代码指南
/*
Copyright (C) 2006-2009 NXP B.V., All Rights Reserved.
This source code and any compilation or derivative thereof is the proprietary
information of NXP B.V. and is confidential in nature. Under no circumstances
is this software to be exposed to or placed under an Open Source License of
any type without the expressed written permission of NXP B.V.
*
* \file main.c
*
* 3
*
* \date %modify_time%
*
* \brief Sample application code of the NXP TDA18250 driver.
*
* REFERENCE DOCUMENTS :
* TDA18250_Driver_User_Guide.pdf
*
* Detailed description may be added here.
*
* \section info Change Information
*
*/
//*--------------------------------------------------------------------------------------
//* Include Standard files
//*--------------------------------------------------------------------------------------
#include "tmNxTypes.h"
#include "tmCompId.h"
#include "tmFrontEnd.h"
#include "tmbslFrontEndTypes.h"
#include "gx1001.h"
#include "gxi2c.h"
#include "init_stb.h"
#include "date_time_delay.h"
#include "gx_tuner.h"
#include "sys_printf.h"
//*--------------------------------------------------------------------------------------
//* Include Driver files
//*--------------------------------------------------------------------------------------
#include "tmddTDA18250.h"
#include "tmbslTDA18250.h"
#if (RF_TDA18250 == GX1001_TUNER)
U16 TDA18250_CHIP_ADDRESS = 0xc0; /*TDA18250 RF chip address*/
//*--------------------------------------------------------------------------------------
//* Prototype of function to be provided by customer
//*--------------------------------------------------------------------------------------
tmErrorCode_t UserWrittenI2CRead(tmUnitSelect_t tUnit,UInt32 AddrSize, UInt8* pAddr,UInt32 ReadLen, UInt8* pData);
tmErrorCode_t UserWrittenI2CWrite (tmUnitSelect_t tUnit, UInt32 AddrSize, UInt8* pAddr,UInt32 WriteLen, UInt8* pData);
tmErrorCode_t UserWrittenWait(tmUnitSelect_t tUnit, UInt32 tms);
tmErrorCode_t UserWrittenPrint(UInt32 level, const char* format, ...);
tmErrorCode_t UserWrittenMutexInit(ptmbslFrontEndMutexHandle *ppMutexHandle);
tmErrorCode_t UserWrittenMutexDeInit( ptmbslFrontEndMutexHandle pMutex);
tmErrorCode_t UserWrittenMutexAcquire(ptmbslFrontEndMutexHandle pMutex, UInt32 timeOut);
tmErrorCode_t UserWrittenMutexRelease(ptmbslFrontEndMutexHandle pMutex);
//U16 GX_CHIP_ADDRESS = 0x18; /*GX1001 chip address*/
//U32 GX_OSCILLATE_FREQ = 28636; //(oscillate frequency) ( Unit: KHz )
U32 GX_IF_FREQUENCY = 5000; //(tuner carrier center frequency) ( Unit: KHz )
U16 GX_TS_OUTPUT_MODE = 1; // 1: Parallel output, 0: Serial output
//S32 GX_PLL_M_VALUE =0x0b; // This parameter is effective only for GX1001B
//S32 GX_PLL_N_VALUE =0x00; // This parameter is effective only for GX1001B
//S32 GX_PLL_L_VALUE =0x05; // This parameter is effective only for GX1001B
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 Name : Main
//* Object : Software entry point
//* Input Parameters : none.
//* Output Parameters : none.
//*--------------------------------------------------------------------------------------
GX_STATE GX_Set_RFFrequency(U32 fvalue)
{//* Begin
/* Variable declarations */
static int nTime = 0;
tmErrorCode_t err = TM_OK;
tmbslFrontEndDependency_t sSrvTunerFunc;
tmTDA18250StandardMode_t stdModeMaster = tmTDA18250_DIG_9MHz;
UInt32 uRFMaster = fvalue*1000;
tmbslFrontEndState_t PLLLockMaster = tmbslFrontEndStateUnknown;
UInt32 uIFMaster = 0;
//tmTDA18250StandardMode_t stdModeSlave = tmTDA18250_DIG_7MHz;
// UInt32 uRFSlave = 546000000;
//tmbslFrontEndState_t PLLLockSlave = tmbslFrontEndStateUnknown;
// UInt32 uIFSlave = 0;
/* Low layer struct set-up to link with user written functions */
sSrvTunerFunc.sIo.Write = UserWrittenI2CWrite;
sSrvTunerFunc.sIo.Read = UserWrittenI2CRead;
sSrvTunerFunc.sTime.Get = Null;
sSrvTunerFunc.sTime.Wait = UserWrittenWait;
sSrvTunerFunc.sDebug.Print = UserWrittenPrint;
sSrvTunerFunc.sMutex.Init = UserWrittenMutexInit;
sSrvTunerFunc.sMutex.DeInit = UserWrittenMutexDeInit;
sSrvTunerFunc.sMutex.Acquire = UserWrittenMutexAcquire;
sSrvTunerFunc.sMutex.Release = UserWrittenMutexRelease;
sSrvTunerFunc.dwAdditionalDataSize = 0;
sSrvTunerFunc.pAdditionalData = Null;
if(nTime == 0)
{
/* TDA18250 Master Driver low layer setup */
err = tmbslTDA18250Init(0, &sSrvTunerFunc);
//if(err != TM_OK)
// return err;
/* TDA18250 Slave Driver low layer setup */
// err = tmbslTDA18250Init(1, &sSrvTunerFunc);
// if(err != TM_OK)
// return err;
/* TDA18250 Master Hardware initialization */
err = tmbslTDA18250Reset(0);
// if(err != TM_OK)
// return err;
nTime = 1;
}
/* TDA18250 Master Hardware power state */
err = tmbslTDA18250SetPowerState(0, tmTDA18250_PowerNormalMode);
/* TDA18250 Slave Hardware initialization */
// err = tmbslTDA18250Reset(1);
// if(err != TM_OK)
// return err;
/* TDA18250 Slave Hardware power state */
// err = tmbslTDA18250SetPowerState(1, tmTDA18250_PowerNormalMode);
//tmbslTDA18250SetIfLevel(0 , 2);
/* TDA18250 Master standard mode */
err = tmbslTDA18250SetStandardMode(0, stdModeMaster);
//if(err != TM_OK)
// return err;
/* TDA18250 Master RF frequency */
err = tmbslTDA18250SetRf(0, uRFMaster);
// if(err != TM_OK)
// return err;
/* Get TDA18250 Master PLL Lock status */
err = tmbslTDA18250GetLockStatus(0, &PLLLockMaster);
//if(err != TM_OK)
// return err;
/* Get TDA18250 Master IF */
err = tmbslTDA18250GetIF(0, &uIFMaster);
//if(err != TM_OK)
// return err;
/* TDA18250 Slave standard mode */
// err = tmbslTDA18250SetStandardMode(1, stdModeSlave);
// if(err != TM_OK)
// return err;
/* TDA18250 Slave RF frequency */
// err = tmbslTDA18250SetRf(1, uRFSlave);
// if(err != TM_OK)
// return err;
/* Get TDA18250 Slave PLL Lock status */
// err = tmbslTDA18250GetLockStatus(1, &PLLLockSlave);
// if(err != TM_OK)
// return err;
/* Get TDA18250 Slave IF */
// err = tmbslTDA18250GetIF(1, &uIFSlave);
// if(err != TM_OK)
// return err;
/* To clean TDA18250 driver */
/* DeInitialize TDA18250 Slave Driver */
// err = tmbslTDA18250DeInit(1);
/* DeInitialize TDA18250 Master Driver */
// return err;
// BSP_PRINTF("lw_vSS I 0x%x 0x%x 0x%x\n", SMB_DATA_IN[0] ,SMB_DATA_IN[1],SMB_DATA_IN[2]);
//GX_Delay_N_ms(600);// GX_Delay_N_ms(500);
GX_Delay_N_ms(200);
GX_HotReset_CHIP();
return SUCCESS;
}//* End
/*
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);
}
//CTunersetstandard(11);
GX_Delay_N_ms(100);
//CTunerSetautoVgaGain();
//GX_Delay_N_ms(100);
return SUCCESS;
}
/*
Function: get the signal intensity expressed in percentage
Output:
The signal Strength value ( Range is [0,100] )
*/
unsigned char GX_Get_Signal_Strength(void)
{
signed 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;
}
GX_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);
}
//*--------------------------------------------------------------------------------------
//* Template of function to be provided by customer
//*--------------------------------------------------------------------------------------
//*--------------------------------------------------------------------------------------
//* Function Name : UserWrittenI2CRead
//* Object :
//* Input Parameters : tmUnitSelect_t tUnit
//* UInt32 AddrSize,
//* UInt8* pAddr,
//* UInt32 ReadLen,
//* UInt8* pData
//* Output Parameters : tmErrorCode_t.
//*--------------------------------------------------------------------------------------
tmErrorCode_t UserWrittenI2CRead(tmUnitSelect_t tUnit, UInt32 AddrSize, UInt8* pAddr,
UInt32 ReadLen, UInt8* pData)
{
/* Variable declarations */
tmErrorCode_t err = TM_OK;
U32 nActReadLen = 0;
//BSP_PRINTF("R:AddrSize:%d pAddr:%02X ReadLen:%d\n", AddrSize, pAddr[0], ReadLen);
if (SUCCESS == GXTuner_I2cReadWrite( READ,TDA18250_CHIP_ADDRESS,pAddr[0],pData, ReadLen ))
{
//GX_Delay_N_ms(10);
}
return err;
}
//*--------------------------------------------------------------------------------------
//* Function Name : UserWrittenI2CWrite
//* Object :
//* Input Parameters : tmUnitSelect_t tUnit
//* UInt32 AddrSize,
//* UInt8* pAddr,
//* UInt32 WriteLen,
//* UInt8* pData
//* Output Parameters : tmErrorCode_t.
//*--------------------------------------------------------------------------------------
tmErrorCode_t UserWrittenI2CWrite (tmUnitSelect_t tUnit, UInt32 AddrSize, UInt8* pAddr,
UInt32 WriteLen, UInt8* pData)
{
/* Variable declarations */
tmErrorCode_t err = TM_OK;
//SYS_PRINTF("W:AddrSize:%d pAddr:%02X data:%02X WriteLen:%d\n", AddrSize, pAddr[0], pData[0], WriteLen);
/* Customer code here */
/* ...*/
U8 UNum=0;
u8 UCtmp = FAILURE;
if (SUCCESS == GXTuner_I2cReadWrite( WRITE,TDA18250_CHIP_ADDRESS ,pAddr[0],pData, WriteLen ))
{
//GX_Delay_N_ms(10);
}
if (SUCCESS == UCtmp)
{
//GX_Delay_N_ms(50);
//UCtmp = GX_HotReset_CHIP();
}
/* ...*/
/* End of Customer code here */
return err;
}
//*--------------------------------------------------------------------------------------
//* Function Name : UserWrittenWait
//* Object :
//* Input Parameters : tmUnitSelect_t tUnit
//* UInt32 tms
//* Output Parameters : tmErrorCode_t.
//*--------------------------------------------------------------------------------------
tmErrorCode_t UserWrittenWait(tmUnitSelect_t tUnit, UInt32 tms)
{
/* Variable declarations */
tmErrorCode_t err = TM_OK;
/* Customer code here */
/* ...*/
GX_Delay_N_ms(tms);
/* ...*/
/* End of Customer code here */
return err;
}
//*--------------------------------------------------------------------------------------
//* Function Name : UserWrittenPrint
//* Object :
//* Input Parameters : UInt32 level, const char* format, ...
//*
//* Output Parameters : tmErrorCode_t.
//*--------------------------------------------------------------------------------------
tmErrorCode_t UserWrittenPrint(UInt32 level, const char* format, ...)
{
/* Variable declarations */
tmErrorCode_t err = TM_OK;
/* Customer code here */
/* ...*/
//BSP_PRINTF(format);
/* ...*/
/* End of Customer code here */
return err;
}
//*--------------------------------------------------------------------------------------
//* Function Name : UserWrittenMutexInit
//* Object :
//* Input Parameters : ptmbslFrontEndMutexHandle *ppMutexHandle
//* Output Parameters : tmErrorCode_t.
//*--------------------------------------------------------------------------------------
tmErrorCode_t UserWrittenMutexInit(ptmbslFrontEndMutexHandle *ppMutexHandle)
{
/* Variable declarations */
tmErrorCode_t err = TM_OK;
/* Customer code here */
/* ...*/
/* ...*/
/* End of Customer code here */
return err;
}
//*--------------------------------------------------------------------------------------
//* Function Name : UserWrittenMutexDeInit
//* Object :
//* Input Parameters : ptmbslFrontEndMutexHandle pMutex
//* Output Parameters : tmErrorCode_t.
//*--------------------------------------------------------------------------------------
tmErrorCode_t UserWrittenMutexDeInit( ptmbslFrontEndMutexHandle pMutex)
{
/* Variable declarations */
tmErrorCode_t err = TM_OK;
/* Customer code here */
/* ...*/
/* ...*/
/* End of Customer code here */
return err;
}
//*--------------------------------------------------------------------------------------
//* Function Name : UserWrittenMutexAcquire
//* Object :
//* Input Parameters : ptmbslFrontEndMutexHandle pMutex, UInt32 timeOut
//* Output Parameters : tmErrorCode_t.
//*--------------------------------------------------------------------------------------
tmErrorCode_t UserWrittenMutexAcquire(ptmbslFrontEndMutexHandle pMutex, UInt32 timeOut)
{
/* Variable declarations */
tmErrorCode_t err = TM_OK;
/* Customer code here */
/* ...*/
/* ...*/
/* End of Customer code here */
return err;
}
//*--------------------------------------------------------------------------------------
//* Function Name : UserWrittenMutexRelease
//* Object :
//* Input Parameters : ptmbslFrontEndMutexHandle pMutex
//* Output Parameters : tmErrorCode_t.
//*--------------------------------------------------------------------------------------
tmErrorCode_t UserWrittenMutexRelease(ptmbslFrontEndMutexHandle pMutex)
{
/* Variable declarations */
tmErrorCode_t err = TM_OK;
/* Customer code here */
/* ...*/
/* ...*/
/* End of Customer code here */
return err;
}
#endif
文章来源: blog.csdn.net,作者:悟空胆好小,版权归原作者所有,如需转载,请联系作者。
原文链接:blog.csdn.net/xushx_bigbear/article/details/122730166
- 点赞
- 收藏
- 关注作者
评论(0)