DVB-C TUNER RF_TDA18250驱动代码指南

举报
aiot_bigbear 发表于 2022/09/25 02:01:21 2022/09/25
【摘要】 /*   Copyright (C) 2006-2009 NXP B.V., All Rights Reserved.   This source code and any compilation or derivative thereof is the proprietary   information ...

/*
  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

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。