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

📄 qam029old7.c

📁 stv0297 寄存器 tuner 驱动 5105 方案
💻 C
📖 第 1 页 / 共 4 页
字号:



/*/////////////////////////////////////////////////////////////////////////////////////*/
BOOLEAN Search_Result_get(void)
{
	return TRUE;
}

BYTE GetTunerPowerOutput(void)
{
	return (50);
}


BYTE GetTunerSignalQuality(void)
{
  unsigned short agc;
  agc = linkGetAGC2();
/*  do_report( severity_info, "AGC is %d\n",agc);       */
  return ( agc/0x3ff );
}

unsigned char  CheckTunerLock(void)
{
   return    LockIndicator;
}

unsigned char CheckTunerNoSignal(void)
{
  return s_AgcNoSignal;

}

boolean StillLocked=false;

boolean FE_StillLocked( void )
{
  return StillLocked;
}


/*
i2c_read ( i2c_ssc0, ucSlaveAddr, aucI2CBuffer, 1, &iActLen ) 
*/
char  i2c_read( STI2C_Handle_t i2c_sscX,unsigned char ucSlaveAddr, BYTE *aucI2CBuffer, char i, int *iLength )
{
	ST_ErrorCode_t error;
	/*
	STI2C_Read (HandleTuner, pData, 1, ReadTimeout, &actLen);
	*/
                         if( ucSlaveAddr==0x38 )
	   {     
     	         error=STI2C_Read (I2CDemodHandle,  aucI2CBuffer, i ,100, (U32 *) iLength);
	   }
	   else if( ucSlaveAddr==0xc2 )
	    {     
     	         error=STI2C_Read (I2CTunerHandle,  aucI2CBuffer, i ,100, (U32 *) iLength);
     	         do_report ( severity_info, "read Tuner...\n");
	   }
	   else
	   {
	   do_report ( severity_info, "error!: invalid address in module QAM0297\n");
	   error=1;
	}
	return error;
}

/*
 i2c_write ( i2c_ssc0, ucSlaveAddr, aucI2CBuffer, 1, &iActLen )
*/
char i2c_write ( STI2C_Handle_t  i2c_sscX,unsigned char ucSlaveAddr, BYTE *aucI2CBuffer, char i, int *iLength )
{
	
	ST_ErrorCode_t error;
	
               /*
               STI2C_Write(I2CHandle, Buf, 2, 100, &NumberWritten);
               */
               
                  if( ucSlaveAddr==0x38 )
                  {
                   error=STI2C_Write(I2CDemodHandle,  aucI2CBuffer, i, 100,  ( U32 *) iLength);
                   //  do_report ( severity_info, "write 0297 error=%d... \n",error);
                  }
                   else if (ucSlaveAddr==0xc2 )
                   {
                   error=STI2C_Write(I2CTunerHandle,  aucI2CBuffer, i, 100,  ( U32 *) iLength);
                    do_report ( severity_info, "write Tuner...error=%d...\n",error);
                   }
                  else
                  {
                     do_report ( severity_info, "error!: invalid address in module QAM0297\n");
                        error=1;
                   }
                    return error;
}
static int    	Driv0297CN[5][40]            	;
static int    	Driv0297CNEstimatorOffset    	;
static int    	Driv0297CNEstimation         	;

