📄 radio.c
字号:
Radio.FMBand[FmIdx].BandAFNum=0;
Radio.FMBand[FmIdx].BandPI=0;
}
}
}
void RDSLoadBandAF(void)
{
unsigned char i;
if(RDS.F_AFEnable||RDS.F_TAEnable)
{
if(FreqInFM(Radio.Freq))
{
RDS.PI=Radio.FMBand[FmIdx].BandPI;
RDS.PIBackup=RDS.PI;
RDS.AFNum=Radio.FMBand[FmIdx].BandAFNum;
for(i=0;i<8;i++)
RDS.AF[i]=Radio.FMBand[FmIdx].BandAFList[i];
if(RDS.AFNum>1)
{
SetAFSearch();
}
if(RDS.PIBackup!=0)
{
RDS.PISeekTimer=PISeek10msTimer;
}
}
}
Radio.F_TunerDispReq=1;
}
#endif
/*********************************************
Function: SeekOn
Description:
Write/Modify: Perry.Liang
Time: 2006-1-24- 15:38:17
*********************************************/
void SeekOn(void)
{
#if TDA7540_TUNER
if(!Radio.F_TDA7541)
{
//seek on (ISS time constant)
Radio.TunerBuff[0] |= 0x80;
RadioTunerSend(0,0);
// enable IFC
Radio.TunerBuff[5] |= 0x08;
RadioTunerSend(5,5);
//adjust slider for seek
SaveSmeterSlider=Radio.TunerBuff[18];
if(FreqInFM(Radio.Freq))
{
Radio.TunerBuff[18] &= y11000000;
Radio.TunerBuff[18] += y00100000;
}
else
{
//AM short time constant
//Radio.TunerBuff[7] |= 0x01;
//RadioTunerSend(7,7);
Radio.TunerBuff[18] &= y11000000;
//Radio.TunerBuff[18] += y00000011;
Radio.TunerBuff[18] += y00101111;//KSE
}
RadioTunerSend(18,18);
BreakAFCheck();
}
#endif
#if TDA7541_TUNER
if(Radio.F_TDA7541)
{
//seek on (ISS time constant)
Radio.TunerBuff[0] =(Radio.TunerBuff[0]&0x7f)|TDA7541_SEEK_ON;
RadioTunerSend(0,0);
//No enable/disable IFC in TDA7541
//Set FSW offset to off, based on this to adjust seek sensitivity according customer spec.
SaveFSWOffset=Radio.TunerBuff[16];
Radio.TunerBuff[16]=(Radio.TunerBuff[16]&0x3f);//FSW offset off
RadioTunerSend(16,16);
BreakAFCheck();
}
#endif
}
/*********************************************
Function: SeekOff
Description:
Write/Modify: Perry.Liang
Time: 2006-1-24- 15:38:15
*********************************************/
void SeekOff(void)
{
#if TDA7540_TUNER
if(!Radio.F_TDA7541)
{
//seek off(ISS time constant)
Radio.TunerBuff[0] &= 0x7F;
RadioTunerSend(0,0);
//Disable IFC
Radio.TunerBuff[5] &= 0xf7;
RadioTunerSend(5,5);
//Normal AGC time constant
//Radio.TunerBuff[7] &= 0xFE;
//RadioTunerSend(7,7);
//Return back to original slider
Radio.TunerBuff[18]=SaveSmeterSlider;
RadioTunerSend(18,18);
}
#endif
#if TDA7541_TUNER
if(Radio.F_TDA7541)
{
//seek on (ISS time constant)
Radio.TunerBuff[0] =(Radio.TunerBuff[0]&0x7f)|TDA7541_SEEK_OFF;
RadioTunerSend(0,0);
//No need to enable/disable IFC
//HAVE TO return back to FSW offset because this related to radio performance.
Radio.TunerBuff[16]=SaveFSWOffset;
RadioTunerSend(16,16);
BreakAFCheck();
}
#endif
}
/*********************************************
Function: RadioMute
Description:
Write/Modify: Perry.Liang
Time: 2006-1-24- 15:38:14
*********************************************/
void RadioMute(unsigned char type)
{
//if(type==SOFTOFF)
//AFSPin(1);
AudioMute(type);
//if(type==SOFTON)
//{
//Wait10us(100);
//AFSPin(0);
//}
}
/*********************************************
Function: PresetOrder
Description:
Write/Modify: Perry.Liang
Time: 2006-1-24- 15:38:13
*********************************************/
void PresetOrder(void)
{
unsigned char i,j;
if(TempPresetNum<6)
{
if(FreqInFM(Radio.Freq))
{
Radio.FMBand[FmIdx].MemFreq[TempPresetNum]=Radio.Freq;
Radio.FMBand[FmIdx].MemSmeter[TempPresetNum]=GetSMeter();
}
else
{
Radio.AMBand[AmIdx].MemFreq[TempPresetNum]=Radio.Freq;
Radio.AMBand[AmIdx].MemSmeter[TempPresetNum]=GetSMeter();
}
if(RDS.F_AFEnable)
{
if(FreqInFM(Radio.Freq))
{
if(RDS.AFNum>1)
{
Radio.FMBand[FmIdx].PI[TempPresetNum]=RDS.PI;
if(RDS.AFNum>8)
Radio.FMBand[FmIdx].MemAFNum[TempPresetNum]=8;
else
Radio.FMBand[FmIdx].MemAFNum[TempPresetNum]=RDS.AFNum;
for(j=0;j<8;j++)
Radio.FMBand[FmIdx].MemAFList[TempPresetNum][j]=RDS.AF[j];
}
else
{
Radio.FMBand[FmIdx].PI[TempPresetNum]=0;
Radio.FMBand[FmIdx].MemAFNum[TempPresetNum]=0;
}
}
}
TempPresetNum++;
}
else
{
TempPresetSMMin=0xFF;
if(FreqInFM(Radio.Freq))
{
for(i=0;i<6;i++)
{
if(TempPresetSMMin>Radio.FMBand[FmIdx].MemSmeter[i])
{
TempPresetSMMin=Radio.FMBand[FmIdx].MemSmeter[i];
TempPresetSMMinNum=i;
}
}
}
else
{
for(i=0;i<6;i++)
{
if(TempPresetSMMin>Radio.AMBand[AmIdx].MemSmeter[i])
{
TempPresetSMMin=Radio.AMBand[AmIdx].MemSmeter[i];
TempPresetSMMinNum=i;
}
}
}
if(GetSMeter()>TempPresetSMMin)
{
for(i=TempPresetSMMinNum;i<5;i++)
{
if(FreqInFM(Radio.Freq))
{
Radio.FMBand[FmIdx].MemFreq[i]=Radio.FMBand[FmIdx].MemFreq[i+1];
Radio.FMBand[FmIdx].MemSmeter[i]=Radio.FMBand[FmIdx].MemSmeter[i+1];
}
else
{
Radio.AMBand[AmIdx].MemFreq[i]=Radio.AMBand[AmIdx].MemFreq[i+1];
Radio.AMBand[AmIdx].MemSmeter[i]=Radio.AMBand[AmIdx].MemSmeter[i+1];
}
if(RDS.F_AFEnable)
{
if(FreqInFM(Radio.Freq))
{
Radio.FMBand[FmIdx].PI[i]=Radio.FMBand[FmIdx].PI[i+1];
Radio.FMBand[FmIdx].MemAFNum[i]=Radio.FMBand[FmIdx].MemAFNum[i+1];
for(j=0;j<8;j++)
Radio.FMBand[FmIdx].MemAFList[i][j]=Radio.FMBand[FmIdx].MemAFList[i+1][j];
}
}
}
if(FreqInFM(Radio.Freq))
{
Radio.FMBand[FmIdx].MemFreq[5]=Radio.Freq;
Radio.FMBand[FmIdx].MemSmeter[5]=GetSMeter();
}
else
{
Radio.AMBand[AmIdx].MemFreq[5]=Radio.Freq;
Radio.AMBand[AmIdx].MemSmeter[5]=GetSMeter();
}
if(RDS.F_AFEnable)
{
if(FreqInFM(Radio.Freq))
{
if(RDS.AFNum>1)
{
Radio.FMBand[FmIdx].PI[5]=RDS.PI;
if(RDS.AFNum>8)
Radio.FMBand[FmIdx].MemAFNum[5]=8;
else
Radio.FMBand[FmIdx].MemAFNum[5]=RDS.AFNum;
for(j=0;j<8;j++)
Radio.FMBand[FmIdx].MemAFList[5][j]=RDS.AF[j];
}
else
{
Radio.FMBand[FmIdx].PI[5]=0;
Radio.FMBand[FmIdx].MemAFNum[5]=0;
}
}
}
}
}
}
/*********************************************
Function: RadioTunerSend
Description:
Write/Modify: Perry.Liang
Time: 2006-1-24- 15:38:11
*********************************************/
void RadioTunerSend(unsigned char start, unsigned char end)
{
unsigned char i;
I2CStart ();
I2COut8Bit(0xC4);
if(start==end)
I2COut8Bit(start);
else
{
#if TDA7540_TUNER
if(!Radio.F_TDA7541)
{
I2COut8Bit(start+0x40);
}
#endif
#if TDA7541_TUNER//Page mode bit change: Yete June-22-2007
if(Radio.F_TDA7541)
{
I2COut8Bit(start+0x20);
}
#endif
}
for (i=start;i<=end; i++)
I2COut8Bit(Radio.TunerBuff[i]);
I2CStop();
}
/*********************************************
Function: RadioTunerRead
Description:
Write/Modify: Perry.Liang
Time: 2006-1-24- 15:38:10
*********************************************/
void RadioTunerRead(void)
{
I2CStart ();
I2COut8Bit(0xC5);
Radio.ReadBuff.byte=I2CIn8Bit();
I2CNAck();
I2CStop();
}
/*********************************************
Function: Radio_PLL_FMISet
Description:
Write/Modify: Yete
Time: 2006-06-02
*********************************************/
unsigned char Radio_PLL_FMISet(unsigned int FMfreq)
{
#if TDA7540_TUNER
if(!Radio.F_TDA7541)
{
if(FreqInOirtFM(FMfreq))//ORIT
{
if (FMfreq < FM67_0MHZ)
{
return (PLL_HICURRENT_2_5mA);
}
if (FMfreq < FM71_0MHZ)
{
return (PLL_HICURRENT_3MA);
}
return (PLL_HICURRENT_3_5mA);
}
else if(FreqInJapanFM(FMfreq))//Japan
{
if (FMfreq < FM80_0MHZ)
{
return (PLL_HICURRENT_1_5mA);
}
if (FMfreq < FM85_0MHZ)
{
return (PLL_HICURRENT_2MA);
}
return (PLL_HICURRENT_3MA);
}
if(FreqInWBFM(FMfreq))//Weather band
{
return (PLL_HICURRENT_0_5mA);
}
else//Normal FM
{
if (FMfreq < FM94_5MHZ)
{
return (PLL_HICURRENT_1_5mA);
}
if (FMfreq < FM98_6MHZ)
{
return (PLL_HICURRENT_2_5mA);
}
if (FMfreq < FM106_9MHZ)
{
return (PLL_HICURRENT_3MA);
}
return (PLL_HICURRENT_3_5mA);
}
}
#endif
#if TDA7541_TUNER
if(Radio.F_TDA7541)
{
if(FreqInOirtFM(FMfreq))//ORIT
{
if (FMfreq < FM67_0MHZ)
{
return (TDA7541_PLL_HICURRENT_2_5mA);
}
if (FMfreq < FM71_0MHZ)
{
return (TDA7541_PLL_HICURRENT_3MA);
}
return (TDA7541_PLL_HICURRENT_3_5mA);
}
else if(FreqInJapanFM(FMfreq))//Japan
{
if (FMfreq < FM80_0MHZ)
{
return (TDA7541_PLL_HICURRENT_1_5mA);
}
if (FMfreq < FM85_0MHZ)
{
return (TDA7541_PLL_HICURRENT_2MA);
}
return (TDA7541_PLL_HICURRENT_3MA);
}
if(FreqInWBFM(FMfreq))//Weather band
{
return (TDA7541_PLL_HICURRENT_0_5mA);
}
else//Normal FM
{
if (FMfreq < FM94_5MHZ)
{
return (TDA7541_PLL_HICURRENT_1_5mA);
}
if (FMfreq < FM98_6MHZ)
{
return (TDA7541_PLL_HICURRENT_2_5mA);
}
if (FMfreq < FM106_9MHZ)
{
return (TDA7541_PLL_HICURRENT_3MA);
}
return (TDA7541_PLL_HICURRENT_3_5mA);
}
}
#endif
}
/*********************************************
Function: Radio_PLL_AMISet
Description:
Write/Modify: Yete
Time: 2006-06-02
*********************************************/
unsigned char Radio_PLL_AMISet(unsigned int AMfreq)
{
#if TDA7540_TUNER
if(!Radio.F_TDA7541)
{
if (AMfreq < AM530KHZ)//LW
{
return (PLL_HICURRENT_2MA);
}
if (AMfreq < AM999KHZ)//MW
{
return (PLL_HICURRENT_2_5mA);
}
if (AMfreq < AM1404KHZ)
{
return (PLL_HICURRENT_3MA);
}
return (PLL_HICURRENT_3_5mA);
}
#endif
#if TDA7541_TUNER
if(Radio.F_TDA7541)
{
if (AMfreq < AM530KHZ)//LW
{
return (TDA7541_PLL_HICURRENT_2MA);
}
if (AMfreq < AM999KHZ)//MW
{
return (TDA7541_PLL_HICURRENT_2_5mA);
}
if (AMfreq < AM1404KHZ)
{
return (TDA7541_PLL_HICURRENT_3MA);
}
return (TDA7541_PLL_HICURRENT_3_5mA);
}
#endif
}
/*********************************************
Function: Radio10msTimer
Description:
Write/Modify: Perry.Liang
Time: 2006-1-24- 15:38:09
*********************************************/
void Radio10msTimer(void)
{
if(RadioWaitTimer>0)RadioWaitTimer--;
if(RadioWorkTimer10ms>0)RadioWorkTimer10ms--;
}
/*********************************************
Function: Radio100msTimer
Description:
Write/Modify: Perry.Liang
Time: 2006-1-24- 15:38:08
*********************************************/
void Radio100msTimer(void)
{
if(RadioWorkTimer>0)RadioWorkTimer--;
if(AFTAShowTimer>1)AFTAShowTimer--;
if(SeekKeyTimer>0)SeekKeyTimer--;
if(RadioSeekMuteTimer>0)RadioSeekMuteTimer--;
}
#if 0 //def SINO_MOS
void DisplaySeekFreq(unsigned int setfreq)
{
unsigned char str[8]=" ";
unsigned char i;
unsigned char j;
if(FreqInFM(setfreq)){
str[0] = 'F';
str[1] = 'M';
}else if(FreqInAM(setfreq))
{
str[0] = 'A';
str[1] = 'M';
}
str[2] = ' ';
i = setfreq;
j = setfreq%10;
str[6] = '0' + j;
i = i/10;
j = i%10;
str[5] = '0'+j;
i = i/10;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -