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

📄 dcf_drv.c

📁 机顶盒解调芯片DCF8722驱动
💻 C
📖 第 1 页 / 共 5 页
字号:
/*  PARAMETERS:  pNim - pointer to DCF_NIM struct.                           */
/*                                                                           */
/*  DESCRIPTION: The function clears the counters, and then enables them     */
/*               by programming the CT_CLEAR bit of RS_DESC_15 register.     */
/*                                                                           */
/*  RETURNS:     True if successful, False if unsuccessful.                  */
/*                                                                           */
/*  CONTEXT:     Can be called from a non-interrupt or an interrupt context. */
/*                                                                           */
/*****************************************************************************/
bool DCF_DRIVER_Start_CT(DCF_NIM *pNim)
{
	unsigned char   u8Data;
	bool            bRetVal;
	
	/* sanity check */
	if(pNim == NULL)
	   return(False);
	   
   /* Firstly, clear all counters */
   gDemReg[ST0_RID_RS_DESC_15].value = gDemReg[ST0_RID_RS_DESC_15].value & 0xFE;
   u8Data = gDemReg[ST0_RID_RS_DESC_15].value;
   bRetVal= DCF_RegWrite(pNim, gDemReg[ST0_RID_RS_DESC_15].addr, 1, &u8Data, DCF_DEMOD_I2C);
   if(bRetVal == False)
      return(False);
      
   /* Then, enable all counters */
   gDemReg[ST0_RID_RS_DESC_15].value = gDemReg[ST0_RID_RS_DESC_15].value | 0x01;
   u8Data = gDemReg[ST0_RID_RS_DESC_15].value;
   bRetVal= DCF_RegWrite(pNim, gDemReg[ST0_RID_RS_DESC_15].addr, 1, &u8Data, DCF_DEMOD_I2C);

   return(bRetVal);
}

/*****************************************************************************/
/*  FUNCTION:    DCF_DRIVER_Reload_Regs                                      */
/*                                                                           */
/*  PARAMETERS:  pNim  - pointer to the DCF_NIM structure.                   */
/*                                                                           */
/*  DESCRIPTION: This function reloads all of STV0297 internal registers     */
/*               with the stored values.                                     */
/*                                                                           */
/*  RETURNS:     True if successful, False if unsuccessful.                  */
/*                                                                           */
/*  CONTEXT:     Must be called from a non-interrupt context.                */
/*                                                                           */
/*****************************************************************************/
bool DCF_DRIVER_Reload_Regs(DCF_NIM *pNim)
{
   unsigned char   u8Index;
   unsigned char   u8RegData;
   bool   bRetVal ;

   for(u8Index = 0; u8Index < (DCF_REG_NUM); u8Index++)
   {
      if( gDemReg[u8Index].wflag )
      {
         gDemReg[u8Index].value = gDemReg[u8Index].store;
         bRetVal = DCF_RegWrite(pNim,gDemReg[u8Index].addr,1,&u8RegData,DCF_DEMOD_I2C);
         if(!bRetVal)
         {
            return(False);
         }
      }
   }
   return(True);
}

/*****************************************************************************/
/*  FUNCTION:    DCF_DRIVER_Set_ITU_J83_Mode                                 */
/*                                                                           */
/*  PARAMETERS:  pNim - pointer to DCF_NIM struct.                           */
/*               u8Mode  - ITU-J83 mode (DCF_ITU_J83A / DCF_ITU_J83C).       */
/*                                                                           */
/*  DESCRIPTION: The function sets the ITU-J83 mode                          */
/*               by programming the J83C bit of CTRL_3 register.             */
/*                                                                           */
/*  RETURNS:     True if successful, False if unsuccessful.                  */
/*                                                                           */
/*  CONTEXT:     Must be called from a non-interrupt context.                */
/*                                                                           */
/*****************************************************************************/
bool DCF_DRIVER_Set_ITU_J83_Mode(DCF_NIM *pNim, unsigned char u8Mode)
{
   bool            bRetval;
   unsigned char   u8RegData;

   /* sanity check */
   if(pNim == NULL)
   {
      return(False);
   }

   if(u8Mode == DCF_ITU_J83C)
   {
      gDemReg[ST0_RID_CTRL_3].value = gDemReg[ST0_RID_CTRL_3].value | 0x01;
   }
   else
   {
      gDemReg[ST0_RID_CTRL_3].value = gDemReg[ST0_RID_CTRL_3].value & 0xFE;
   }

   u8RegData = gDemReg[ST0_RID_CTRL_3].value;
   
   bRetval = DCF_RegWrite(pNim, gDemReg[ST0_RID_CTRL_3].addr, 1, &u8RegData, DCF_DEMOD_I2C);

   return(True);
}

/*****************************************************************************/
/*  FUNCTION:    DCF_DRIVER_Get_ITU_J83_Mode                                 */
/*                                                                           */
/*  PARAMETERS:  pNim - pointer to DCF_NIM struct.                           */
/*               pu8Data - the pointer to the return data.                   */
/*                       (DCF_ITU_J83A / DCF_ITU_J83C).                      */
/*                                                                           */
/*  DESCRIPTION: The function gets the ITU-J83 mode                          */
/*               by reading the J83C bit of CTRL_3 register.                 */
/*                                                                           */
/*  RETURNS:     True if successful, False if unsuccessful.                  */
/*                                                                           */
/*  CONTEXT:     Must be called from a non-interrupt context.                */
/*                                                                           */
/*****************************************************************************/
bool DCF_DRIVER_Get_ITU_J83_Mode(DCF_NIM *pNim, unsigned char *pu8Data)
{
   bool   bRetVal;

   /* sanity check */
   if((pNim == NULL) || (pu8Data == NULL))
   {
      return(False);
   }

   bRetVal = DCF_RegRead(pNim, gDemReg[ST0_RID_CTRL_3].addr, 1, pu8Data, DCF_DEMOD_I2C);
   if(!bRetVal)
   {
      return(False);
   }

   gDemReg[ST0_RID_CTRL_3].value = *pu8Data;

   if ( gDemReg[ST0_RID_CTRL_3].value & 0x01 )
   {
      *pu8Data = DCF_ITU_J83C;
   }
   else
   {
      *pu8Data = DCF_ITU_J83A;
   }
   return(True);
}

/*****************************************************************************/
/*  FUNCTION:    DCF_DRIVER_Get_Modulation                                   */
/*                                                                           */
/*  PARAMETERS:  pNim - pointer to DCF_NIM struct.                           */
/*               pu8Data - the pointer to the return data.                   */
/*                                                                           */
/*  DESCRIPTION: The function gets the QAM mode                              */
/*               by reading the MODE_SELECT bits of EQU_0 register.          */
/*                                                                           */
/*  RETURNS:     True if successful, False if unsuccessful.                  */
/*                                                                           */
/*  CONTEXT:     Must be called from a non-interrupt context.                */
/*                                                                           */
/*****************************************************************************/
bool DCF_DRIVER_Get_Modulation(DCF_NIM *pNim, unsigned char *pu8Data)
{
   bool   bRetVal;

   /* sanity check */
   if((pNim == NULL) || (pu8Data == NULL))
   {
      return(False);
   }
   
   bRetVal = DCF_RegRead(pNim, gDemReg[ST0_RID_EQU_0].addr, 1, pu8Data, DCF_DEMOD_I2C);
   if(!bRetVal)
   {
      return(False);
   }
   
   gDemReg[ST0_RID_EQU_0].value = *pu8Data;
   *pu8Data = ((gDemReg[ST0_RID_EQU_0].value & 0x70) >> 4);
   return(True);
}

