📄 mt352.c
字号:
/*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");
}
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(THOM_DTT7592)
bool8 Tnim_ProgramTuner(PSTNIMCTL psTnim,u32 dwBWandFreqkHz)
{
u8 ucIndex;
u32 dwTunerFreq;
u16 TunerByte2,TunerByte3,TunerByte4,TunerByte5;
u32 Refer_Value;
TunerByte4=0xBC;
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)
#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(dwTunerFreq < 264001)
{
TunerByte4=TunerByte4 & 0xB5;
TunerByte4=TunerByte4 | 0x34;
}
else if(dwTunerFreq < 735001)
{
/*3 --> 125uA (extendeds)*/
TunerByte4=TunerByte4 & 0xBD;
TunerByte4=TunerByte4 | 0x3C;
}
else if(dwTunerFreq < 835001)
{
/*2 --> 50uA (extended)*/
TunerByte4=TunerByte4 & 0xF5;
TunerByte4=TunerByte4 | 0x74;
}
else if(dwTunerFreq < 896001)
{
/*3 --> 125uA (extended)*/
TunerByte4=TunerByte4 & 0xFD;
TunerByte4=TunerByte4 | 0x7C;
}
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*/
switch (BANDWIDTH(dwBWandFreqkHz))
{
default:
case 6:
case 7:
TunerByte5=TunerByte5|0x10;
break;
case 8:
TunerByte5=TunerByte5&0xEF;
break;
}
if(dwTunerFreq <264001)
{
TunerByte5 = TunerByte5&0xF2;
TunerByte5 = TunerByte5|0x02;
}
else if(dwTunerFreq < 896001)
{
TunerByte5 = TunerByte5&0xF8;
TunerByte5 = 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(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)
TunerByte4=0x86;//DNOS204ZH101A
// TunerByte4=0x84;//DNOS204ZH102A
/* ChargePump Setting version 1*/
if(dwTunerFreq < 546001)
{/*3 --> 125uA (extended)*/ //CP=1;
TunerByte4=TunerByte4 | 0x38;
}
else if(dwTunerFreq < 834001)
{/*4 --> 250uA (extended)*/ //CP=2;
TunerByte4=TunerByte4 | 0x70;
}
else if(dwTunerFreq < 884001)
{/*5 --> 650uA (extended)*/ //CP=3;
TunerByte4=TunerByte4 | 0x78;
}
else
{
printf("Error Input Centerfreq");
}
if(dwTunerFreq < 173251)
{
TunerByte5 = 0x01;
}
else if(dwTunerFreq < 470251)
{
TunerByte5 = 0x01;
}
else if(dwTunerFreq < 884000)
{
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;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -