📄 dcf_drv.c
字号:
/* 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 + -