?? tuner_drv.c
字號:
}
/*
********************************************************************************
* Function name : FmClrSTC()
* Author: Eric Xie
* Description: EDA5800 clear STC.
********************************************************************************
*/
__attribute__((section(".fm_text,\"ax\"")))
void FmClrSTC(void)
{
char writeData8[2];
RDA5800REG_IMG[2]|= TUNER_MUTE;
writeData8[0] = (RDA5800REG_IMG[2] >> 8);
writeData8[1] = (RDA5800REG_IMG[2]);
I2C_WriteFMxReg(writeData8,2);
}
/*
********************************************************************************
* Function name : FmReadABReg()
* Author: Eric Xie
* Description: EDA5800 read 0x0ah,0x0bh.
********************************************************************************
*/
__attribute__((section(".fm_text,\"ax\"")))
void FmReadABReg(void)
{
char readData8[4];
I2C_ReadFMxReg(readData8,4);
RDA5800REG_IMG[10] = readData8[0]*0x100 + readData8[1];
RDA5800REG_IMG[11] = readData8[2]*0x100 + readData8[3];
}
/*
********************************************************************************
* Function name : FmInitReady()
* Author: Eric Xie
* Description: EDA5800 intialize process - write dummy data.
********************************************************************************
*/
__attribute__((section(".fm_text,\"ax\"")))
void FmInitReady(void)
{
char writeData8[2];
writeData8[0] =0x81;
writeData8[1] =0x98;
I2C_ReadFMxReg(writeData8,2);
}
/*
********************************************************************************
* Function name : FmInitPowerOn()
* Author: Eric Xie
* Description: EDA5800 intialize process - power on.
********************************************************************************
*/
__attribute__((section(".fm_text,\"ax\"")))
void FmInitPowerOn(void)
{
int i;
char writeData8[2];
for(i = 0; i < 45; i++)
{
RDA5800REG_IMG[i] = cwFMDefault[i];
}
writeData8[0] =(RDA5800REG_IMG[2] >> 8);
writeData8[1] = (RDA5800REG_IMG[2]);
I2C_WriteFMxReg(writeData8,2);
}
/*
********************************************************************************
* Function name : FmInitData()
* Author: Eric Xie
* Description: EDA5800 intialize process - write init data.
********************************************************************************
*/
__attribute__((section(".fm_text,\"ax\"")))
void FmInitData(char area)
{
int i;
char writeData8[86];
if (area == FM_AREA_JAPAN)
{
RDA5800REG_IMG[3]|=TUNER_BAND;
}
else
{
RDA5800REG_IMG[3]&=(~TUNER_BAND);
}
for(i = 0; i < 43; i++)
{
writeData8[i*2] =(RDA5800REG_IMG[i+2] >> 8);
writeData8[i*2+1] = (RDA5800REG_IMG[i+2]);
}
I2C_WriteFMxReg(writeData8,86);
}
/*
********************************************************************************
* Function name : FmInitClrSTC()
* Author: Eric Xie
* Description: EDA5800 intialize process - clear STC.
********************************************************************************
*/
__attribute__((section(".fm_text,\"ax\"")))
void FmInitClrSTC(void)
{
char writeData8[2];
RDA5800REG_IMG[2]&=(~TUNER_LAB); //clear LAB_MODE bit
writeData8[0] = (RDA5800REG_IMG[2] >> 8);
writeData8[1] = (RDA5800REG_IMG[2]);
I2C_WriteFMxReg(writeData8,2);
}
/*
********************************************************************************
* Function name : Tuner_MuteControl()
* Author: Eric Xie
* Description: EDA5800 control mute enable/disable.
********************************************************************************
*/
__attribute__((section(".fm_text,\"ax\"")))
void Tuner_MuteControl(bool active)
{
char writeData8[2];
if(active)
{
RDA5800REG_IMG[2]&=(~TUNER_MUTE);
}
else
{
RDA5800REG_IMG[2]|=TUNER_MUTE;
}
writeData8[0]=(RDA5800REG_IMG[2] >> 8);
writeData8[1]=(RDA5800REG_IMG[2]);
I2C_WriteFMxReg(writeData8,2);
}
/*
********************************************************************************
* Function name : Tuner_PowerDown()
* Author: Eric Xie
* Description: EDA5800 disable chip.
********************************************************************************
*/
__attribute__((section(".fm_text,\"ax\"")))
void Tuner_PowerDown(void)
{
char writeData8[2];
RDA5800REG_IMG[2] &= (~TUNER_ENABLE);
writeData8[0] = (RDA5800REG_IMG[2] >> 8);
writeData8[1] = (RDA5800REG_IMG[2]);
I2C_WriteFMxReg(writeData8,2);
}
/*
********************************************************************************
* Function name : Tuner_FreqSet()
* Author: Eric Xie
* Description: EDA5800 set frequency.
********************************************************************************
*/
__attribute__((section(".fm_text,\"ax\"")))
void Tuner_FreqSet(unsigned int TunerFrequency)
{
unsigned char writeData8[4];
unsigned long band;
unsigned long frequency;
unsigned int channel;
if (GlobalFmVar.FmArea == FM_AREA_JAPAN)
{
band=7600;
RDA5800REG_IMG[3]|=TUNER_BAND;
}
else
{
band=8750;
RDA5800REG_IMG[3]&=(~TUNER_BAND);
}
channel=(unsigned int)((TunerFrequency-band)/10);
RDA5800REG_IMG[3] = (((channel<<8) & 0xff00) | (RDA5800REG_IMG[3] & 0x00ff));
RDA5800REG_IMG[2]&=(~TUNER_MUTE);
RDA5800REG_IMG[2]&=(~TUNER_SEEK); //stop seek
writeData8[0] = (RDA5800REG_IMG[2] >> 8);
writeData8[1] = (RDA5800REG_IMG[2]);
writeData8[2] = (RDA5800REG_IMG[3] >> 8);
writeData8[3] =(RDA5800REG_IMG[3]);
I2C_WriteFMxReg(writeData8,4);
}
/*
********************************************************************************
* Function name : FmSeek()
* Author: Eric Xie
* Description: EDA5800 seek start.
********************************************************************************
*/
__attribute__((section(".fm_text,\"ax\"")))
char FmSeek(char seekDirection)
{
char readData8[4];
char writeData8[2];
bool fTemp=0;
if(seekDirection == TUN_UP)
{
RDA5800REG_IMG[2]|=TUNER_SUD; // seek up
}
else
{
RDA5800REG_IMG[2]&=(~TUNER_SUD); // seek down
}
RDA5800REG_IMG[2]|=TUNER_SEEK;
RDA5800REG_IMG[2]&=(~TUNER_MUTE);
writeData8[0] =(RDA5800REG_IMG[2]>>8);
writeData8[1] = RDA5800REG_IMG[2];
if (I2C_WriteFMxReg(writeData8,2)==1)
{
return(1);
}
}
/*
********************************************************************************
* Function name : FmSeekClrSTC()
* Author: Eric Xie
* Description: EDA5800 clear STC after seek end.
********************************************************************************
*/
__attribute__((section(".fm_text,\"ax\"")))
void FmSeekClrSTC(void)
{
char writeData8[2];
RDA5800REG_IMG[2]&=(~TUNER_SEEK); //stop seek
writeData8[0] =(RDA5800REG_IMG[2] >> 8);
writeData8[1] = (RDA5800REG_IMG[2]);
I2C_WriteFMxReg(writeData8,2);
}
/*
********************************************************************************
* Function name : FmChanToFreq()
* Author: Eric Xie
* Description: EDA5800 change channel to frequency.
********************************************************************************
*/
__attribute__((section(".fm_text,\"ax\"")))
int FmChanToFreq(char channel)
{
int channelSpacing;
int bottomOfBand;
int frequency;
if ((RDA5800REG_IMG[3] & 0x0002) == 0x0000)
{
bottomOfBand = 875;
}
else
{
bottomOfBand = 760;
}
if ((RDA5800REG_IMG[3] & 0x0001) == 0x0000)
{
channelSpacing = 1;
}
else if ((RDA5800REG_IMG[3] & 0x0001) == 0x0001)
{
channelSpacing = 2;
}
else
{
channelSpacing = 1;
}
frequency = (bottomOfBand + channelSpacing * channel)*10;
return (frequency);
}
/*
********************************************************************************
* Function name : Tuner_FreqChange()
* Author: Eric Xie
* Description: EDA5800 frequency increase/decrease.
********************************************************************************
*/
__attribute__((section(".fm_text,\"ax\"")))
void Tuner_FreqChange(unsigned char updownflag,unsigned int step)
{
if(updownflag == TUN_UP)
{
GlobalFmVar.FmFreq += step;
}
else if(updownflag == TUN_DOWN)
{
GlobalFmVar.FmFreq -= step;
}
if(GlobalFmVar.FmFreq > FmFreqMaxVal)
{
GlobalFmVar.FmFreq = FmFreqMinVal;
}
if(GlobalFmVar.FmFreq < FmFreqMinVal)
{
GlobalFmVar.FmFreq = FmFreqMaxVal;
}
}
/*
********************************************************************************
* Function name : GetStereoStatus()
* Author: Eric Xie
* Description: Get stereo status.
********************************************************************************
*/
__attribute__((section(".fm_text,\"ax\"")))
void GetStereoStatus(void)
{
unsigned char TempBuffer[2];
I2C_ReadFMxReg(TempBuffer,2);
if (TempBuffer[1] & 0x01)
{
FmStereoState = 1;
}
else
{
FmStereoState = 0;
}
//FmDisplayBlock.DisplayFlag.bit.bFmStereo = 1;
}
/*
********************************************************************************
* Function name : GetNextStation()
* Author: Eric Xie
* Description: Get next station.
********************************************************************************
*/
__attribute__((section(".fm_text,\"ax\"")))
void GetNextStation(void)
{
unsigned int i;
for (i = 0; i < FREQMAXNUMBLE; i ++)
{
if (++GlobalFmVar.FmSaveNum >= FREQMAXNUMBLE)
{
GlobalFmVar.FmSaveNum = 0;
}
GlobalFmVar.FmFreq = GlobalFmVar.FmFreqArray[GlobalFmVar.FmSaveNum];
if ((FmFreqMinVal <= GlobalFmVar.FmFreq) && (GlobalFmVar.FmFreq <= FmFreqMaxVal))
{
return;
}
}
GlobalFmVar.FmSaveNum = 0;
GlobalFmVar.FmFreq = FmFreqMinVal;
}
/*
********************************************************************************
* Function name : GetPrevStation()
* Author: Eric Xie
* Description: Get privious station.
********************************************************************************
*/
__attribute__((section(".fm_text,\"ax\"")))
void GetPrevStation(void)
{
unsigned int i;
for (i = 0; i < FREQMAXNUMBLE; i ++)
{
if (GlobalFmVar.FmSaveNum == 0)
{
GlobalFmVar.FmSaveNum = FREQMAXNUMBLE;
}
GlobalFmVar.FmSaveNum --;
GlobalFmVar.FmFreq = GlobalFmVar.FmFreqArray[GlobalFmVar.FmSaveNum];
if ((FmFreqMinVal <= GlobalFmVar.FmFreq) && (GlobalFmVar.FmFreq <= FmFreqMaxVal))
{
return;
}
}
GlobalFmVar.FmSaveNum = 0;
GlobalFmVar.FmFreq = FmFreqMinVal;
}
#endif
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -