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

📄 mt352.c

📁 PHILIPS1316 tuner 驱动软件用于PHILIPS TDM1316 DVB-T tuner。经过实际测试。
💻 C
📖 第 1 页 / 共 5 页
字号:
	else if(dwTunerFreq < 864000)
	{
	TunerByte5 = 0x08;
	}
	else
	{
	printf("Error Input Centerfreq");
	}
	
	
	  

	dwTunerFreq=(TunerByte4<<8) + TunerByte5;
	if (!Tnim_WriteRegisterValue(psTnim,MT352_TUNER_CONT,2,dwTunerFreq))//MT352_TUNER_CONT=0x5B
		return FALSE;

	/* calculate LO frequency*/
	dwTunerFreq=FREQUENCY(dwBWandFreqkHz);/* kHz*/
	/* IF offset*/
	if ((psTnim->psTunerInfo->Settings) & TUNER_LO_INJECTION)//TUNER_LO_INJECTION  0x02
		dwTunerFreq -= psTnim->psTunerInfo->IF1kHz;      //Setting(SEM)==0x01
	else
		dwTunerFreq += psTnim->psTunerInfo->IF1kHz;

	/* convert frequency to divider ratio*/
//	if (psTnim->psTunerTable[ucIndex-1].FcompkHzx100==0) return FALSE;//FcompKHzx100==16667
	dwTunerFreq = (dwTunerFreq * 1000) / Refer_Value;//Refer_Value = 16667
	dwTunerFreq +=5;dwTunerFreq /=10;     /*round off the result*/

	/* program the registers*/
	if (!Tnim_WriteRegisterValue(psTnim,MT352_CHAN_START,2,dwTunerFreq))
		return FALSE;
	if (!Tnim_WriteRegisterValue(psTnim,MT352_CHAN_STOP,2,dwTunerFreq))
		return FALSE;

	return TRUE;
}
#endif

#if defined(TDM_1316)
bool8 Tnim_ProgramTuner(PSTNIMCTL psTnim,u32 dwBWandFreqkHz)
{
	u8 ucIndex;
	u32 dwTunerFreq;
	u16 TunerByte2,TunerByte3,TunerByte4,TunerByte5;
	u32 Refer_Value;
                         
	TunerByte4=0xCA;
	Refer_Value = 16667;

	/*address*/
	#if 0
	if (!RegisterWrite2wb(psTnim->DeviceID,MT352_TUNER_ADDR,//MT352_TUNER_ADDR==0x58
		&(psTnim->psTunerInfo->Address),1)) 
			return FALSE;//psTnim->psTunerInfo->Address==0xC0                                                                                                                             
	#endif

	if (!RegisterWrite2wb(psTnim->DeviceID,MT352_TUNER_ADDR,//MT352_TUNER_ADDR==0x58
		&(psTnim->psTunerInfo->Address),1)) 
			return FALSE;//psTnim->psTunerInfo->Address==0xC0

	/* Control Bytes*/
//	dwTunerFreq= (FREQUENCY(dwBWandFreqkHz))/1000; /* RF (MHz)*/
	dwTunerFreq= (FREQUENCY(dwBWandFreqkHz)); /* RF (KHz)*/
	//FREQUENCY(dwBWfreq) ((dwBWfreq) & 0x00FFFFFF)

#if 0
	for (ucIndex = psTnim->psTunerInfo->TableCount;ucIndex>1;ucIndex--)
	{
	if ((dwTunerFreq)>=psTnim->psTunerTable[ucIndex-1].FreqMHz) break;
	}

	/* Get control byte for RF frequency*/
	dwTunerFreq = psTnim->psTunerTable[ucIndex-1].Control;
	/* add in bandwidth switching */
	switch (BANDWIDTH(dwBWandFreqkHz))//BANDWIDTH(dwBWfreq) ((u8)((dwBWfreq)>>24))
	{
		case 6:dwTunerFreq |= psTnim->psTunerInfo->Control6MHz; break;
		case 7:dwTunerFreq |= psTnim->psTunerInfo->Control7MHz; break;
		case 8:dwTunerFreq |= psTnim->psTunerInfo->Control8MHz; break;
		default:;
	}
#endif

	/* ChargePump Setting version 1*/
#if 1
	if(dwTunerFreq < 94000)//130000-36000
	{
	/*130uA  (extended)*/
		TunerByte5=0x61;
	}
	else if(dwTunerFreq <124000)// 160000-36000
	{
	/* 280uA (extendeds)*/
		TunerByte5=0xA1;
	}
	else if(dwTunerFreq < 164000)//200000-36000
	{
	/*410uA  (extended)*/
		TunerByte5=0xC1;
	}
	else if(dwTunerFreq <254000)//290000-36000
	{
	/*130uA (extended)*/
		TunerByte5=0x62;
	}
	else if(dwTunerFreq < 384000)//420000-36000
	{
	/*280uA (extended)*/
		TunerByte5=0xA2;
	}
	else if(dwTunerFreq < 444000)//480000-36000
	{
	/*410uA (extended)*/
		TunerByte5=0xC2;
	}
	else if(dwTunerFreq < 584000)//620000-36000
	{
	/*130uA (extended)*/
		TunerByte5=0x64;
	}
	else if(dwTunerFreq < 794000)//830000-36000
	{
	/*280uA (extended)*/
		TunerByte5=0xA4;
	}
	else if(dwTunerFreq < 828000)//864000-36000
	{
	/*600uA (extended)*/
		TunerByte5=0xE4;
	}
	else
	{
	printf("Error Input Centerfreq");
	}
	if(BANDWIDTH(dwBWandFreqkHz) == 8)
	   TunerByte5 |= 0x08;//rf 

	#endif
	
	#if 0
	/* ChargePump Setting version 1*/
	if(dwTunerFreq < 150001)
	{
	/*2 --> 50uA  (extended)*/
	TunerByte4=TunerByte4 & 0xB7;
	TunerByte4=TunerByte4 | 0x30;
	}
	else if(dwTunerFreq < 173001)
	{
	/*3 --> 125uA (extendeds)*/
		TunerByte4=TunerByte4 & 0xBF;
		TunerByte4=TunerByte4 | 0x38;
	}
	else if(dwTunerFreq < 250001)
	{
	/*2 --> 50uA  (extended)*/
	TunerByte4=TunerByte4 & 0xB7;
	TunerByte4=TunerByte4 | 0x30;
	}
	else if(dwTunerFreq < 400001)
	{
	/*3 --> 125uA (extended)*/
		TunerByte4=TunerByte4 & 0xBF;
		TunerByte4=TunerByte4 | 0x38;
	}
	else if(dwTunerFreq < 420001)
	{
	/*4 --> 250uA (extended)*/
		TunerByte4=TunerByte4 & 0xF7;
		TunerByte4=TunerByte4 | 0x70;
	}
	else if(dwTunerFreq < 470001)
	{
	/*5 --> 650uA (extended)*/
		TunerByte4=TunerByte4 | 0x78;
	}
	else if(dwTunerFreq < 600001)
	{
	/*3 --> 125uA (extended)*/
		TunerByte4=TunerByte4 & 0xBF;
		TunerByte4=TunerByte4 | 0x38;
	}
	else if(dwTunerFreq < 730001)
	{
	/*4 --> 250uA (extended)*/
		TunerByte4=TunerByte4 & 0xF7;
		TunerByte4=TunerByte4 | 0x70;
	}
	else if(dwTunerFreq < 864001)
	{
	/*5 --> 650uA (extended)*/
		TunerByte4=TunerByte4 | 0x78;
	}
	else
	{
	printf("Error Input Centerfreq");
	}
	/*0 --> 50uA  (normal)*/
	/*      TunerByte4=TunerByte4 & 0x8F; */
	/*1 --> 250uA (normal)*/
	/*	TunerByte4=TunerByte4 | 0x40;   */
	/*	TunerByte4=TunerByte4 & 0xCF;   */
	/*2 --> 50uA  (extended)*/
	/*	TunerByte4=TunerByte4 & 0xB7;   */
	/*	TunerByte4=TunerByte4 | 0x30;   */
	/*3 --> 125uA (extended)*/
	/*	TunerByte4=TunerByte4 & 0xBF;   */
	/*	TunerByte4=TunerByte4 | 0x38;   */
	/*4 --> 250uA (extended)*/
	/*	TunerByte4=TunerByte4 & 0xF7;   */
	/*	TunerByte4=TunerByte4 | 0x70;   */
	/*5 --> 650uA (extended)*/
	/*	TunerByte4=TunerByte4 | 0x78;   */
	/* program the control register*/

	if(dwTunerFreq < 173251)
	{
	TunerByte5 = 0x01;
	}
	else if(dwTunerFreq < 470251)
	{
	TunerByte5 = 0x02;          
	}
	else if(dwTunerFreq < 864000)
	{
	TunerByte5 = 0x08;
	}
	else
	{
	printf("Error Input Centerfreq");
	}
	
	
	#endif
	
	dwTunerFreq=(TunerByte4<<8) + TunerByte5;
	if (!Tnim_WriteRegisterValue(psTnim,MT352_TUNER_CONT,2,dwTunerFreq))//MT352_TUNER_CONT=0x5B
		return FALSE;

	/* calculate LO frequency*/
	dwTunerFreq=FREQUENCY(dwBWandFreqkHz);/* kHz*/
	/* IF offset*/
	if ((psTnim->psTunerInfo->Settings) & TUNER_LO_INJECTION)//TUNER_LO_INJECTION  0x02
		dwTunerFreq -= psTnim->psTunerInfo->IF1kHz;      //Setting(SEM)==0x01
	else
		dwTunerFreq += psTnim->psTunerInfo->IF1kHz;

	/* convert frequency to divider ratio*/
//	if (psTnim->psTunerTable[ucIndex-1].FcompkHzx100==0) return FALSE;//FcompKHzx100==16667
	dwTunerFreq = (dwTunerFreq * 1000) / Refer_Value;//Refer_Value = 16667
	dwTunerFreq +=5;dwTunerFreq /=10;     /*round off the result*/

	/* program the registers*/
	if (!Tnim_WriteRegisterValue(psTnim,MT352_CHAN_START,2,dwTunerFreq))
		return FALSE;
	if (!Tnim_WriteRegisterValue(psTnim,MT352_CHAN_STOP,2,dwTunerFreq))
		return FALSE;

	return TRUE;
}
#endif


