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

📄 drv_nim_qpsk.c

📁 tunner驱动
💻 C
📖 第 1 页 / 共 4 页
字号:
	if(FALSE==GetRegister(3,14,&GetValue,1)){		/* Group3 APR14 (AGC Value)			*/
		MMAC_RTOS_ReleaseSemaphore( DRV_NIM_Semaphore );
		return(DRV_NIM_FAIL);
	}

	if(GetValue & 0x08 ){	/* IMQ_Active	*/
		*Spectrum = DRV_NIM_QPSK_SPECTRUM_INVERTED;	
	}else{
		*Spectrum = DRV_NIM_QPSK_SPECTRUM_NOT_INVERTED;
	}

	if( MMAC_RTOS_ReleaseSemaphore( DRV_NIM_Semaphore ) != MMAC_RTOS_OK ) {
		return( DRV_NIM_FAIL );									/* Fail */
	}

	return(DRV_NIM_OK);
}


/*****************************************************************
*
* Function Name
*	DRV_NIM_QPSK_GetVBEC
*
* Prototype
*	DRV_NIM_RESULT  DRV_NIM_QPSK_GetVBEC(I32 Device,UI32 *ViterbiBitErrCount)
*
* Inputs
*	Device		:	NIM Device Number
*
* Outputs
*	ViterbiBitErrCount	:	Group3: Apr4,Apr5
*								(Viterbi Bit Error Rate Count) pointer
*
* Return Codes
*	DRV_NIM_OK
*	DRV_NIM_NOT_INITIALIZED
*	DRV_NIM_INVALID_PARAMETER
*	DRV_NIM_FAIL
*
* Description
*	This function a get VBEC.
*
*****************************************************************/
DRV_NIM_RESULT  DRV_NIM_QPSK_GetVBEC(I32 Device,UI32 *ViterbiBitErrCount)
{
	UI8		GetValue[2];
	I32		VBECValue;

	if( !DRV_NIM_Initialized ) {								/* Not Initialized ? */
		return( DRV_NIM_NOT_INITIALIZED );						/* Not Initialized */
	}
#if DRV_NIM_CHECK_PARAMETER
	if(!((0<=Device)&&(Device<DRV_NIM_NUMBER_OF_DEVICES))){		/* Invalid Device Number ?	*/
		return( DRV_NIM_INVALID_PARAMETER );					/* Invalid Parameter 		*/
	}
	if(Spectrum==NULL){
		return( DRV_NIM_INVALID_PARAMETER );
	}
#endif

	if( MMAC_RTOS_AcquireSemaphore( DRV_NIM_Semaphore
							, MMAC_RTOS_SUSPEND ) != MMAC_RTOS_OK ) {	/* Take Semaphore for Callback Table NG ? */
		return( DRV_NIM_FAIL );									/* Fail */
	}
	if(FALSE==GetRegister(3,4,GetValue,2)){
		MMAC_RTOS_ReleaseSemaphore( DRV_NIM_Semaphore );
		return( DRV_NIM_FAIL );
	}
	VBECValue=(UI32)GetValue[0];
	VBECValue=(UI32)((UI32)GetValue[1] << 8);

	*ViterbiBitErrCount = VBECValue;
	if( MMAC_RTOS_ReleaseSemaphore( DRV_NIM_Semaphore ) != MMAC_RTOS_OK ) {
		return( DRV_NIM_FAIL );									/* Fail */
	}

	return( DRV_NIM_OK );

}


/*****************************************************************
*
* Function Name
*	DRV_NIM_QPSK_GetSNR
*
* Prototype
*	DRV_NIM_RESULT  DRV_NIM_QPSK_GetSNR(I32 Device,I32 *SignalNoiseRatio)
*
* Inputs
*	Device		:	NIM Device Number
*
* Outputs
*	SignalNoiseRatio	:	Group3: Apr22,Apr23  SNR
*
* Return Codes
*	DRV_NIM_OK
*	DRV_NIM_NOT_INITIALIZED
*	DRV_NIM_INVALID_PARAMETER
*	DRV_NIM_FAIL
*
* Description
*	This function a get SNR.
*
*****************************************************************/
DRV_NIM_RESULT  DRV_NIM_QPSK_GetSNR(I32 Device,I32 *SignalNoiseRatio)
{
	UI8		GetValue[2];
	I32		SNRValue;

	if( !DRV_NIM_Initialized ) {								/* Not Initialized ? */
		return( DRV_NIM_NOT_INITIALIZED );						/* Not Initialized */
	}
#if DRV_NIM_CHECK_PARAMETER
	if(!((0<=Device)&&(Device<DRV_NIM_NUMBER_OF_DEVICES))){		/* Invalid Device Number ?	*/
		return( DRV_NIM_INVALID_PARAMETER );					/* Invalid Parameter 		*/
	}
	if(SignalNoiseRatio==NULL){
		return( DRV_NIM_INVALID_PARAMETER );
	}
#endif

	if( MMAC_RTOS_AcquireSemaphore( DRV_NIM_Semaphore
							, MMAC_RTOS_SUSPEND ) != MMAC_RTOS_OK ) {	/* Take Semaphore for Callback Table NG ? */
		return( DRV_NIM_FAIL );									/* Fail */
	}
	if(FALSE==GetRegister(3,22,GetValue,2)){
		MMAC_RTOS_ReleaseSemaphore( DRV_NIM_Semaphore );
		return( DRV_NIM_FAIL );
	}
	SNRValue =(UI32)GetValue[0];
	SNRValue =(UI32)((UI32)GetValue[1] << 8);
	SNRValue/= 32;

	*SignalNoiseRatio = SNRValue;
	if( MMAC_RTOS_ReleaseSemaphore( DRV_NIM_Semaphore ) != MMAC_RTOS_OK ) {
		return( DRV_NIM_FAIL );									/* Fail 			*/
	}

	return( DRV_NIM_OK );

}


/*****************************************************************
*
* Function Name
*	DRV_NIM_QPSK_GetAGC
*
* Prototype
*	DRV_NIM_RESULT  DRV_NIM_QPSK_GetAGC(I32 Device,I32 *AutomaticGainControl)
*
* Inputs
*	Device		:	NIM Device Number
*
* Outputs
*	AutomaticGainControl	:	Group3: Apr10
*
* Return Codes
*	DRV_NIM_OK
*	DRV_NIM_NOT_INITIALIZED
*	DRV_NIM_INVALID_PARAMETER
*	DRV_NIM_FAIL
*
* Description
*	This function a get AGC.
*
*****************************************************************/
DRV_NIM_RESULT  DRV_NIM_QPSK_GetAGC(I32 Device,I32 *AutomaticGainControl)
{
	UI8		GetValue;
	I32		AGCValue;

	if( !DRV_NIM_Initialized ) {								/* Not Initialized ? */
		return( DRV_NIM_NOT_INITIALIZED );						/* Not Initialized */
	}
#if DRV_NIM_CHECK_PARAMETER
	if(!((0<=Device)&&(Device<DRV_NIM_NUMBER_OF_DEVICES))){		/* Invalid Device Number ?	*/
		return( DRV_NIM_INVALID_PARAMETER );					/* Invalid Parameter 		*/
	}
	if(AutomaticGainControl==NULL){
		return( DRV_NIM_INVALID_PARAMETER );
	}
#endif
	GetValue=0;

	if( MMAC_RTOS_AcquireSemaphore( DRV_NIM_Semaphore
							, MMAC_RTOS_SUSPEND ) != MMAC_RTOS_OK ) {	/* Take Semaphore for Callback Table NG ? */
		return( DRV_NIM_FAIL );									/* Fail */
	}
	if(FALSE==GetRegister(3,10,&GetValue,1)){
		MMAC_RTOS_ReleaseSemaphore( DRV_NIM_Semaphore );
		return( DRV_NIM_FAIL );
	}
	AGCValue =(UI32)GetValue;
	AGCValue = 128 - ( AGCValue / 2 );

	*AutomaticGainControl = AGCValue;
	if( MMAC_RTOS_ReleaseSemaphore( DRV_NIM_Semaphore ) != MMAC_RTOS_OK ) {
		return( DRV_NIM_FAIL );									/* Fail 			*/
	}

	return( DRV_NIM_OK );

}


