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

📄 drv_nim_qpsk.c

📁 tunner驱动
💻 C
📖 第 1 页 / 共 4 页
字号:
*
*****************************************************************/
static int CalcValue28(int BaudRate, int SampleRate)
{
	int		Lambda,Mu,i;
	double	TauA,TauB,dN;
	double	Lcar;
	double	Wn;

	if(BaudRate >= 5000){
	    Wn = 0.005 * BaudRate;
	}else{
		if (( BaudRate < 5000 ) && ( BaudRate > 3000)){
			Wn = 25;
	    }else{
			Wn = BaudRate *0.006283;		/*	2*acos( -1 )/1000	*/
		}
	}
	Lcar = SampleRate* 1000.0 / BaudRate ;
	TauA = Wn * Wn  / (0.24375 * Lcar * BaudRate * BaudRate ) ;		/* Kdcar= 0.24375   Carrier detector gain	*/
	TauB = (0.85 * Wn*2) / ( 0.24375 * Lcar * BaudRate  ) ;			/* DampingFactor = 0.85						*/

	dN = TauA;
	for ( i = 1; i < 26; i++ ){
		dN = dN * 2 ;				/*	Make    dN * 2^i 	*/
		if ( dN > 1.0 ){
			if ( dN >= 1.5 ){
				Mu = 25 -i+1;
			}else{
				Mu = 25 -i ;
			}
			break;
		}
		Mu = 0 ;
	}

	dN = TauB;
	for ( i = 1; i < 17; i++ ) {
		dN = dN * 2 ;
		if ( dN > 1.0  ){
			if ( dN >= 1.5 ){
				Lambda = 16 -i+1;
			}else{
				Lambda = 16 -i ;
			}
			break;
		}
		Lambda = 0 ;
	}

    return ( ((Lambda<<4) & 0xf0 ) + ( Mu & 0xf) ) ;
}


/*****************************************************************
*
* Function Name
*	CalcValue42
*
* Prototype
*	static int CalcValue42(int BaudRate, int SampleRate,double Ratio)
*
* Inputs
*	BaudRate	: Baud Rate		@KHz
*	SampleRate	: Sampling Rate	@MHz
*	Ratio		: Ratio
*
* Outputs
*	None
*
* Return Codes
*	calculation result
*
* Description
*	Calculate of register number 42.
*
*****************************************************************/
static int CalcValue42(int BaudRate, int SampleRate,double Ratio)
{
	double	TauA,TauB,dN;
	double	Kdtim=0.0388;			/* Timing detector gain */
	double	DampingFactor = 0.85 ;
	int		Lambda,Mu,i;
	double	Ltim;
	double	Wn42;


	if(BaudRate < 4000 ){
		Wn42 = ( 5.0e-4 ) * BaudRate ;
	} else {
		Wn42 = ( 1.5e-3 ) * BaudRate ;
	}

	Ltim = SampleRate * 1000 * Ratio / BaudRate ;
	TauA = Wn42 * Wn42/ (Kdtim * Ltim * BaudRate * BaudRate  ) ;
	TauB = (DampingFactor * Wn42 *2) / (Kdtim * Ltim * BaudRate  ) ;

	dN = TauA;
	for ( i = 1; i < 29; i++ ){
		dN = dN * 2 ;				/* Make dN * 2^i */
		if ( dN > 1.0  ){
			if ( dN >= 1.5 ){
				Mu = 28 -i+1 ;
			}else{
				Mu = 28 -i ;
			}
			break;
		}
		Mu = 0;
	}

	dN = TauB;
	for ( i = 1; i < 17; i++ ) {
		dN = dN * 2 ;
		if ( dN > 1.0  ){
			if ( dN >= 1.5 ){
				Lambda = 16 -i+1 ;
			}else{
				Lambda = 16 -i ;
			}
			break;
		}
		 Lambda = 0 ;
	}

	return (((Lambda<<4) & 0xf0 ) + ( Mu & 0xf ));
}