#if defined(COMTECK_DVBT_3528)
#define F_REF	            166666//125000      // Hz
#define F_IF	            36166666    // Hz
bool8 Tnim_ProgramTuner(PSTNIMCTL psTnim,u32 dwBWandFreqkHz)
{
    u8  u8DB1,u8DB2,u8CB,u8CBC,u8BB,u8AB,u8P2;    
	u32 u32FreqKHz;
    u32 u32CaluateTemp;	
	u8 u8Buffer[5];


	u32FreqKHz= (FREQUENCY(dwBWandFreqkHz)); /* RF (KHz)*/
    
	u32CaluateTemp = (u32)(u32FreqKHz*1000 + F_IF)/F_REF;
	u8DB1 = (u8)((u16)((u32CaluateTemp&0x7F00)>>8));
	u8DB2 = (u8)((u16)(u32CaluateTemp&0x00FF));
	
#if 1 // MDVBT-3528
    // Pll Spec not support Bandwidth switch
    u8P2 = 0;
    u8AB = 0x50;
    
    //---------------- //JEFFSUN 20040902 ADD
    switch (BANDWIDTH(dwBWandFreqkHz))//BANDWIDTH(dwBWfreq) ((u8)((dwBWfreq)>>24))   //jeff
	{
	    default:
	    case 6:
	    case 7:
	        u8P2 = 0 ;
	        break;
        case 8:
            u8P2 = 4 ;
            break;
	}
          
    
     if (u32FreqKHz <= 132000)          //JEFFSUN 20040902 ADD
    {
        u8BB    = 1 + u8P2;
	    u8CB    = 0xB4;
	    u8CBC   = 0x9C;
    }
    
    else if (u32FreqKHz <= 149000)       //JEFFSUN 20040902 ADD
    {
        u8BB    = 1 + u8P2;
	    u8CB    = 0xBC;
	    u8CBC   = 0x9C;
    }
    
   //---------------- //JEFFSUN 20040902 ADD
    
    
    else if (u32FreqKHz <= 349000)
    {
        u8BB    = 1 + u8P2;
	    u8CB    = 0xB4;
	    u8CBC   = 0x9C;
    }
    else if (u32FreqKHz <= 397000)
    {
        u8BB    = 1 + u8P2;
	    u8CB    = 0xBC;
	    u8CBC   = 0x9C;
    }
    else if (u32FreqKHz <= 428000)
    {
        u8BB    = 1 + u8P2;
	    u8CB    = 0xF4;
	    u8CBC   = 0xDC;
    }
    else if (u32FreqKHz <= 659000)
    {
        u8BB    = 8 + u8P2;
	    u8CB    = 0xB4;
	    u8CBC   = 0x9C;
    }
    else if (u32FreqKHz <= 759000)
    {
        u8BB    = 8 + u8P2;
	    u8CB    = 0xBC;
	    u8CBC   = 0x9C;
    }
    else
    {
        u8BB    = 8 + u8P2;
	    u8CB    = 0xF4;
	    u8CBC   = 0xDC;
    }
#else
	switch (BANDWIDTH(dwBWandFreqkHz))//BANDWIDTH(dwBWfreq) ((u8)((dwBWfreq)>>24))
	{
	    default:
	    case 6:
	    case 7:
	        u8P2 = 0 ;
	        break;
        case 8:
            u8P2 = 4 ;
            break;
	}
	if (u32FreqKHz <= 132000) 
	{
	    u8BB    = 1 + u8P2;
	    u8CB    = 0xB4;
	    u8CBC   = 0x9C;
		
	}
	else if (u32FreqKHz <= 149900) 
	{
		u8BB    = 1 + u8P2;
		u8CB    = 0xBC;
		u8CBC   = 0x9C;
	}
	else if (u32FreqKHz <= 349000) 
	{ 
		u8BB    = 1 + u8P2;     //jeffsun 20040902    2 as 1
		u8CB    = 0xB4;
		u8CBC   = 0x9C;
	}
	else if (u32FreqKHz <= 397000) 
	{
		u8BB    = 1 + u8P2;           //jeffsun 20040902  2 as 1
		u8CB    = 0xBC;
		u8CBC   = 0x9C;
	}
	else if (u32FreqKHz <= 430000) 
	{
		u8BB    = 1 + u8P2;           //jeffsun 20040902  2 as 1
		u8CB    = 0xF4;
		u8CBC   = 0xDC;
	}
	else if (u32FreqKHz <= 659000) 
	{
		u8BB    = 8 + u8P2;
		u8CB    = 0xB4;
		u8CBC   = 0x9C;
	}
	else if (u32FreqKHz <= 759000) 
	{
		u8BB    = 8 + u8P2;
		u8CB    = 0xBC;
		u8CBC   = 0x9C;
	}
	else 
	{
		u8BB    = 8 + u8P2;
		u8CB    = 0xF4;
		u8CBC   = 0xDC;
	}
	u8AB = 0x50;
#endif

	u8Buffer[0]=0xC0;
	u8Buffer[1]=u8DB1;
	u8Buffer[2]=u8DB2;
	u8Buffer[3]=u8CB;
	u8Buffer[4]=u8BB;

	if (!RegisterWrite2wb(psTnim->DeviceID,MT352_TUNER_ADDR, u8Buffer,5) )
		return FALSE; 
	u8Buffer[0]=1;
	if (!RegisterWrite2wb(psTnim->DeviceID,MT352_TUNER_GO, u8Buffer,1) ) //0x5D
		return FALSE;

	u8Buffer[0]=0xC0;
	u8Buffer[1]=u8DB1;
	u8Buffer[2]=u8DB2;
	u8Buffer[3]=u8CBC;
	u8Buffer[4]=u8AB;

	if (!RegisterWrite2wb(psTnim->DeviceID,MT352_TUNER_ADDR, u8Buffer,5) )
		return FALSE; 
	u8Buffer[0]=1;
	if (!RegisterWrite2wb(psTnim->DeviceID,MT352_TUNER_GO, u8Buffer,1) ) //0x5D
		return FALSE;

	return TRUE;

}
#endif

#ifdef SEM_DNOS204
#define SEM_DNOS204ZH102A
#endif

#ifdef SEM_DNOS204ZH101A
bool8 Tnim_ProgramTuner(PSTNIMCTL psTnim,u32 dwBWandFreqkHz)
{
	u8 ucIndex;
	u32 dwTunerFreq;
	u16 TunerByte2,TunerByte3,TunerByte4,TunerByte5;
	u32 Refer_Value;

	Refer_Value=16667;
	/*address*/
	#if 0
	if (!RegisterWrite2wb(psTnim->DeviceID,MT352_TUNER_ADDR,//MT352_TUNER_ADDR==0x58
		&(psTnim->psTunerInfo->Address),1)) 
			return FALSE;//psTnim->psTunerInfo->Address==0xC2
	#endif

	if (!RegisterWrite2wb(psTnim->DeviceID,MT352_TUNER_ADDR,//MT352_TUNER_ADDR==0x58
		&(psTnim->psTunerInfo->Address),1)) 
			return FALSE;//psTnim->psTunerInfo->Address==0xC2

	/* Control Bytes*/
//	dwTunerFreq= (FREQUENCY(dwBWandFreqkHz))/1000; /* RF (MHz)*/
	dwTunerFreq= (FREQUENCY(dwBWandFreqkHz)); /* RF (KHz)*/
	//FREQUENCY(dwBWfreq) ((dwBWfreq) & 0x00FFFFFF)

⌨️ 快捷键说明

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