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

📄 drx3973d.c

📁 用于DRX3973或DRX39系列的芯片的控制
💻 C
📖 第 1 页 / 共 5 页
字号:

   WR16( devAddr, CE_REG_TI_NEXP_OFFS__A        ,0x0000, 0x0000);
   WR16( devAddr, CE_REG_COMM_EXEC__A           ,0x0001, 0x0000); /* start ce */

#endif /* DRXD_TYPE_A */

#if (DRXD_TYPE_B)

   devAddr = demod -> myI2CDevAddr;

   WR16( devAddr, CE_REG_TI_PHN_ENABLE__A       ,0x0001, 0x0000);
   WR16( devAddr, CE_REG_FR_PM_SET__A           ,0x000D, 0x0000);

   WR16( devAddr, CE_REG_COMM_EXEC__A           ,0x0001, 0x0000); /* start ce */

#endif   /* DRXD_TYPE_B */

   return (DRX_STS_OK);

 rw_error:
   return (DRX_STS_ERROR);
}

/*============================================================================*/

/**
* \fn DRXStatus_t InitEQ( const pDRXDemodInstance_t demod )

* \brief
* \param demod pointer to demod data.
* \return DRXStatus_t Return status.
*\retval DRX_STS_OK Success.
*\retval DRX_STS_ERROR Failure.
*/
static DRXStatus_t
InitEQ( const pDRXDemodInstance_t demod )
{
   pI2CDeviceAddr_t devAddr=NULL;

#if (DRXD_TYPE_A)

   static u8_t resetData1[] =
   {  0x1E,0x00, /* EQ_REG_OT_QNT_THRES0__A        */
      0x1F,0x00, /* EQ_REG_OT_QNT_THRES1__A        */
      0x06,0x00, /* EQ_REG_OT_CSI_STEP__A          */
      0x02,0x00  /* EQ_REG_OT_CSI_OFFSET__A        */
   };
   devAddr = demod -> myI2CDevAddr;

   WRBLOCK( devAddr, EQ_REG_OT_QNT_THRES0__A    , sizeof(resetData1), resetData1 );

   WR16( devAddr, EQ_REG_TD_REQ_SMB_CNT__A            ,0x0200, 0x0000);
   WR16( devAddr, EQ_REG_IS_CLIP_EXP__A               ,0x001F, 0x0000);
   WR16( devAddr, EQ_REG_SN_OFFSET__A                  ,-7    , 0x0000);
   WR16( devAddr, EQ_REG_RC_SEL_CAR__A                ,0x0002, 0x0000);
   WR16( devAddr, EQ_REG_COMM_EXEC__A                 ,0x0001, 0x0000);

#endif /* DRXD_TYPE_A */

#if (DRXD_TYPE_B)

   devAddr = demod -> myI2CDevAddr;

   WR16( devAddr, EQ_REG_COMM_EXEC__A                 ,0x0001, 0x0000);

#endif   /* DRXD_TYPE_B */

   return (DRX_STS_OK);

 rw_error:
   return (DRX_STS_ERROR);
}

/*============================================================================*/

/**
* \fn DRXStatus_t InitEC( const pDRXDemodInstance_t demod )
* \brief
* \param demod pointer to demod data.
* \return DRXStatus_t Return status.
*\retval DRX_STS_OK Success.
*\retval DRX_STS_ERROR Failure.
*/
static DRXStatus_t
InitEC( const pDRXDemodInstance_t demod )
{
   pI2CDeviceAddr_t devAddr=NULL;
   pDRX3973DData_t  extAttr=NULL;

#if (DRXD_TYPE_A)

   static u8_t resetData1[] =
   {  0x1F,0x00, /* EC_SB_REG_CSI_HI__A            */
      0x1E,0x00, /* EC_SB_REG_CSI_LO__A            */
      0x01,0x00, /* EC_SB_REG_SMB_TGL__A           */
      0x7F,0x00, /* EC_SB_REG_SNR_HI__A            */
      0x7F,0x00, /* EC_SB_REG_SNR_MID__A           */
      0x7F,0x00  /* EC_SB_REG_SNR_LO__A            */
   };

   static u8_t resetData2[] =
   {  0x00,0x10, /* EC_RS_REG_REQ_PCK_CNT__A       */
      (EC_RS_REG_VAL_PCK&0xFF),(EC_RS_REG_VAL_PCK>>8)
                 /* EC_RS_REG_VAL__A               */
   };

   static u8_t resetData3[] =
   {  0x03,0x00, /* EC_OC_REG_TMD_TOP_MODE__A      */
      0xF4,0x01, /* EC_OC_REG_TMD_TOP_CNT__A       */
      0xC0,0x03, /* EC_OC_REG_TMD_HIL_MAR__A       */
      0x40,0x00, /* EC_OC_REG_TMD_LOL_MAR__A       */
      0x03,0x00  /* EC_OC_REG_TMD_CUR_CNT__A       */
   };

   static u8_t resetData4[] =
   {  0x06,0x00, /* EC_OC_REG_AVR_ASH_CNT__A       */
      0x02,0x00  /* EC_OC_REG_AVR_BSH_CNT__A       */
   };

   static u8_t resetData5[] =
   {  0x07,0x00, /* EC_OC_REG_RCN_MODE__A          */
      0x00,0x00, /* EC_OC_REG_RCN_CRA_LOP__A       */
      0xc0,0x00, /* EC_OC_REG_RCN_CRA_HIP__A       */
      0x00,0x10, /* EC_OC_REG_RCN_CST_LOP__A       */
      0x00,0x00, /* EC_OC_REG_RCN_CST_HIP__A       */
      0xFF,0x01, /* EC_OC_REG_RCN_SET_LVL__A       */
      0x0A,0x00  /* EC_OC_REG_RCN_GAI_LVL__A       */
   };

   static u8_t resetData6[] =
   {  0xFF,0xFF, /* EC_OC_REG_RCN_CLP_LOP__A       */
      0xFF,0x00  /* EC_OC_REG_RCN_CLP_HIP__A       */
   };


   devAddr = demod -> myI2CDevAddr;
   extAttr = (pDRX3973DData_t) demod -> myExtAttr;

   WRBLOCK( devAddr, EC_SB_REG_CSI_HI__A        , sizeof(resetData1), resetData1 );
   WRBLOCK( devAddr, EC_RS_REG_REQ_PCK_CNT__A   , sizeof(resetData2), resetData2 );
   WRBLOCK( devAddr, EC_OC_REG_TMD_TOP_MODE__A  , sizeof(resetData3), resetData3 );
   WRBLOCK( devAddr, EC_OC_REG_AVR_ASH_CNT__A   , sizeof(resetData4), resetData4 );
   WRBLOCK( devAddr, EC_OC_REG_RCN_MODE__A      , sizeof(resetData5), resetData5 );
   WRBLOCK( devAddr, EC_OC_REG_RCN_CLP_LOP__A   , sizeof(resetData6), resetData6 );

   WR16( devAddr, EC_SB_REG_CSI_OFS__A          , 0x0001, 0x0000);
   WR16( devAddr, EC_VD_REG_FORCE__A            , 0x0002, 0x0000);
   WR16( devAddr, EC_VD_REG_REQ_SMB_CNT__A      , 0x0001, 0x0000);
   WR16( devAddr, EC_VD_REG_RLK_ENA__A          , 0x0001, 0x0000);
   WR16( devAddr, EC_OD_REG_SYNC__A             , 0x0664 , 0x0000);
   WR16( devAddr, EC_OC_REG_OC_MON_SIO__A       , 0x0000, 0x0000);
   WR16( devAddr, EC_OC_REG_SNC_ISC_LVL__A      , 0x0422, 0x0000);
   if ( (extAttr->consumerDevice) == TRUE )
   {
      /* Output zero on monitorbus pads, power saving */
      WR16( devAddr, EC_OC_REG_OCR_MON_UOS__A       ,
                  ( EC_OC_REG_OCR_MON_UOS_DAT_0_ENABLE |
                    EC_OC_REG_OCR_MON_UOS_DAT_1_ENABLE |
                    EC_OC_REG_OCR_MON_UOS_DAT_2_ENABLE |
                    EC_OC_REG_OCR_MON_UOS_DAT_3_ENABLE |
                    EC_OC_REG_OCR_MON_UOS_DAT_4_ENABLE |
                    EC_OC_REG_OCR_MON_UOS_DAT_5_ENABLE |
                    EC_OC_REG_OCR_MON_UOS_DAT_6_ENABLE |
                    EC_OC_REG_OCR_MON_UOS_DAT_7_ENABLE |
                    EC_OC_REG_OCR_MON_UOS_DAT_8_ENABLE |
                    EC_OC_REG_OCR_MON_UOS_DAT_9_ENABLE |
                    EC_OC_REG_OCR_MON_UOS_VAL_ENABLE   |
                    EC_OC_REG_OCR_MON_UOS_CLK_ENABLE ), 0x0000);
      WR16( devAddr, EC_OC_REG_OCR_MON_WRI__A,
                        EC_OC_REG_OCR_MON_WRI_INIT, 0x0000);
   }

   WR16( devAddr, EC_SB_REG_COMM_EXEC__A       ,  0x0001, 0x0000);
   WR16( devAddr, EC_VD_REG_COMM_EXEC__A        , 0x0001, 0x0000);
   WR16( devAddr, EC_OD_REG_COMM_EXEC__A        , 0x0001, 0x0000);
   WR16( devAddr, EC_RS_REG_COMM_EXEC__A        , 0x0001, 0x0000);
   WR16( devAddr, EC_OC_REG_COMM_EXEC__A        , 0x0001, 0x0000);

#endif /* DRXD_TYPE_A */

#if (DRXD_TYPE_B)

   devAddr = demod -> myI2CDevAddr;
   extAttr = (pDRX3973DData_t) demod -> myExtAttr;

   WR16( devAddr, EC_SB_REG_CSI_OFS0__A         ,0x0001 , 0x0000);
   WR16( devAddr, EC_SB_REG_CSI_OFS1__A         ,0x0001 , 0x0000);
   WR16( devAddr, EC_SB_REG_CSI_OFS2__A         ,0x0001 , 0x0000);
   WR16( devAddr, EC_SB_REG_CSI_LO__A           ,0x000c , 0x0000);
   WR16( devAddr, EC_SB_REG_CSI_HI__A           ,0x0018 , 0x0000);
   WR16( devAddr, EC_SB_REG_SNR_HI__A           ,0x007f , 0x0000);
   WR16( devAddr, EC_SB_REG_SNR_MID__A          ,0x007f , 0x0000);
   WR16( devAddr, EC_SB_REG_SNR_LO__A           ,0x007f , 0x0000);

   WR16( devAddr, EC_OC_REG_DTO_CLKMODE__A      ,0x0002 , 0x0000);
   WR16( devAddr, EC_OC_REG_DTO_PER__A          ,0x0006 , 0x0000);
   WR16( devAddr, EC_OC_REG_DTO_BUR__A          ,0x0001 , 0x0000);
   WR16( devAddr, EC_OC_REG_RCR_CLKMODE__A      ,0x0000 , 0x0000);
   WR16( devAddr, EC_OC_REG_RCN_GAI_LVL__A      ,0x000D , 0x0000);
   WR16( devAddr, EC_OC_REG_OC_MPG_SIO__A       ,0x0000 , 0x0000);

   /* Needed because shadow registers do not have correct default value */
   WR16( devAddr, EC_OC_REG_RCN_CST_LOP__A      ,0x1000 , 0x0000);
   WR16( devAddr, EC_OC_REG_RCN_CST_HIP__A      ,0x0000 , 0x0000);
   WR16( devAddr, EC_OC_REG_RCN_CRA_LOP__A      ,0x0000 , 0x0000);
   WR16( devAddr, EC_OC_REG_RCN_CRA_HIP__A      ,0x00C0 , 0x0000);
   WR16( devAddr, EC_OC_REG_RCN_CLP_LOP__A      ,0x0000 , 0x0000);
   WR16( devAddr, EC_OC_REG_RCN_CLP_HIP__A      ,0x00C0 , 0x0000);
   WR16( devAddr, EC_OC_REG_DTO_INC_LOP__A      ,0x0000 , 0x0000);
   WR16( devAddr, EC_OC_REG_DTO_INC_HIP__A      ,0x00C0 , 0x0000);

   WR16( devAddr, EC_OD_REG_SYNC__A             ,0x0664 , 0x0000);
   WR16( devAddr, EC_RS_REG_REQ_PCK_CNT__A      ,0x1000  , 0x0000);
   WR16( devAddr, EC_COMM_EXEC__A               ,0x0001 , 0x0000);

#endif  /* DRXD_TYPE_B */

   return (DRX_STS_OK);

 rw_error:
   return (DRX_STS_ERROR);
}

