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

📄 reg0370qam.c

📁 st7710的tuner标准驱动
💻 C
📖 第 1 页 / 共 2 页
字号:
		regsym = regsym / 65536L;		/* 65536L = 2**16 */
		regsym = ExtClk_Khz * regsym;		/* ExtClk in kHz */
		RegSymbolRate = regsym/256L;	/* 256 = 2**8 */
		RegSymbolRate *= 125 ;			/* 125 = 1000/2**3*/
		RegSymbolRate /= 512L ;			/* 512 = 2**9	  */
	}
	else if(regsym < 536870912L)		/* 536870912L = 2**29 */
	/* # 6.25 MBd (clock = 50 MHz) */
	{
		regsym = regsym * 8;				/* 8 = 2**3*/
		regsym = regsym / 65536L;		/* 65536L = 2**16 */
		regsym = ExtClk_Khz * regsym;		/* ExtClk in kHz */
		RegSymbolRate = regsym/256L;	/* 256 = 2**8 */
		RegSymbolRate *= 125 ;			/* 125 = 1000/2**3*/
		RegSymbolRate /= 256L ;			/* 256 = 2**8	  */
	}
	else
	{
		regsym = regsym * 4;				/* 8 = 2**2*/
		regsym = regsym / 65536L;		/* 65536L = 2**16 */
		regsym = ExtClk_Khz * regsym;		/* ExtClk in kHz */ 
		RegSymbolRate = regsym/256L;	/* 256 = 2**8 */
		RegSymbolRate *= 125 ;			/* 125 = 1000/2**3*/
		RegSymbolRate /= 128L ;			/* 128 = 2**7	  */
	}

#ifdef STTUNER_DEBUG_MODULE_CABDRV_REG0370QAM
    STTBX_Print(("%s ==> SR %u\n", identity, RegSymbolRate));
#endif
    return(RegSymbolRate);
}
/*----------------------------------------------------
 FUNCTION      Reg0370QAM_SetSymbolRate
 ACTION	       Sets the symbol rate	
           
 PARAMS IN     
 PARAMS OUT    
 RETURN        
------------------------------------------------------*/
ST_ErrorCode_t	Reg0370QAM_SetSymbolRate(STTUNER_IOREG_DeviceMap_t *DeviceMap, IOARCH_Handle_t IOHandle,unsigned long _SymbolRate,S32 ExtClk)
{
#ifdef STTUNER_DEBUG_MODULE_CABDRV_REG0370QAM
    const char *identity = "STTUNER reg0370qam.c Reg0370QAM_SetSymbolRate()";
#endif
    	unsigned long ulong_tmp;
	ST_ErrorCode_t  Error = ST_NO_ERROR;
	long ExtClk_Khz;
	ExtClk_Khz=(long)ExtClk/1000;
	ulong_tmp = _SymbolRate;
     
	if(ulong_tmp < 2097152L)				/* 8388608 = 2**21*/
	{
		ulong_tmp *= 2048;					/* 2048 = 2**11 */
		ulong_tmp = ulong_tmp /ExtClk_Khz;
		ulong_tmp = ulong_tmp * 32768L;	/* 8192 = 2**15 */
		ulong_tmp /= 125L ;					/* 125 = 1000/2**3*/
		ulong_tmp = ulong_tmp * 8L;		/* 8 = 2**3 */
	}
	else if(ulong_tmp < 4194304L)			/* 4194304 = 2**22*/
	{
		ulong_tmp *= 1024 ;					/* 1024 = 2**10 */
		ulong_tmp = ulong_tmp /ExtClk_Khz;
		ulong_tmp = ulong_tmp * 32768L;	/* 8192 = 2**15 */
		ulong_tmp /= 125L ;					/* 125 = 1000/2**3*/
		ulong_tmp = ulong_tmp * 16L;		/* 16 = 2**4 */
	}
	else if(ulong_tmp < 8388607L)			/* 8388607 = 2**23*/
	{
	
		ulong_tmp *= 512 ;					/* 512 = 2**9 */
		ulong_tmp = (ulong_tmp) /ExtClk_Khz;
		ulong_tmp = ulong_tmp * 32768L;	/* 8192 = 2**15 */
		ulong_tmp /= 125L ;					/* 125 = 1000/2**3*/
		ulong_tmp = ulong_tmp * 32L;		/* 32 = 2**5 */
	
	}
	else
	{
		ulong_tmp *= 256 ;					/* 256 = 2**8*/
		ulong_tmp = ulong_tmp /ExtClk_Khz;
		ulong_tmp = ulong_tmp * 32768L;	/* 8192 = 2**15 */
		ulong_tmp /= 125L ;					/* 125 = 1000/2**3*/
		ulong_tmp = ulong_tmp * 64L;		/* 64 = 2**6 */
	}
#ifdef STTUNER_DEBUG_MODULE_CABDRV_REG0370QAM
    STTBX_Print(("%s ==> SR %u (%u)\n", identity, _SymbolRate, ulong_tmp));
#endif
  
    
        STTUNER_IOREG_SetField(DeviceMap,IOHandle,F0370QAM_SYMB_RATE_3,(U32)(ulong_tmp>>24));
	STTUNER_IOREG_SetField(DeviceMap,IOHandle,F0370QAM_SYMB_RATE_2,(U32)(ulong_tmp>>16));
	STTUNER_IOREG_SetField(DeviceMap,IOHandle,F0370QAM_SYMB_RATE_1,(U32)(ulong_tmp>>8));
	STTUNER_IOREG_SetField(DeviceMap,IOHandle,F0370QAM_SYMB_RATE_0,(U32)(ulong_tmp));
	
    return Error;
}
/*----------------------------------------------------
 FUNCTION      Reg0370QAM_SetSpectrumInversion
 ACTION	       Sets the spectrum inversion
           
 PARAMS IN     
 PARAMS OUT    
 RETURN        
------------------------------------------------------*/
ST_ErrorCode_t    Reg0370QAM_SetSpectrumInversion(STTUNER_IOREG_DeviceMap_t *DeviceMap, IOARCH_Handle_t IOHandle,FLAG_370QAM _SpectrumInversion)
{
    ST_ErrorCode_t  Error = ST_NO_ERROR; 
	if(_SpectrumInversion == YES)
	{
		STTUNER_IOREG_SetField(DeviceMap,IOHandle,F0370QAM_INV_SPEC_MAPPING,1);		
	}
	else
	{
		STTUNER_IOREG_SetField(DeviceMap,IOHandle,F0370QAM_INV_SPEC_MAPPING,0); 
		
	}

	return Error;
}
/*----------------------------------------------------
 FUNCTION      Reg0370QAM_SetSweepRate
 ACTION	       Sets the sweep rate 
           
 PARAMS IN     
 PARAMS OUT    
 RETURN        
------------------------------------------------------*/
ST_ErrorCode_t	Reg0370QAM_SetSweepRate(STTUNER_IOREG_DeviceMap_t *DeviceMap, IOARCH_Handle_t IOHandle,short _FShift,S32 ExtClk)
{
#ifdef STTUNER_DEBUG_MODULE_CABDRV_REG0370QAM
    const char *identity = "STTUNER reg0370QAM.c Reg0370QAM_SetSweepRate()";
#endif
        long long_tmp;
	short FShift;
	unsigned long ulong_tmp;
	ST_ErrorCode_t  Error = ST_NO_ERROR;

	FShift = _FShift;	/* in ms*/
	ulong_tmp = Reg0370QAM_GetSymbolRate(DeviceMap,IOHandle, ExtClk);	/* in Baud/s*/
	if(ulong_tmp == 0) /*No need to check for -ve as ulong_tmp is unsigned long*/
	{
		return Error;/*Return proper error value*/
	}

	long_tmp = FShift * 262144L;	/* 262144 = 2*18*/
	ulong_tmp /= 1024;
	long_tmp /= (long) ulong_tmp;
	long_tmp /= 1000;
#ifdef STTUNER_DEBUG_MODULE_CABDRV_REG0370QAM
    STTBX_Print(("%s ==> _FShift %d long_tmp %d %x\n", identity, _FShift, long_tmp, long_tmp));
#endif
    STTUNER_IOREG_SetField(DeviceMap,IOHandle,F0370QAM_SWEEP_MSB,(U32)((long_tmp>>8) & 0x0F)); 
    STTUNER_IOREG_SetField(DeviceMap,IOHandle,F0370QAM_SWEEP_LSB,(U32)(long_tmp & 0xFF));
	
	
    return Error;
}
/*----------------------------------------------------
 FUNCTION      Reg0370QAM_SetFrequencyOffset
 ACTION	       Sets the frequency offset 
           
 PARAMS IN     
 PARAMS OUT    
 RETURN        
------------------------------------------------------*/
ST_ErrorCode_t	Reg0370QAM_SetFrequencyOffset(STTUNER_IOREG_DeviceMap_t *DeviceMap, IOARCH_Handle_t IOHandle,long _CarrierOffset)
{
#ifdef STTUNER_DEBUG_MODULE_CABDRV_REG0370QAM
    const char *identity = "STTUNER reg0370qam.c Reg0370QAM_SetFrequencyOffset()";
#endif
    long long_tmp;
	long CarrierOffset;
	ST_ErrorCode_t  Error = ST_NO_ERROR;
	
	CarrierOffset = _CarrierOffset	;	/* in 1/000 of Fs*/
	long_tmp = CarrierOffset * 26844L;	/* (2**28)/10000*/
	if(long_tmp < 0)	long_tmp += 0x10000000	;
	long_tmp &= 0x0FFFFFFF;
	
#ifdef STTUNER_DEBUG_MODULE_CABDRV_REG0370QAM
    STTBX_Print(("%s ==> _CarrierOffset %d long_tmp %d %x\n", identity, _CarrierOffset, long_tmp, long_tmp));
#endif
        STTUNER_IOREG_SetField(DeviceMap,IOHandle,F0370QAM_IPHASE_3,(U32)(long_tmp>>24));
	STTUNER_IOREG_SetField(DeviceMap,IOHandle,F0370QAM_IPHASE_2,(U32)(long_tmp>>16));
	STTUNER_IOREG_SetField(DeviceMap,IOHandle,F0370QAM_IPHASE_1,(U32)(long_tmp>>8));
	STTUNER_IOREG_SetField(DeviceMap,IOHandle,F0370QAM_IPHASE_0,(U32)long_tmp);
 
        return Error;
}



/*----------------------------------------------------
 FUNCTION      Reg0370QAM_GetBlkCounter
 ACTION	       Gets the number of blocks 
           
 PARAMS IN     
 PARAMS OUT    
 RETURN        
------------------------------------------------------*/

unsigned short  Reg0370QAM_GetBlkCounter(STTUNER_IOREG_DeviceMap_t *DeviceMap, IOARCH_Handle_t IOHandle)
{
#ifdef STTUNER_DEBUG_MODULE_CABDRV_REG0370QAM
    const char *identity = "STTUNER reg0370qam.c Reg0370QAM_GetBlkCounter()";
#endif
    unsigned short Value;
    Value =  STTUNER_IOREG_GetField(DeviceMap, IOHandle,F0370QAM_RS_UNERR_CNT_LSB);
    Value += STTUNER_IOREG_GetField(DeviceMap, IOHandle,F0370QAM_RS_UNERR_CNT_MSB)<<8;

#ifdef STTUNER_DEBUG_MODULE_CABDRV_REG0370QAM
        STTBX_Print(("%s ==> Blk (FEC_B) %u\n", identity, Value));
#endif
    return(Value);
    
}

/*----------------------------------------------------
 FUNCTION      Reg0370QAM_GetCorrBlk
 ACTION	       Gets the number of corrected blocks
           
 PARAMS IN     
 PARAMS OUT    
 RETURN        
------------------------------------------------------*/

unsigned short  Reg0370QAM_GetCorrBlk(STTUNER_IOREG_DeviceMap_t *DeviceMap, IOARCH_Handle_t IOHandle)
{
#ifdef STTUNER_DEBUG_MODULE_CABDRV_REG0370QAM
    const char *identity = "STTUNER reg0370qam.c Reg0370QAM_GetCorrBlk()";
#endif
     unsigned short Value;
     Value =  STTUNER_IOREG_GetField(DeviceMap, IOHandle,F0370QAM_RS_CORR_CNT_LSB);
     Value += STTUNER_IOREG_GetField(DeviceMap, IOHandle,F0370QAM_RS_CORR_CNT_MSB)<<8;	
	
#ifdef STTUNER_DEBUG_MODULE_CABDRV_REG0370QAM
        STTBX_Print(("%s ==> CorrBlk (FEC_B) %u\n", identity, Value));
#endif
   
    return(Value);
}

/*----------------------------------------------------
 FUNCTION      Reg0370QAM_GetUncorrBlk
 ACTION	       Gets the number of uncorrected blocks
           
 PARAMS IN     
 PARAMS OUT    
 RETURN        
------------------------------------------------------*/

unsigned short  Reg0370QAM_GetUncorrBlk(STTUNER_IOREG_DeviceMap_t *DeviceMap, IOARCH_Handle_t IOHandle)
{
#ifdef STTUNER_DEBUG_MODULE_CABDRV_REG0370QAM
    const char *identity = "STTUNER reg0370qam.c Reg0370QAM_GetUncorrBlk()";
#endif
    unsigned short Value;
    Value =  STTUNER_IOREG_GetField(DeviceMap, IOHandle,F0370QAM_RS_UNC_CNT_LSB);
    Value += STTUNER_IOREG_GetField(DeviceMap, IOHandle,F0370QAM_RS_UNC_CNT_MSB)<<8;
    
#ifdef STTUNER_DEBUG_MODULE_CABDRV_REG0370QAM
        STTBX_Print(("%s ==> UncorrBlk (FEC_B==1) %u\n", identity, Value));
#endif
      
    return(Value);
}


/* ----------------------------------------------------------------------------
Name: Reg0370QAM_GetSTB0370QAMId()

Description:

Parameters:

Return Value:
---------------------------------------------------------------------------- */
U8 Reg0370QAM_GetSTB0370QAMId(STTUNER_IOREG_DeviceMap_t *DeviceMap, IOARCH_Handle_t IOHandle)
{
#ifdef STTUNER_DEBUG_MODULE_CABDRV_REG0370QAM
    const char *identity = "STTUNER reg0370qam.c Reg0370QAM_GetSTB0370QAMId()";
#endif
    U8    Value;

    Value= STTUNER_IOREG_GetRegister(DeviceMap, IOHandle, R0370QAM_ID);/*change register name to specify QAM reg*/

#ifdef STTUNER_DEBUG_MODULE_CABDRV_REG0370QAM
    STTBX_Print(("%s ==> Version %x\n", identity, Value));
#endif

    return(Value);
}


/* End of reg0370qam.c */








⌨️ 快捷键说明

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