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

📄 drv_nim_tuner.c

📁 tunner驱动
💻 C
字号:
/****************************************************************
*
* FILENAME
*	DRV_NIM.c
*
* PURPOSE 
*	EMMA2L Reference Model NIM Driver (Tuner Control)
*
* AUTHOR
*	Kenji.Matsuura
*
* DATE 
*	11/04/2002
*
* HISTORY 
*
*
*****************************************************************/

#include <stdio.h>
#include <string.h>

#include "COM.h"
#include "DRV_Internal.h"

#include "mmac/rtos.h"

#include "DRV_NIM.h"
#include "DRV_NIM_TUNER_Internal.h"
#include "DRV_NIM_QPSK_Internal.h"


/****************************************************************
*	External Valiables
****************************************************************/
extern BOOL	DRV_NIM_Initialized;
extern BOOL	DRV_NIM_QPSK_SetRegister(UI8 Reg,UI8 SetValue);
extern UI8	DRV_NIM_FreqAmendmentControl;					/* Frequency Amendment Control		*/


/*****************************************************************
*		Global Variables
*****************************************************************/
I32 DRV_NIM_TUNER_InterFrequency;			/* Intermeiate Frequency */




/*****************************************************************
*
* Function Name
*	DRV_NIM_TUNER_SetIF
*
* Prototype
*	DRV_NIM_RESULT DRV_NIM_TUNER_SetIF(
*		I32 Device,
*		I32 IntermeiateFrequency)
*
*
* Inputs
*	Device					:	NIM Device Number
*	IntermeiateFrequency	:	Intermeiate Frequency Value
*
* Outputs
*	None
*
* Return Codes
*	DRV_NIM_OK
*	DRV_NIM_NOT_INITIALIZED
*	DRV_NIM_INVALID_PARAMETER
*	DRV_NIM_FAIL
*
* Description
*	This function a setting of symbol rate.
*
*****************************************************************/
DRV_NIM_RESULT	DRV_NIM_TUNER_SetIF(I32 Device,I32 IntermeiateFrequency)
{
	UI8	TunerData[4];
	I32 IFvalue;

	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((IntermeiateFrequency < TUNER_LOWER_LIMIT)||
	   (IntermeiateFrequency > TUNER_UPPER_LIMIT)){
		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 */
	}

	TunerData[0] = 0x1F;	/* div high  */
	TunerData[1] = 0x40;	/* div low   */
	TunerData[2] = 0x84;	/* fixed val */
	TunerData[3] = 0x86;	/* LNB power */
	IFvalue=IntermeiateFrequency;	/* @KHz		*/

	if(IFvalue <  950000)	IFvalue =  950000;		/* Unjust data refusal */
	if(IFvalue > 2150000)	IFvalue = 2150000;		/* Unjust data refusal */

	if(IFvalue < 1550000 ){			/* 1550MHz	*/
		TunerData[3] |= 0x02;
	}else{
		TunerData[3] &= 0xFD;
	}

	IFvalue /= 125;					/*	divide by step size (125 Khz)	*/
	TunerData[0] = (UI8) ((IFvalue >> 8) & 0xFF);
	TunerData[1] = (UI8)  (IFvalue & 0xFF);

	if(FALSE==TunerSendIIC(TUNER_I2C_ADDRESS,TunerData,(UI8)sizeof TunerData)){
		MMAC_RTOS_ReleaseSemaphore( DRV_NIM_Semaphore );
		return( DRV_NIM_FAIL );
	}
	DRV_NIM_TUNER_InterFrequency = IntermeiateFrequency;	/* Global */

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

	return( DRV_NIM_OK );


}


/*****************************************************************
*
* Function Name
*	DRV_NIM_TUNER_GetIF
*
* Prototype
*	DRV_NIM_RESULT  DRV_NIM_TUNER_GetIF(I32 Device,I32 *IntermediateFrequency)
*
* Inputs
*	Device		:	NIM Device Number
*
* Outputs
*	IntermediateFrequency : Intermediate Frequency pointer
*
* Return Codes
*	DRV_NIM_OK
*	DRV_NIM_NOT_INITIALIZED
*	DRV_NIM_INVALID_PARAMETER
*	DRV_NIM_FAIL
*
* Description
*	This function a setting of IF.
*
*****************************************************************/
DRV_NIM_RESULT  DRV_NIM_TUNER_GetIF(I32 Device,I32 *IntermediateFrequency)
{

	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(IntermediateFrequency==NULL){
		return( DRV_NIM_INVALID_PARAMETER );
	}
#endif

	*IntermediateFrequency=DRV_NIM_TUNER_InterFrequency;

	return( DRV_NIM_OK );

}


/*****************************************************************
*
* Function Name
*	DRV_NIM_TUNER_DisableFrequencyControl
*
* Prototype
*	DRV_NIM_RESULT  DRV_NIM_TUNER_DisableFrequencyControl(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_TUNER_DisableFrequencyControl(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_FreqAmendmentControl=TUNER_DISABLE;

	return( DRV_NIM_OK );

}


/*****************************************************************
*
* Function Name
*	DRV_NIM_TUNER_EnableFrequencyControl
*
* Prototype
*	DRV_NIM_RESULT  DRV_NIM_TUNER_EnableFrequencyControl(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_TUNER_EnableFrequencyControl(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_FreqAmendmentControl=TUNER_ENABLE;

	return( DRV_NIM_OK );

}






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



/*****************************************************************
*
* Function Name
*	TunerSendIIC
*
* Prototype
*	BOOL TunerSendIIC(UI8 Address,UI8 *Data,UI8 Length)
*
* Inputs
*	Address		:	TUNER Address
*	Data		:	Data Pointer
*	Length		:	Send Data Length
*
* Outputs
*	None
*
* Return Codes
*	TRUE		:	OK
*	FALSE		:	ERROR
*
* Description
*	This function a IIC control.
*
*****************************************************************/
BOOL TunerSendIIC(UI8 Address,UI8 *Data,UI8 Length)
{
	UI32	DataCnt;

	/*  Out Data via Serializer  */
	if(FALSE==DRV_NIM_QPSK_SetRegister(59,Address)){	/* out device address with start condition	*/
		return(FALSE);
	}
	/*	wait 50 usec (11SCLK cycles) 5ns * 10000	*/

	for(DataCnt=0; DataCnt < ( Length-1 ) ;DataCnt++){
		if(FALSE==DRV_NIM_QPSK_SetRegister(60,Data[DataCnt])){		/* output data	*/
			return(FALSE);
		}
	/*	for(i=0;i<10000;i++){};		wait 50 usec (11SCLK cycles) 5ns * 10000	*/
	}
	if(FALSE==DRV_NIM_QPSK_SetRegister(61,Data[DataCnt])){	/* out last data with stop condition		*/
		return(FALSE);
	}
	/*  Set Dummy Device Address  */
	/*	wait 50 usec (11SCLK cycles) 5ns * 10000	*/
	if(FALSE==DRV_NIM_QPSK_SetRegister(59,0x20)){	/* out dummy address with start condition	*/
		return(FALSE);
	}
	/*	wait 50 usec (11SCLK cycles) 5ns * 10000	*/
	if(FALSE==DRV_NIM_QPSK_SetRegister(61,0x00)){	/* out dummy data with stop condition		*/
		return(FALSE);
	}

	return(TRUE);

}




⌨️ 快捷键说明

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