/*============================================================================*/

/**
* \fn DRXStatus_t ResetEC( const pDRXDemodInstance_t demod )
* \brief
* \param demod pointer to demod data.
* \return DRXStatus_t Return status.
*\retval DRX_STS_OK Success.
*\retval DRX_STS_ERROR Failure.
*/

#if DRXD_TYPE_A

static DRXStatus_t
ResetEC( const pDRXDemodInstance_t demod )
{
   pI2CDeviceAddr_t devAddr=NULL;
   pDRX3973DData_t  extAttr=NULL;

   static u8_t resetData3[] =
   {  0x03,0x00, /* EC_OC_REG_TMD_TOP_MODE__A      */
      0xF4,0x01, /* EC_OC_REG_TMD_TOP_CNT__A       */
      0xC0,0x03, /* EC_OC_REG_TMD_HIL_MAR__A       */
      0x40,0x00, /* EC_OC_REG_TMD_LOL_MAR__A       */
      0x03,0x00  /* EC_OC_REG_TMD_CUR_CNT__A       */
   };

   static u8_t resetData4[] =
   {  0x06,0x00, /* EC_OC_REG_AVR_ASH_CNT__A       */
      0x02,0x00  /* EC_OC_REG_AVR_BSH_CNT__A       */
   };

   static u8_t resetData5[] =
   {  0x07,0x00, /* EC_OC_REG_RCN_MODE__A          */
      0x00,0x00, /* EC_OC_REG_RCN_CRA_LOP__A       */
      0xc0,0x00, /* EC_OC_REG_RCN_CRA_HIP__A       */
      0x00,0x10, /* EC_OC_REG_RCN_CST_LOP__A       */
      0x00,0x00, /* EC_OC_REG_RCN_CST_HIP__A       */
      0xFF,0x01, /* EC_OC_REG_RCN_SET_LVL__A       */
      0x0A,0x00  /* EC_OC_REG_RCN_GAI_LVL__A       */
   };

   static u8_t resetData6[] =
   {  0xFF,0xFF, /* EC_OC_REG_RCN_CLP_LOP__A       */
      0xFF,0x00  /* EC_OC_REG_RCN_CLP_HIP__A       */
   };

   devAddr = demod -> myI2CDevAddr;
   extAttr = (pDRX3973DData_t) demod -> myExtAttr;

   WR16( devAddr, EC_OC_REG_COMM_EXEC__A        , 0x0000, 0x0000);
   WR16( devAddr, EC_OD_REG_COMM_EXEC__A        , 0x0000, 0x0000);

   WRBLOCK( devAddr, EC_OC_REG_TMD_TOP_MODE__A  , sizeof(resetData3), resetData3 );
   WRBLOCK( devAddr, EC_OC_REG_AVR_ASH_CNT__A   , sizeof(resetData4), resetData4 );
   WRBLOCK( devAddr, EC_OC_REG_RCN_MODE__A      , sizeof(resetData5), resetData5 );
   WRBLOCK( devAddr, EC_OC_REG_RCN_CLP_LOP__A   , sizeof(resetData6), resetData6 );

   WR16( devAddr, EC_OD_REG_SYNC__A             , 0x0664 , 0x0000);
   WR16( devAddr, EC_OC_REG_OC_MON_SIO__A       , 0x0000, 0x0000);
   WR16( devAddr, EC_OC_REG_SNC_ISC_LVL__A      , 0x0422, 0x0000);
   if ( (extAttr->consumerDevice) == TRUE )
   {
      /* Output zero on monitorbus pads, power saving */
      WR16( devAddr, EC_OC_REG_OCR_MON_UOS__A       ,
                  ( EC_OC_REG_OCR_MON_UOS_DAT_0_ENABLE |
                    EC_OC_REG_OCR_MON_UOS_DAT_1_ENABLE |
                    EC_OC_REG_OCR_MON_UOS_DAT_2_ENABLE |
                    EC_OC_REG_OCR_MON_UOS_DAT_3_ENABLE |
                    EC_OC_REG_OCR_MON_UOS_DAT_4_ENABLE |
                    EC_OC_REG_OCR_MON_UOS_DAT_5_ENABLE |
                    EC_OC_REG_OCR_MON_UOS_DAT_6_ENABLE |
                    EC_OC_REG_OCR_MON_UOS_DAT_7_ENABLE |
                    EC_OC_REG_OCR_MON_UOS_DAT_8_ENABLE |
                    EC_OC_REG_OCR_MON_UOS_DAT_9_ENABLE |
                    EC_OC_REG_OCR_MON_UOS_VAL_ENABLE   |
                    EC_OC_REG_OCR_MON_UOS_CLK_ENABLE ), 0x0000);
      WR16( devAddr, EC_OC_REG_OCR_MON_WRI__A,
                        EC_OC_REG_OCR_MON_WRI_INIT, 0x0000);
   }

   WR16( devAddr, EC_OD_REG_COMM_EXEC__A        , 0x0001, 0x0000);
   WR16( devAddr, EC_OC_REG_COMM_EXEC__A        , 0x0001, 0x0000);

   return (DRX_STS_OK);

 rw_error:
   return (DRX_STS_ERROR);
}
#endif   /* DRXD_TYPE_A */

/*============================================================================*/

/**
* \fn DRXStatus_t InitSC( const pDRXDemodInstance_t demod )
* \brief
* \param demod pointer to demod data.
* \return DRXStatus_t Return status.
*\retval DRX_STS_OK Success.
*\retval DRX_STS_ERROR Failure.
*/
static DRXStatus_t
InitSC( const pDRXDemodInstance_t demod )
{
   pI2CDeviceAddr_t devAddr=NULL;
   devAddr = demod -> myI2CDevAddr;

   /*=================================*/
   /* Reset SC                        */
   /*=================================*/
   WR16( devAddr, SC_CT_REG_COMM_EXEC__A,    0      ,0x0000);
   WR16( devAddr, SC_CT_REG_COMM_STATE__A,   0      ,0x0000);

#ifdef COMPILE_FOR_QT
   WR16( devAddr, SC_RA_RAM_BE_OPT_DELAY__A,      0x100 ,0x0000);
#endif

   /* SC is not started, this is done in SetChannels() */
   return (DRX_STS_OK);

 rw_error:
   return (DRX_STS_ERROR);
}

/*============================================================================*/

#ifdef USE_LC_INIT
/**
* \fn DRXStatus_t InitLC( const pDRXDemodInstance_t demod )
* \brief
* \param demod pointer to demod data.
* \return DRXStatus_t Return status.
*\retval DRX_STS_OK Success.
*\retval DRX_STS_ERROR Failure.
*/
static DRXStatus_t
InitLC( const pDRXDemodInstance_t demod )
{
   pI2CDeviceAddr_t devAddr=NULL;

   /* DRXD_TYPE_A & DRXD_TYPE_B settings */

   static u8_t resetData1[] =
   {  0xE6,0xFF, /* LC_RA_RAM_PROC_DELAY_IF__A  */
      0xE3,0xFF, /* LC_RA_RAM_PROC_DELAY_FS__A  */
#ifdef COMPILE_FOR_QT
      /* LC version 0.1.32 */
      0x00,0x01, /* LC_RA_RAM_LOCK_TH_CRMM__A   */
      0x00,0x05  /* LC_RA_RAM_LOCK_TH_SRMM__A   */
#else
      /* LC version 0.1.67 and higher  */
      0x64,0x00, /* LC_RA_RAM_LOCK_TH_CRMM__A   */
      0x64,0x00  /* LC_RA_RAM_LOCK_TH_SRMM__A   */
#endif
   };

   static u8_t resetData2[] =
   {  0x0F,0x00, /* LC_RA_RAM_MODE_FILTER__A        */
      0x00,0x40, /* LC_RA_RAM_WEIGHT_CP_CRMM__A     */
      0x00,0x40, /* LC_RA_RAM_WEIGHT_CE_CRMM__A     */
      0x00,0x04, /* LC_RA_RAM_GAIN_PHASE__A         */
      0x00,0x04, /* LC_RA_RAM_GAIN_DELAY__A         */
      0xFF,0x7F, /* LC_RA_RAM_THRESHOLD_CRMM__A     */
      0xFF,0x7F, /* LC_RA_RAM_THRESHOLD_SRMM__A     */
      0x00,0x00, /* LC_RA_RAM_OFFSET_ADJUST_CRMM__A */
      0x00,0x00, /* LC_RA_RAM_OFFSET_ADJUST_SRMM__A */
      0x00,0x00, /* LC_R

⌨️ 快捷键说明

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