/*****************************************************************************/
/*  FUNCTION:    DCF_DRIVER_Get_Noise_Accumulator                            */
/*                                                                           */
/*  PARAMETERS:  pNim - pointer to DCF_NIM struct.                           */
/*               pu8Data - the pointer to the return data.                   */
/*                                                                           */
/*  DESCRIPTION: The function gets the 16-bit noise estimation accumulator   */
/*               by reading the EQU_7 & EQU_8 registers.                     */
/*                                                                           */
/*  RETURNS:     True if successful, False if unsuccessful.                  */
/*                                                                           */
/*  CONTEXT:     Must be called from a non-interrupt context.                */
/*                                                                           */
/*****************************************************************************/
bool DCF_DRIVER_Get_Noise_Accumulator(DCF_NIM *pNim, unsigned short *pu16Data)
{
   unsigned short   u16Temp;
   bool             bRetVal;
   unsigned char    u8RegData;
   
   /* sanity check */
   if((pNim == NULL) || (pu16Data == NULL))
   {
      return(False);
   }
   
   bRetVal = DCF_RegRead(pNim, gDemReg[ST0_RID_EQU_7].addr, 1, &u8RegData, DCF_DEMOD_I2C);
   if(!bRetVal)
   {
      return(False);
   }
   gDemReg[ST0_RID_EQU_7].value = u8RegData;

   bRetVal = DCF_RegRead(pNim, gDemReg[ST0_RID_EQU_8].addr, 1, &u8RegData, DCF_DEMOD_I2C);
   if(!bRetVal)
   {
      return(False);
   }
   gDemReg[ST0_RID_EQU_8].value = u8RegData;
      
   u16Temp  = ((unsigned short)(gDemReg[ST0_RID_EQU_8].value) << 8);
   u16Temp += (unsigned short)(gDemReg[ST0_RID_EQU_7].value);
   *pu16Data = u16Temp;
   return (True);
}

/*****************************************************************************/
/*  FUNCTION:    DCF_DRIVER_Get_Symbol_Rate                                  */
/*                                                                           */
/*  PARAMETERS:  pNim - pointer to DCF_NIM struct.                           */
/*               pu32Data - the pointer to the return data.                  */
/*                                                                           */
/*  DESCRIPTION: The function gets 32-bit symbol timing frequency            */
/*               by reading STLOOP_5 / STLOOP_6 / STLOOP_7 / STLOOP_8 REGs.  */
/*                                                                           */
/*  RETURNS:     True if successful, False if unsuccessful.                  */
/*                                                                           */
/*  CONTEXT:     Must be called from a non-interrupt context.                */
/*                                                                           */
/*****************************************************************************/
bool DCF_DRIVER_Get_Symbol_Rate (DCF_NIM *pNim, unsigned long *pu32Data)
{
   unsigned long   uTemp;
   unsigned char   u8RegData[4];
   bool            bRetVal;
   
   /* sanity check */
   if((pNim == NULL) || (pu32Data == NULL))
   {
      return (False);
   }
    bRetVal = DCF_RegRead(pNim, gDemReg[ST0_RID_STLOOP_5].addr, 4, u8RegData, DCF_DEMOD_I2C);
   if(!bRetVal)
   {
      return (False);
   }
   
   gDemReg[ST0_RID_STLOOP_5].value = u8RegData[0];
   gDemReg[ST0_RID_STLOOP_6].value = u8RegData[1];
   gDemReg[ST0_RID_STLOOP_7].value = u8RegData[2];
   gDemReg[ST0_RID_STLOOP_8].value = u8RegData[3];
   
   uTemp = ((unsigned long)(gDemReg[ST0_RID_STLOOP_8].value) << 24);
   uTemp += ((unsigned long)(gDemReg[ST0_RID_STLOOP_7].value) << 16);
   uTemp += ((unsigned long)(gDemReg[ST0_RID_STLOOP_6].value) << 8);
   uTemp += (unsigned long)(gDemReg[ST0_RID_STLOOP_5].value);
   *pu32Data = uTemp;
   return (True);
}

/*****************************************************************************/
/*  FUNCTION:    DCF_DRIVER_Init_Bert                                        */
/*                                                                           */
/*  PARAMETERS:  pNim - pointer to DCF_NIM struct.                           */

⌨️ 快捷键说明

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