📄 drv_nim_tuner.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 + -