/*****************************************************************
*
* Function Name
*	QpskClkSweepSwitch
*
* Prototype
*	static BOOL QpskClkSweepSwitch(UI8 Switch)
*
* Inputs
*	Switch	: QPSK_SW_OFF(Sweep Off) / QPSK_SW_ON(Sweep On)
*
* Outputs
*	None
*
* Return Codes
*	TRUE	OK
*	FALSE	ERROR
*
* Description
*	
*
*****************************************************************/
static BOOL QpskClkSweepSwitch(UI8 Switch)
{

	UI8		GetValue;

	if(FALSE==GetRegister(4,53,&GetValue,1)){	/* Group4 APR53 Clock Loop Configuration */
		return(FALSE);
	}

	GetValue &= 0xfe;
	if( Switch == QPSK_SW_ON ){
		GetValue |= 0x01;
	}
	DRV_NIM_QPSK_SetRegister(53,GetValue);					/* Group4 APR53 */

	return(DRV_NIM_OK);

}


/*****************************************************************
*
* Function Name
*	QpskCarSweepSwitch
*
* Prototype
*	static BOOL QpskCarSweepSwitch(UI8 Switch)
*
* Inputs
*	Switch	: QPSK_SW_OFF(Sweep Off) / QPSK_SW_ON(Sweep On)
*
* Outputs
*	None
*
* Return Codes
*	TRUE	OK
*	FALSE	ERROR
*
* Description
*	
*
*****************************************************************/
static BOOL QpskCarSweepSwitch(UI8 Switch)
{

	UI8		GetValue;

	if(FALSE==GetRegister(4,41,&GetValue,1)){	/* Group4 APR41 Carrier Loop Configuration */
		return(FALSE);
	}

	GetValue &= 0xfe;
	if( Switch == QPSK_SW_ON ){
		GetValue |= 0x01;
	}
	DRV_NIM_QPSK_SetRegister(41,GetValue);					/* Group4 APR41 */

	return(DRV_NIM_OK);

}



/*****************************************************************
*
* Function Name
*	QpskSetSPIMode
*
* Prototype
*	static BOOL QpskSetSPIMode(UI8 Switch)
*
* Inputs
*	Switch	: SPI Mode Off / SPI Mode On
*
* Outputs
*	None
*
* Return Codes
*	TRUE	OK
*	FALSE	ERROR
*
* Description
*	
*
*****************************************************************/
#if 0	/* Use prohibition */
static BOOL QpskSetSPIMode(UI8 Switch)
{
	UI8		GetValue;
    UI8		SpiNumber;
	UI8		SpiDen;
	UI8		VcrNo;
	UI8		TempData;
	double  SpiBias;
	I32		i;

	/* Get Viterbi Code Rate(Group 3 - APR 14)	*/
	if(FALSE==GetRegister(3,14,&GetValue,1)){
		return(FALSE);
	}
	VcrNo = GetValue & 0x07;

	SpiNumber	= StVCR[ VcrNo ].SpiNum;
	SpiDen		= StVCR[ VcrNo ].SpiDen;

	/* Set SPI_M(Group 4 - APR 62)				*/
	Regs724[62] &= 0xe1; 		/* SPI_M Clear	*/
	TempData	 = SpiDen << 1;
	Regs724[62] |= TempData;

	/* Set SPI_M(Group 4 - APR 63)				*/
	Regs724[63] &= 0xf0; 	 	/* SPI_N clear	*/
	Regs724[63] |= SpiNumber;	/* SPI_N Set	*/

	/* Set SPI_Bais(Group 4 - APR 66,67,68)		*/
	/* 2^24 * Spi_numerator * Fsymbol / Fsample * Spi_Denominator		*/

	SpiBias = 16777.216 * SpiNumber * QpskSymbolRate / (QpskFsamp * SpiDen);

	Regs724[66] = (UI8)(( (I32)SpiBias + 16777216 ) & 0xff ) ;
	Regs724[67] = (UI8)((((I32)SpiBias + 16777216 ) & 0xff00 ) >> 8 ) ;
	Regs724[68] = (UI8)((((I32)SpiBias + 16777216 ) & 0x7f0000 ) >> 16 ) ;

	/* Write L64724 Regster	*/
	for ( i = 62; i <= 68; i++ ){
		if(FALSE==DRV_NIM_QPSK_SetRegister(i, Regs724[i]))	/* Group 4  APR62 - APR68 setting	*/
			return(FALSE);
	}

	if( Switch == QPSK_SW_ON ){
		DRV_NIM_QPSK_SetRegister( 31, 0xA0 );				/* Group 4  APR31 setting			*/
	}
	if( Switch == QPSK_SW_OFF){
		DRV_NIM_QPSK_SetRegister( 31, 0x80 );				/* Group 4  APR31 setting			*/
	}

	return(TRUE);
}
#endif

