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

📄 tuner_drv.c

📁 SI4702
💻 C
📖 第 1 页 / 共 2 页
字号:
}

/*
********************************************************************************
*  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 + -