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

📄 fm_tea5767.c

📁 智原mp3 SDK 开发包 与巨力 有mp3 wma ogg decoder
💻 C
字号:
#include "api.h"#include "fm_tea5767.h"#include "i2c.h"#define mCombinU16(u16, h1, h0)                 \{                                               \        ((UNION16 *)&(u16))->v8[1] = h0;        \        ((UNION16 *)&(u16))->v8[0] = h1;        \}extern INT8U _buf[64];extern void my_sprintf(char *buf, const char *fmt, ...);INT8U u8FMdata[5];INT16U u16RadioFrequency;code INT8U U8RadioSet[5] = {MUTE_TEA5767_ON,0x00,0x00,STANDBY_ON,0x00};//--------------------------------------------------------------------------static BOOLEAN bRadioSetCommand(INT8U *ptr){		register INT8U i;	vI2C_Start();	if(FALSE == bI2C_ByteOut(TEA5767_ADDR_W))    		return FALSE;	for(i=0;i<5;i++)	{		if(FALSE == bI2C_ByteOut(ptr[i]))      		return FALSE;		}	vI2C_Stop();	return true;}BOOLEAN bRadioInit(void){   	FM_BUSEN = 1;    	u16RadioFrequency = FM_FREQ_MIN;    	return(bRadioSetCommand(U8RadioSet));}//--------------------------------------------------------------------------BOOLEAN bRadioStop(void){  	if(bRadioSetCommand(U8RadioSet)==FALSE)  		return FALSE;  	  	FM_BUSEN = 0;  	  	return TRUE;}//--------------------------------------------------------------------------static BOOLEAN bWrite_Command_To_TEA5767(void){  	return(bRadioSetCommand(u8FMdata));}//--------------------------------------------------------------------------static BOOLEAN bRead_Command_From_TDA5767(void){	register INT8U i;  	vI2C_Start();  	if(FALSE == bI2C_ByteOut(TEA5767_ADDR_R))    		return FALSE;  	for(i=0;i<4;i++)		u8FMdata[i] = u8I2C_ByteIn(0);    	u8FMdata[4] = u8I2C_ByteIn(1);  	vI2C_Stop();      	return TRUE;}//--------------------------------------------------------------------------static INT16U u16FreqToPLL(INT32U u16Freq){        	INT32U u32Freq = u16Freq;	   	return (((u32Freq*10000)-225000)/8192);     //for XTAL_32768K	// 4/32768 = 8192}//--------------------------------------------------------------------------static INT32U u16PLLToFreq(INT16U u16pll){        	INT32U u32pll = u16pll;   	INT16U r;      	r = ((u32pll*8192)+225000)/10000;			// 4/32768 = 8192   	if((r%10) >= 5)      		r = ((r/10)+1) * 10;      	return r;}//--------------------------------------------------------------------------#if 0void vPrintFreq(){   	INT16U freq1 = u16RadioFrequency/FM_FREQ_STEP;  	my_sprintf(_buf, "%d.%d  ", freq1/10, freq1%10);   	if(u8FMdata[2] & 0x80)      		_buf[6] = 'S';      	vLcd_Disp_FMfreq(_buf);  }#endif//-------------------------------------------------------BOOLEAN bSetFmFrequency(INT16U freq){  	INT16U u16PLL;        	u16RadioFrequency = freq;  	u16PLL = u16FreqToPLL(u16RadioFrequency);  	u8FMdata[0] = (INT8U)(u16PLL >> 8);    	u8FMdata[1] = (INT8U)(u16PLL & 0xFF);   	u8FMdata[2] = LOW_SIDE_INJECTION;  	u8FMdata[3] = US_EUROPE_FM_BAND | XTAL_32768K | SOFT_MUTE_ON | STEREO_NOISE_CANCELLING_ON;  	u8FMdata[4] = DTC_75us | PLLREF_ON;  	if(FALSE == bWrite_Command_To_TEA5767())   		return FALSE;   		if(FALSE == bRead_Command_From_TDA5767())   		return FALSE;  	return TRUE;     }void FmFrequencyUp(){   	u16RadioFrequency += FM_FREQ_STEP;   	if(u16RadioFrequency > FM_FREQ_MAX)      		u16RadioFrequency = FM_FREQ_MIN;}void FmFrequencyDown(){  	u16RadioFrequency -= FM_FREQ_STEP;  	if(u16RadioFrequency < FM_FREQ_MIN)      		u16RadioFrequency = FM_FREQ_MAX;}//-------------------------------------------------------BOOLEAN bFmFrequencyUp(void){   	FmFrequencyUp();   	return bSetFmFrequency(u16RadioFrequency);     }//--------------------------------------------------------------------------BOOLEAN bFmFrequencyDown(void){   	FmFrequencyDown();   	return bSetFmFrequency(u16RadioFrequency);}extern BOOLEAN init_volume(void);extern BOOLEAN close_volume(void);extern void delay(UINT16 n);//--------------------------------------------------------------------------BOOLEAN bFmAutoSearch(INT8U u8UpDown){	extern BOOLEAN init_volume(void);	extern BOOLEAN close_volume(void);	extern void delay(UINT16 n);//  	INT16U pll_dec;  	INT16U u16PLL;  	register INT8U ReadFlag=0;  	register INT8U count;	BOOLEAN	bFM_STEREO;	INT8U	u8FM_LEV;	INT8U	u8FM_IF;    	if(SEARCH_UP == u8UpDown)     		FmFrequencyUp();  	else     		FmFrequencyDown();  	u16PLL = u16FreqToPLL(u16RadioFrequency);    	u8FMdata[0] = ((INT8U)(u16PLL >> 8)) | MUTE_TEA5767_ON | SEARCH_MODE_ON;  	u8FMdata[1] = (INT8U)(u16PLL & 0xFF);   	u8FMdata[2] = u8UpDown | LOW_SIDE_INJECTION | SEARCH_STOP_LEVEL_LOW;  	u8FMdata[3] = US_EUROPE_FM_BAND | XTAL_32768K | SOFT_MUTE_ON | STEREO_NOISE_CANCELLING_ON;  	u8FMdata[4] = DTC_75us | PLLREF_ON;    	if(FALSE == bWrite_Command_To_TEA5767())			     		return FALSE;    	count = 0; 	#if 0// marco modify for fm auto search   	while(!ReadFlag)    	{		if(FALSE == bRead_Command_From_TDA5767())     			return FALSE;    		ReadFlag = u8FMdata[0] & 0x80;		if(u16RadioFrequency>FM_FREQ_MAX || u16RadioFrequency<FM_FREQ_MIN)			break;   		mCombinU16(pll_dec,u8FMdata[0]&0x3F, u8FMdata[1]);    		u16RadioFrequency = u16PLLToFreq(pll_dec);  	}		bSetFmFrequency(u16RadioFrequency);  	return TRUE;  	#else	while(count++ < 10)  	{  		delay(5);		if(FALSE == bRead_Command_From_TDA5767())			//return FALSE;			continue;     			//ReadFlag = u8FMdata[0] & 0x80;		//if(ReadFlag)		bFM_STEREO = (u8FMdata[2] >> 7);		u8FM_IF = (u8FMdata[2] & 0x7F);		u8FM_LEV = (u8FMdata[3] >> 4);		if((u8FM_IF>0x31)&&(u8FM_IF<0x3e)&&(u8FM_LEV>=5)&&(bFM_STEREO))		{			init_volume();    			bSetFmFrequency(u16RadioFrequency);			delay(5000);			close_volume();			return TRUE;    	}    	else    		return FALSE;  	}	//	bSetFmFrequency(u16RadioFrequency);  	return FALSE;	#endif	}

⌨️ 快捷键说明

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