/*****************************************************************
*
* Function Name
*	DEBUG PROGRAM : DRV_NIM_GetGroup4
*
* Prototype
*	DRV_NIM_RESULT  DRV_NIM_GetGroup4(void)
*
* Inputs
*	None
*
* Outputs
*	None
*
* Return Codes
*	DRV_NIM_RESULT
*
* Description
*
*
*****************************************************************/
DRV_NIM_RESULT  DRV_NIM_GetGroup4(void)
{
#if 0
	UI8		i,ii;
	UI8		GetBuff[80];
	for(i=0;i < 80;i++){
		GetBuff[i]=0;
	}
	if(FALSE==GetRegister(4,0,GetBuff,70)){
		return( DRV_NIM_FAIL );
	}

	for(ii=0,i=0;i<70;ii++,i++){
		if(ii==8){
			ii=0;
			APP_CONSOLE_Printf("\n");
		}
		APP_CONSOLE_Printf(" [%02d]=%02X",i,GetBuff[i]);
	}
	APP_CONSOLE_Printf("\n");

	APP_CONSOLE_Printf("SYMBOLRATE=%08X\n",QpskSymbolRate);
	APP_CONSOLE_Printf("DF Number =%08X\n",QpskDFNumber);
	APP_CONSOLE_Printf("DR Ratio  =%08X\n",QpskDFRatio);
	APP_CONSOLE_Printf("DF Gain   =%08X\n",QpskDFGain);
	APP_CONSOLE_Printf("CAR SWEEP LIMIT=%08X\n",QpskCarSweepLim);
	APP_CONSOLE_Printf("Fsamp     =%08X\n",QpskFsamp);
	APP_CONSOLE_Printf("IF =%08X\n",DRV_NIM_TUNER_InterFrequency);

#endif
	return( DRV_NIM_OK );
}

/*****************************************************************
*
* Function Name
*	DEBUG PROGRAM : DRV_NIM_GetGroup3
*
* Prototype
*	DRV_NIM_RESULT  DRV_NIM_GetGroup3(void)
*
* Inputs
*	None
*
* Outputs
*	None
*
* Return Codes
*	DRV_NIM_RESULT
*
* Description
*
*
*****************************************************************/
DRV_NIM_RESULT  DRV_NIM_GetGroup3(void)
{
#if 0
	UI8		GetBuff[80];
	UI8		i,ii;
	for(i=0;i < 30;i++){
		GetBuff[i]=0;
	}

	if(FALSE==GetRegister(3,0,GetBuff,24)){
		return( DRV_NIM_FAIL );
	}

	for(ii=0,i=0;i<24;ii++,i++){
		if(ii==8){
			ii=0;
			APP_CONSOLE_Printf("\n");
		}
		APP_CONSOLE_Printf(" [%02d]=%02X",i,GetBuff[i]);
	}
	APP_CONSOLE_Printf("\n");
#endif
	return( DRV_NIM_OK );
}


/*****************************************************************
*
* Function Name
*	DEBUG PROGRAM : DRV_NIM_ClearGroup4
*
* Prototype
*	DRV_NIM_RESULT  DRV_NIM_ClearGroup4(void)
*
* Inputs
*	None
*
* Outputs
*	None
*
* Return Codes
*	DRV_NIM_RESULT
*
* Description
*
*
*****************************************************************/
DRV_NIM_RESULT  DRV_NIM_ClearGroup4(void)
{
#if 0
	UI8		i;
	UI8		SetData[80];
	for(i=0;i < 80;i++){
		SetData[i]=0;
	}
	/* send to nim device */
	for ( i = 0; i < 70; i++ ){
		if(FALSE==DRV_NIM_QPSK_SetRegister(i, SetData[i]))
			return( DRV_NIM_FAIL );
	}
#endif
	return( DRV_NIM_OK );
}



/*****************************************************************
*
* Function Name
*	DEBUG PROGRAM : DRV_NIM_Reset
*
* Prototype
*	DRV_NIM_RESULT  DRV_NIM_Reset(void)
*
* Inputs
*	None
*
* Outputs
*	None
*
* Return Codes
*	DRV_NIM_RESULT
*
* Description
*
*
*****************************************************************/
DRV_NIM_RESULT  DRV_NIM_Reset(void)
{

	MMAC_IIC_WRITE_IOPB		WriteIOPB;
	UI8 Sdata,i;

	Sdata=0x06;
	WriteIOPB.deviceNumber=MMAC_IIC_1;
	WriteIOPB.slaveAddr	= 0x00;		/* QPSK ADDRESS */
	WriteIOPB.subAddr	= 0x00;				/* Apr Group	*/
	WriteIOPB.data		= &Sdata;			/* Number		*/
	WriteIOPB.length	= 0x01;
	WriteIOPB.timeout	= 1000;
	WriteIOPB.numSubAddressBytes	= MMAC_IIC_ZERO_BYTE_ADDRESSING;
	if((MMAC_IIC_Write(&WriteIOPB))!=MMAC_IIC_OK){
		return( DRV_NIM_FAIL );
	}

	/* APR0 = 0 */
	Sdata=0;
	WriteIOPB.deviceNumber=MMAC_IIC_1;
	WriteIOPB.slaveAddr	= QPSK_CHIP_ADDR;	/* QPSK ADDRESS */
	WriteIOPB.subAddr	= 0x00;				/* Apr Group	*/
	WriteIOPB.data		= &Sdata;			/* Number		*/
	WriteIOPB.length	= 0x01;
	WriteIOPB.timeout	= 1000;
	WriteIOPB.numSubAddressBytes	= MMAC_IIC_ONE_BYTE_ADDRESSING;
	if((MMAC_IIC_Write(&WriteIOPB))!=MMAC_IIC_OK){
		return( DRV_NIM_FAIL );
	}

	/* APR1 = 0 */
	Sdata=0;
	WriteIOPB.deviceNumber=MMAC_IIC_1;
	WriteIOPB.slaveAddr	= QPSK_CHIP_ADDR;	/* QPSK ADDRESS */
	WriteIOPB.subAddr	= 0x01;				/* Apr Group	*/
	WriteIOPB.data		= &Sdata;			/* Number		*/
	WriteIOPB.length	= 0x01;
	WriteIOPB.timeout	= 1000;
	WriteIOPB.numSubAddressBytes	= MMAC_IIC_ONE_BYTE_ADDRESSING;

	if((MMAC_IIC_Write(&WriteIOPB))!=MMAC_IIC_OK){
		return( DRV_NIM_FAIL );
	}

	for ( i = 0; i < 70; i++ ){
		if(FALSE==DRV_NIM_QPSK_SetRegister(i, Regs724[i])){
			continue;
		}
	}

	return( DRV_NIM_OK );

}


/*****************************************************************
*
* Function Name
*	DEBUG PROGRAM : DRV_NIM_Reset
*
* Prototype
*	DRV_NIM_RESULT  DRV_NIM_Reset(void)
*
* Inputs
*	None
*
* Outputs
*	None
*
* Return Codes
*	DRV_NIM_RESULT
*
* Description
*
*
*****************************************************************/
static BOOL QPSK_FEC_Reset(void)
{
	UI8					SetData;

	SetData  = Regs724[55] & 0xFC;
	SetData |= 0x03;	/* APR55 : DEMOD or FEC Reset */
	if(FALSE==DRV_NIM_QPSK_SetRegister(55,SetData)){
		return( FALSE );
	}
	return( TRUE );

}



⌨️ 快捷键说明

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