void Driv0297CNEstimatorInit(void)
{
        int idB ;
    	int iQAM ;	
    	Driv0297CNEstimation  = 3000  ;
    	Driv0297CNEstimatorOffset = 0 ;
    	    	
    	for (idB = 0 ; idB < 40; idB++)
      		for (iQAM = 0 ; iQAM < 5 ; iQAM++)
        		Driv0297CN[iQAM][idB] = 100000;
    	/* QAM = 16 */
    	iQAM = 0 ;
    	for (idB = 0 ; idB < 15 ; idB++)  
      		Driv0297CN[iQAM][idB] = 10500 + (15-idB)*1000;
    	Driv0297CN[iQAM][15] = 10500 ;
    	Driv0297CN[iQAM][16] =  9000 ;
    	Driv0297CN[iQAM][17] =  8120 ;
    	Driv0297CN[iQAM][18] =  7300 ;
    	Driv0297CN[iQAM][19] =  6530 ;
    	Driv0297CN[iQAM][20] =  5870 ;
    	Driv0297CN[iQAM][21] =  5310 ;
    	Driv0297CN[iQAM][22] =  4790 ;
    	Driv0297CN[iQAM][23] =  4320 ;
    	Driv0297CN[iQAM][24] =  3920 ;
    	Driv0297CN[iQAM][25] =  3590 ;
    	Driv0297CN[iQAM][26] =  3270 ;
    	Driv0297CN[iQAM][27] =  3000 ;
    	Driv0297CN[iQAM][28] =  2760 ;
    	Driv0297CN[iQAM][29] =  2560 ;
    	Driv0297CN[iQAM][30] =  2420 ;
    	Driv0297CN[iQAM][31] =  2260 ;
    	Driv0297CN[iQAM][32] =  2150 ;
    	Driv0297CN[iQAM][33] =  2060 ;
    	Driv0297CN[iQAM][34] =  1980 ;
    	Driv0297CN[iQAM][35] =  1910 ;
    	Driv0297CN[iQAM][36] =  1850 ;
    	Driv0297CN[iQAM][37] =  1810 ;
    	Driv0297CN[iQAM][38] =  1750 ;
    	Driv0297CN[iQAM][39] =  1740 ;
    	/* QAM = 32 */
    	iQAM = 1 ;
    	for (idB = 0 ; idB < 18 ; idB++)  
      		Driv0297CN[iQAM][idB] = 10500 + (18-idB)*1000;
    	Driv0297CN[iQAM][18] = 10500 ;
    	Driv0297CN[iQAM][19] =  9120 ;
    	Driv0297CN[iQAM][20] =  8100 ;
    	Driv0297CN[iQAM][21] =  7300 ;
    	Driv0297CN[iQAM][22] =  6560 ;
    	Driv0297CN[iQAM][23] =  5930 ;
    	Driv0297CN[iQAM][24] =  5380 ;
    	Driv0297CN[iQAM][25] =  4920 ;
    	Driv0297CN[iQAM][26] =  4520 ;
    	Driv0297CN[iQAM][27] =  4130 ;
    	Driv0297CN[iQAM][28] =  3800 ;
    	Driv0297CN[iQAM][29] =  3520 ;
    	Driv0297CN[iQAM][30] =  3290 ;
    	Driv0297CN[iQAM][31] =  3120 ;
    	Driv0297CN[iQAM][32] =  2980 ;
    	Driv0297CN[iQAM][33] =  2850 ;
    	Driv0297CN[iQAM][34] =  2730 ;
    	Driv0297CN[iQAM][35] =  2650 ;
    	Driv0297CN[iQAM][36] =  2560 ;
    	Driv0297CN[iQAM][37] =  2510 ;
    	Driv0297CN[iQAM][38] =  2480 ;
    	Driv0297CN[iQAM][39] =  2440 ;
    	/* QAM = 64 */
    	iQAM = 2 ;
    	for (idB = 0 ; idB < 21 ; idB++)  
      	Driv0297CN[iQAM][idB] = 10500 + (21-idB)*1000;
    	Driv0297CN[iQAM][21] = 10500 ;
    	Driv0297CN[iQAM][22] =  9300 ;
    	Driv0297CN[iQAM][23] =  8400 ;
    	Driv0297CN[iQAM][24] =  7600 ;
    	Driv0297CN[iQAM][25] =  6850 ;
    	Driv0297CN[iQAM][26] =  6250 ;
    	Driv0297CN[iQAM][27] =  5750 ;
    	Driv0297CN[iQAM][28] =  5250 ;
    	Driv0297CN[iQAM][29] =  4850 ;
    	Driv0297CN[iQAM][30] =  4450 ;
    	Driv0297CN[iQAM][31] =  4200 ;
    	Driv0297CN[iQAM][32] =  3900 ;
    	Driv0297CN[iQAM][33] =  3700 ;
    	Driv0297CN[iQAM][34] =  3550 ;
    	Driv0297CN[iQAM][35] =  3400 ;
    	Driv0297CN[iQAM][36] =  3300 ;
    	Driv0297CN[iQAM][37] =  3200 ;
    	Driv0297CN[iQAM][38] =  3130 ;
    	Driv0297CN[iQAM][39] =  3060 ;
    	/* QAM = 128 */
    	iQAM = 3 ;
    	for (idB = 0 ; idB < 24 ; idB++)  
      		Driv0297CN[iQAM][idB] = 10500 + (24-idB)*1000;
	Driv0297CN[iQAM][24] = 10500 ;
	Driv0297CN[iQAM][25] =  9660 ;
	Driv0297CN[iQAM][26] =  8780 ;
	Driv0297CN[iQAM][27] =  7970 ;
	Driv0297CN[iQAM][28] =  7310 ;
	Driv0297CN[iQAM][29] =  6750 ;
	Driv0297CN[iQAM][30] =  6220 ;
	Driv0297CN[iQAM][31] =  5810 ;
	Driv0297CN[iQAM][32] =  5430 ;
	Driv0297CN[iQAM][33] =  5090 ;
	Driv0297CN[iQAM][34] =  4880 ;
	Driv0297CN[iQAM][35] =  4700 ;
	Driv0297CN[iQAM][36] =  4500 ;
	Driv0297CN[iQAM][37] =  4340 ;
	Driv0297CN[iQAM][38] =  4270 ;
	Driv0297CN[iQAM][39] =  4150 ;
    	/* QAM = 256 */
    	iQAM = 4 ;
    	for (idB = 0 ; idB < 28 ; idB++)  
      		Driv0297CN[iQAM][idB] = 10500 + (28-idB)*1000;
    	Driv0297CN[iQAM][28] = 10500 ;
    	Driv0297CN[iQAM][29] =  9600 ;
    	Driv0297CN[iQAM][30] =  9000 ;
    	Driv0297CN[iQAM][31] =  8400 ;
    	Driv0297CN[iQAM][32] =  7800 ;
    	Driv0297CN[iQAM][33] =  7400 ;
    	Driv0297CN[iQAM][34] =  7100 ;
    	Driv0297CN[iQAM][35] =  6700 ;
    	Driv0297CN[iQAM][36] =  6550 ;
    	Driv0297CN[iQAM][37] =  6370 ;
    	Driv0297CN[iQAM][38] =  6200 ;
    	Driv0297CN[iQAM][39] =  6150 ;
}
/*----------------------+
NOTE:Driv0297Init
+-----------------------*/
void Driv0297CNEstimator(int *_pMean, int *_pCN)
{
   	int int_tmp , i   ;
   	int idB           ;
   	int iQAM, QAMSize ;
   	int CurrentMean   ;
   	int ComputedMean  ;
   	int OldMean       ;
   	int Result        ;
   	unsigned char  val_equ7_lo,val_equ8_hi,EndOfSearch  ;
   	/**/
   	QAMSize = 64;
    	switch (QAMSize)
     	{
      	case 16 :
        	iQAM = 0 ;
        	break ;
      	case 32 :
        	iQAM = 1 ;
        	break ;
      	case 64 :
        	iQAM = 2 ;
        	break ;
      	case 128 :
        	iQAM = 3 ;
        	break ;
      	case 256 :
        	iQAM = 4 ;
        	break ;
      	}
   	
   	for (i = 0 ; i < 100 ; i ++)
	{
        	task_delay(WAIT_FOR_1_SEC/1000) ; /* wait 1 ms */
	   	link_read (0x07, &val_equ7_lo);
	   	link_read (0x08, &val_equ8_hi);
	   	int_tmp = (val_equ8_hi<<8)+ val_equ7_lo ;
	   	Driv0297CNEstimation = (63*Driv0297CNEstimation)/64 + int_tmp/64 ;
	}
   	
   	ComputedMean  = Driv0297CNEstimation - Driv0297CNEstimatorOffset  ; /* offset correction */
   	CurrentMean   = Driv0297CN[iQAM][0] ;
   	idB = 1 ;
   	EndOfSearch = 0 ;
   	while (EndOfSearch == 0)
     	{
      		OldMean = CurrentMean ;
      		CurrentMean = Driv0297CN[iQAM][idB] ;
      		if ((CurrentMean <= ComputedMean)||(idB >= 39))
        		EndOfSearch = 1 ;
      		else
        		idB += 1 ;
     	}
   	Result = 100*idB ;
   	if(CurrentMean < OldMean)
     		Result -= (100*(CurrentMean - ComputedMean))/(CurrentMean - OldMean) ;
   	if(LockIndicator==0)
   		Result=0;
 	if(Result>4000)
 		Result=4000;
   	*_pMean = Driv0297CNEstimation ;
   	*_pCN   = Result/100;
   	
   	return ;
}
int SignalStrong(void)
{
	int data=0;
	int agc=0;
	if(LockIndicator==0)
   		return 0;
	agc  = linkGetAGC2();
	
	if(agc>=599)
		data=29;
	else if(589<agc)
		data=30;
	else if(581<agc)
		data=31;
	else if(573<agc)
		data=31;
	else if(566<agc)
		data=31;
	else if(556<agc)
		data=31;
	else if(548<agc)
		data=32;
	else if(541<agc)
		data=32;
	else if(533<agc)
		data=32;
	else if(526<agc)
		data=32;
	else if(520<agc)
		data=33;
	else if(514<agc)
		data=33;//517  34.1
	else if(507<agc)
		data=33;
	else if(497<agc)
		data=34;
	else if(488<agc)
		data=34;
	else if(479<agc)
		data=35;
	else if(471<agc)
		data=35;
	else if(464<agc)
		data=36;
	else if(455<agc)
		data=36;
	else if(448<agc)
		data=37;//37.8  448
	else if(440<agc)
		data=38;
	else if(433<agc)
		data=39;
	else if(426<agc)
		data=40;
	else if(418<agc)
		data=41;
	else if(412<agc)
		data=42;//50//416  42.3
	else if(405<agc)
		data=43;
	else if(399<agc)
		data=44;
	else if(393<agc)
		data=45;
	else if(386<agc)
		data=46;
	else if(379<agc)
		data=47;
	else if(373<agc)
		data=48;
	else if(319<agc)
		data=49;
	else if(286<agc)
		data=50;
	else if(267<agc)
		data=51;
	else if(256<agc)
		data=52;
	else if(247<agc)
		data=53;
	else if(240<agc)
		data=54;
	else if(234<agc)
		data=55;
	else if(229<agc)
		data=56;
	else if(225<agc)
		data=57;
	else if(221<agc)
		data=58;
	else if(218<agc)
		data=59;
	else if(215<agc)
		data=60;
	else if(212<agc)
		data=61;
	else if(209<agc)
		data=62;
	else if(207<agc)
		data=63;
	else if(204<agc)
		data=64;
	else if(203<agc)
		data=65;
	else if(199<agc)
		data=66;
	else if(196<agc)
		data=67;
	else if(194<agc)
		data=68;
	else if(191<agc)
		data=69;
	else if(188<agc)
		data=70;
	else if(184<agc)
		data=71;
	else if(180<agc)
		data=73;
	else if(175<agc)
		data=75;
	else if(170<agc)
		data=77;
	else if(165<agc)
		data=78;
	else if(159<agc)
		data=80;
	else if(153<agc)
		data=82;
	else if(145<agc)
		data=84;
	else if(137<agc)
		data=86;
	else if(128<agc)
		data=88;
	else if(118<agc)
		data=89;
	else if(111<agc)
		data=90;
	else if(103<agc)
		data=91;
	else if(95<agc)
		data=92;
	else if(89<agc)
		data=93;
	else if(83<agc)
		data=94;
	else if(78<agc)
		data=95;
	else if(73<agc)
		data=96;
	else if(69<agc)
		data=97;
	else if(66<agc)
		data=98;
	else if(63<agc)
		data=99;
	else
		data=100;
//			 do_report( severity_error, "agc=%d\n",agc);
/*	sigal value=434  436   39.8
578     442    443  38.1

586  430      425    40.3

594   416       42.3 
602   425  424  39.2
610   435  442  443  38.8
618   451  449  435  40.6
626   448  447  448  37.8
634   455  455  456  38.1
642   446  446  480   36.6
650   517  517  518  34.1
*/
	return (data);
}
//



/*/////////////////////////////////////////////////////////////////////////////////////*/

⌨️ 快捷键说明

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