/*****************************************************************
*
* Function Name
*	DRV_NIM_QPSK_GetFreqencyDeviation
*
* Prototype
*	DRV_NIM_RESULT  DRV_NIM_QPSK_GetFreqencyDeviation(I32 Device,I32 *FreqencyDeviation)
*
* Inputs
*	Device		:	NIM Device Number
*
* Outputs
*	FreqencyDeviation	:	Group3: Apr7/8/9  NCO
*
* Return Codes
*	DRV_NIM_OK
*	DRV_NIM_NOT_INITIALIZED
*	DRV_NIM_INVALID_PARAMETER
*	DRV_NIM_FAIL
*
* Description
*	This function a get NCO.
*
*****************************************************************/
DRV_NIM_RESULT  DRV_NIM_QPSK_GetFreqencyDeviation(I32 Device,I32 *FreqencyDeviation)
{
	UI8		GetValue[4];
	I32		DEVValue;

	if( !DRV_NIM_Initialized ) {								/* Not Initialized ? */
		return( DRV_NIM_NOT_INITIALIZED );						/* Not Initialized */
	}
#if DRV_NIM_CHECK_PARAMETER
	if(!((0<=Device)&&(Device<DRV_NIM_NUMBER_OF_DEVICES))){		/* Invalid Device Number ?	*/
		return( DRV_NIM_INVALID_PARAMETER );					/* Invalid Parameter 		*/
	}
	if(AutomaticGainControl==NULL){
		return( DRV_NIM_INVALID_PARAMETER );
	}
#endif

	if( MMAC_RTOS_AcquireSemaphore( DRV_NIM_Semaphore
							, MMAC_RTOS_SUSPEND ) != MMAC_RTOS_OK ) {	/* Take Semaphore for Callback Table NG ? */
		return( DRV_NIM_FAIL );									/* Fail */
	}
	if(FALSE==GetRegister(3,7,GetValue,3)){
		MMAC_RTOS_ReleaseSemaphore( DRV_NIM_Semaphore );
		return( DRV_NIM_FAIL );
	}

	DEVValue =(I32)GetValue[0];
	DEVValue|=(I32)((I32)GetValue[1]<< 8);
	DEVValue|=(I32)((I32)GetValue[2]<<16);
	if( DEVValue & 0x00800000 ){
		DEVValue-= 0x01000000;
	}
	DEVValue = -1 * ((double) DEVValue) * QpskFsamp / 16777.216;	/* CalcValue is @ KHz *-1 6/19	*/

	*FreqencyDeviation = DEVValue;
	if( MMAC_RTOS_ReleaseSemaphore( DRV_NIM_Semaphore ) != MMAC_RTOS_OK ) {
		return( DRV_NIM_FAIL );									/* Fail 			*/
	}

	return( DRV_NIM_OK );

}


/*****************************************************************
*
* Function Name
*	DRV_NIM_QPSK_DisableSweepControl
*
* Prototype
*	DRV_NIM_RESULT  DRV_NIM_QPSK_DisableSweepControl(I32 Device)
*
* Inputs
*	Device		:	NIM Device Number
*
* Outputs
*	None
*
* Return Codes
*	DRV_NIM_OK
*	DRV_NIM_NOT_INITIALIZED
*	DRV_NIM_INVALID_PARAMETER
*	DRV_NIM_FAIL
*
* Description
*
*
*****************************************************************/
DRV_NIM_RESULT  DRV_NIM_QPSK_DisableSweepControl(I32 Device)
{
	if( !DRV_NIM_Initialized ) {								/* Not Initialized ? */
		return( DRV_NIM_NOT_INITIALIZED );						/* Not Initialized */
	}
#if DRV_NIM_CHECK_PARAMETER
	if(!((0<=Device)&&(Device<DRV_NIM_NUMBER_OF_DEVICES))){		/* Invalid Device Number ?	*/
		return( DRV_NIM_INVALID_PARAMETER );					/* Invalid Parameter 		*/
	}
#endif

	DRV_NIM_FreqSweepControl	= QPSK_DISABLE;		/* Frequency Sweep Stop DISABLE	*/

	return( DRV_NIM_OK );


}

