📄 drv_nim_qpsk.c
字号:
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 + -