/*****************************************************************
*
* Function Name
*	DRV_NIM_QPSK_EnableSweepControl
*
* Prototype
*	DRV_NIM_RESULT  DRV_NIM_QPSK_EnableSweepControl(I32 Device)
*
* Inputs
*	Device		:	NIM Device Number
*
* Outputs
*	None
*
* Return Codes
*	DRV_NIM_OK
*	DRV_NIM_NOT_INITIALIZED
*	DRV_NIM_INVALID_PARAMETER
*	DRV_NIM_FAIL
*
* Description
*
*
*****************************************************************/
DRV_NIM_RESULT  DRV_NIM_QPSK_EnableSweepControl(I32 Device)
{
	if( !DRV_NIM_Initialized ) {								/* Not Initialized ? */
		return( DRV_NIM_NOT_INITIALIZED );						/* Not Initialized */
	}

#if DRV_NIM_CHECK_PARAMETER
	if(!((0<=Device)&&(Device<DRV_NIM_NUMBER_OF_DEVICES))){		/* Invalid Device Number ?	*/
		return( DRV_NIM_INVALID_PARAMETER );					/* Invalid Parameter 		*/
	}
#endif

	DRV_NIM_FreqSweepControl	= QPSK_ENABLE;		/* Frequency Sweep Stop DISABLE	*/

	return( DRV_NIM_OK );

}






/*--------------------------------------------------------------*/
/*						Private Function						*/
/*--------------------------------------------------------------*/



/*****************************************************************
*
* Function Name
*	DRV_NIM_QPSK_StatusCheck
*
* Prototype
*	BOOL DRV_NIM_QPSK_StatusCheck(void)
*
* Inputs
*	None
*
* Outputs
*	None
*
* Return Codes
*	TRUE	: change nothing in status
*	FALSE	: changed by status
*
* Description
*	This function a qpsk status check.
*	(Lock Scan Task)
*
*****************************************************************/
BOOL DRV_NIM_QPSK_StatusCheck(void)
{
	DRV_NIM_QPSK_STATUS		StatusInfo;
	BOOL					ChangeSw;
	UI8						GetValue;
	UI16					AGCLevel;
	UI16					SNRLevel;
	I8						CalcData;
	UI8						CalcValue;

	ChangeSw=TRUE;

	/* acquire a register than L64724 */
	/*---- SIGNAL LEVEL ----*/
	GetRegister(3,10,&GetValue,1);		/* Group3 APR10 (AGC Value)			*/
	AGCLevel =(I16)(128-(GetValue/2)) ;
	CalcValue=(I8)(AGCLevel & 0x00FF);
	if(CalcValue > 100){
		CalcData=0;
	}else{
		if(CalcValue < 37){
			CalcData=100;
		}else{
			CalcData=(I8)CalcValue;
			CalcData=100-(CalcValue-37);
		}
	}
	StatusInfo.SignalLevel=CalcData;



	GetRegister(3,22,&GetValue,1);		/* Group3 APR22 (SNR[7:0] Value)	*/
	SNRLevel  = GetValue;
	GetRegister(3,23,&GetValue,1);		/* Group3 APR23 (SNR[11:8] Value)	*/
	SNRLevel |= (GetValue << 8);
	SNRLevel /= 32;

	CalcValue=(I8)(SNRLevel & 0x00FF);
	if(CalcValue > 100){
		CalcData=0;
	}else{
		if(CalcValue < 37){
			CalcData=100;
		}else{
			CalcData=(I8)CalcValue;
			CalcData=100-(CalcValue-37);
		}
	}
	StatusInfo.QualityLevel=CalcData;

	/* status check */
	GetRegister(3,11,&GetValue,1);		/* Group3 APR11 (Carrier and FEC Status)	*/
	switch(GetValue & 0x17){
		case 0x17:		/* Status : VITERBI Lock */
			if(DRV_NIM_QPSK_StatusInfo.LockStatus != DRV_NIM_VITERBI_LOCK){
				if( FALSE == QpskFreqValidRangeCheck() ){
					/* FALSE : Tuner re-setting */
					StatusInfo.LockStatus=DRV_NIM_QPSK_StatusInfo.LockStatus;
				}else{
					/* TRUE  : Tuner non re-settinf */
					StatusInfo.LockStatus=DRV_NIM_VITERBI_LOCK;
				}
			}else{
				StatusInfo.LockStatus=DRV_NIM_VITERBI_LOCK;
			}
#if 1
			if(StatusInfo.SignalLevel == 0){
				StatusInfo.SignalLevel=10;
			}
			if(StatusInfo.QualityLevel== 0){
				StatusInfo.QualityLevel=10;
			}
#endif
			break;
		case 0x10:	/* Status : QPSK Lock */
		case 0x11:
		case 0x12:
		case 0x13:
		case 0x14:
		case 0x15:
		case 0x16:
			StatusInfo.LockStatus=DRV_NIM_QPSK_LOCK;
			break;
		default:
			StatusInfo.LockStatus=DRV_NIM_UNLOCK;
			break;
	}

	if(DRV_NIM_QPSK_StatusInfo.LockStatus == DRV_NIM_VITERBI_LOCK){
		if((DRV_NIM_FreqSweepControl==QPSK_ENABLE)&&(DRV_NIM_FreqSweepStatus==QPSK_SW_ON)){		/* Sweep Control Enable 	*/
			QpskClkSweepSwitch(QPSK_SW_OFF);				/* Clock   Sweep Stop		*/
			QpskCarSweepSwitch(QPSK_SW_OFF);				/* Carrier Sweep Stop		*/
			DRV_NIM_FreqSweepStatus=QPSK_SW_OFF;					/* Sweep Status OFF (Stop)	*/
		}
	}else{
		if(DRV_NIM_FreqSweepStatus==QPSK_SW_OFF){
			QpskClkSweepSwitch(QPSK_SW_ON);						/* Clock   Sweep Start		*/
			QpskCarSweepSwitch(QPSK_SW_ON);						/* Carrier Sweep Start		*/
			DRV_NIM_FreqSweepStatus=QPSK_SW_ON;							/* Sweep Status ON (Run)	*/
			QPSK_FEC_Reset();
		}
	}

	if(DRV_NIM_QPSK_StatusInfo.LockStatus != StatusInfo.LockStatus){
		DRV_NIM_QPSK_StatusInfo.LockStatus = StatusInfo.LockStatus;
		ChangeSw = FALSE;
	}
	if(DRV_NIM_QPSK_StatusInfo.SignalLevel != StatusInfo.SignalLevel){
		DRV_NIM_QPSK_StatusInfo.SignalLevel = StatusInfo.SignalLevel;
		ChangeSw = FALSE;
	}
	if(DRV_NIM_QPSK_StatusInfo.QualityLevel != StatusInfo.QualityLevel){
		DRV_NIM_QPSK_StatusInfo.QualityLevel = StatusInfo.QualityLevel;
		ChangeSw = FALSE;
	}

	return( ChangeSw );

}


/*****************************************************************
*
* Function Name
*	DRV_NIM_QPSK_SetG4Reg
*
* Prototype
*	static void DRV_NIM_QPSK_SetG4Reg(void)
*
* Inputs
*	None
*
* Outputs
*	None
*
* Return Codes
*	TRUE  : OK
*	FALSE : ERROR (IIC Send Error)
*
* Description
*	Register setting of L64724.
*
*****************************************************************/
static BOOL DRV_NIM_QPSK_SetG4Reg(void)
{
	UI8 i;
	unsigned int Temp;
	double	DFRatio,ClkSwr,ClkUswl,ClkLswl ;
	double	CarSwr,CarUSwl,CarLSwl;
	double	ClkSwpPram,ClkLimPram;
	int		PLLN,PLLS,PLLT,PLLM;

    UI8		SpiNumber;
	UI8		SpiDen;
	UI8		TempData;

⌨️ 快捷键说明

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