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

📄 fm.c

📁 车载SCALER模块源程序
💻 C
字号:

#include "include.h"
#include<stdio.h>
data unsigned long volatile FM_radio_freq;
data unsigned long volatile AM_radio_freq;
bit sstop ;
bit check;
bit   FM_AM_Mode    ; 
bit   Seekup    ;
#define TunerEEP_ADR       0xA0
unsigned  char  volatile Tun_Buff[40];
/* = 
   {
    0x91,0x8c,0x07,0x00,0x48,0x17,0x6f,0x00,
    0x60,0xc8,0x20,0x05,0xf8,0xf9,0x25,0x4f,
    0x00,0x81,0xe0,0xaf,0x8d,0xcf,0x00,0x00,
    0xe7,0x1c,0x20,0xeb,0xe5,0x4b,0x81,0xfd,
    0x04,0x00,0x00,0x00,0x00,0x00,0xfe,0xfe
    };
*/
//*********************************************************************
/*
void WriteTunerRegister(unsigned char start,unsigned char end)
    {
	   unsigned char i;
       IIC_Start();
	   IIC_Tx(TUNER_ADR);
	   if (start == end)
	      IIC_Tx(start);
	   else 
	      IIC_Tx(start+AUTO_INC);
	   for(i=start;i<=end;i++)
	       IIC_Tx(Tun_Buff[i]);
	   IIC_Stop();
	}
	*/
//**********************************************************************

void ReadTunerEEPROM(unsigned char start,unsigned char end,unsigned char *p)
    {
	unsigned char i;
	IIC_Start();
	IIC_Tx(TunerEEP_ADR);
	IIC_Tx(start);
	IIC_Start();
	IIC_Tx(TunerEEP_ADR | 0x01);
	for(i=start;i<=end;i++,p++)
	  {
	    
		 if(i == end)
		    *p=IIC_Rx(NACK);
		 else
		    *p=IIC_Rx(ACK);
	  }
	 IIC_Stop();
	}
//*****************************************************************************
/*
void WriteTunerEEPROM(unsigned char start, unsigned char end, unsigned char *p)
   {
     unsigned char i;
	 IIC_Start();
	 IIC_Tx(TunerEEP_ADR);
	 IIC_Tx(Start);
	 for(i=Start;i<=end;i++,p++)
	    {
		   IIC_Tx(*p);
		}
	 IIC_Stop();
   }
*/



/**************************************************************
Routine :  WriteTunerRegister 
Input   : 
Output  :
Description 
        - Write into the tuner register
**************************************************************/

void Delay(time)
   {
    unsigned char i ;
    for (i=time;i>0;i--)
	{};
   }

void WriteTunerRegister(unsigned char start, unsigned char end)
{
      unsigned char i;
  	IIC_Start ();
  	IIC_Tx(TUNER_ADR);
  	if(start==end)
		IIC_Tx(start);
	else
		IIC_Tx(start+AUTO_INC);
	for (i=start;i<=end; i++)
		IIC_Tx(Tun_Buff[i]);
	IIC_Stop();

}
/****************************************************************
Routine :  TunerRegisterRefresh 
Input   : 
Output  :
Description 
        - Refresh the tuner register
****************************************************************/
void TunerRegister_Init(void)
{
/*
	if (radio_band < MW1)
	{
		radio_tun_vcoplldiv &= 0xBF;		// select FM mode			
	}
	else
	{
		radio_tun_vcoplldiv |= 0x40;        // select AM mode
	}
*/
    ReadTunerEEPROM(10,49,&Tun_Buff[0]);
//    Delay(1000);
	WriteTunerRegister(0,31);
//	Delay(1000);
	WriteTunerRegister(32,39);
}

void  Radio_PLL_FMISet(void)
  {
     data unsigned int buffer;
	 buffer = ( unsigned int )(FM_radio_freq/100);
	 if(buffer >= 1069)
	    Tun_Buff[0] = 0x4c; 
	 if(( buffer >= 986 )&&(buffer < 1069))
	    Tun_Buff[0] = 0x49;
	 if((buffer >= 945)&&( buffer < 986 ))
	    Tun_Buff[0] = 0x46;
	 if(buffer < 945)
        Tun_Buff[0] = 0x43;
     if( buffer > 1061 )
	    Tun_Buff[4] = 0x06;
     if ((buffer > 1031)&& ( buffer <= 1061 ))
	    Tun_Buff[4] = 0x04;
	 if((buffer > 998)&& ( buffer <= 1031 ))
	    Tun_Buff[4] = 0x02;
     if((buffer > 962)&&(buffer <= 998))
	    Tun_Buff[4] = 0x00;
     if((buffer > 927)&&(buffer <= 962))
	   Tun_Buff[4] = 0x82;
	 if((buffer > 901)&&(buffer <= 927))
	   Tun_Buff[4] = 0x84;
	 if(buffer <= 901)
	   Tun_Buff[4] = 0x86;   
  }
void  Radio_PLL_AMISet(void)
 { 
  unsigned char  buffer;
 
 if(AM_radio_freq < 675)
	 buffer = 0x04;
 if((AM_radio_freq >= 675)&& (AM_radio_freq < 810)) 
	 buffer = 0x05;
 if((AM_radio_freq >= 810)&& (AM_radio_freq < 963)) 
	 buffer = 0x06;
 if((AM_radio_freq >= 963)&& (AM_radio_freq < 1107)) 
	 buffer = 0x07;
 if((AM_radio_freq >= 1107)&& (AM_radio_freq < 1248)) 
	 buffer = 0x08;
 if((AM_radio_freq >= 1248)&& (AM_radio_freq < 1389)) 
	 buffer = 0x09;
if((AM_radio_freq >= 1389)&& (AM_radio_freq < 1538)) 
	 buffer = 0x0a;
if(AM_radio_freq >= 1538)
	 buffer = 0x0b;
 Tun_Buff[0] |= buffer ;
  }

bit stable_check(void)
 {
    data unsigned int i ,j;
	j = 0;
	for( i=0;i<2000;i++)
	   {
	   if (StopIn() == 1)
 	      j++;
		 // Delay(500);
	   }
	if (j>200)
	  return (1);
	else return (0);


 }
void  Radio_FreqToPC(void)
 {
  volatile unsigned long freqbuffer ;
  if(FM_AM_Mode == 1)   
    {
	freqbuffer = ( FM_radio_freq + 10700 ) /50 -32;
//	Radio_PLL_FMISet();
	}
  else
    {

    freqbuffer = ( AM_radio_freq + 10700 ) -32;
	}
	Tun_Buff[1] = (unsigned char)(freqbuffer);
	Tun_Buff[2] = (unsigned char)(freqbuffer >> 8);

    WriteTunerRegister(TUNVOLT_AREA);
    WriteTunerRegister(PLL_AREA);
    Tun_Buff[5] = ( Tun_Buff[5]&0x7f );
    WriteTunerRegister(IF_SAMPLE_AREA);

 }

 void  Radio_AMToPC(void)
 {
    volatile unsigned int ambuffer ;
    ambuffer = ( AM_radio_freq + 10700 ) -32;
	
	Tun_Buff[1] = (unsigned char)(ambuffer);
	Tun_Buff[2] = (unsigned char)(ambuffer >> 8);

    //WriteTunerRegister(TUNVOLT_AREA);
    WriteTunerRegister(PLL_AREA);
   // Tun_Buff[5] = ( Tun_Buff[5]&0x7f );
   // WriteTunerRegister(IF_SAMPLE_AREA);

 }

    
void Radio_main(void)
 {
   /***********************************
   if( (Radiopwron=1)&&(first_turn=1))
       {
         void TunerRegister_Init();
		 first_turn=0;
	    }
   **********************************/
  
     data unsigned counter;
	if (FM_AM_Mode)
	  {  
	     TunerRegister_Init();
		 for(counter=0;counter<=1000;counter++)
           {
              if(FM_radio_freq > 108000)   FM_radio_freq = 87500; //FM 87.5MHz-108MHz
			  if(FM_radio_freq < 87500)    FM_radio_freq = 108000; //FM 87.5MHz-108MHz
	          if (Seekup==1)
		         {
                  FM_radio_freq += 100;
			     }
		      else
		         {
				 FM_radio_freq -= 100;
			     }
			 
			 Radio_PLL_FMISet();
			 Radio_FreqToPC();
             check = stable_check();
			 if (check == 1)
			 break;
            }

	  }
	 else
	  {
    // TunerRegister_Init();
        ReadTunerEEPROM(10,49,&Tun_Buff[0]);
 /************************************   
	    Tun_Buff[0]   = 0xd0;
        Tun_Buff[5]  &= 0x48;
        Tun_Buff[5]  |= 0xaa;
        Tun_Buff[6]   = 0x81;
	//	Tun_Buff[7]  &= 0xf3;
        Tun_Buff[7]   = 0x21;
        Tun_Buff[14]  = 0xf5;
        Tun_Buff[23]  = 0x58;
 ************************************/

        Tun_Buff[0]   = 0xd0;
        Tun_Buff[5]   = 0x2a;
        Tun_Buff[6]   = 0x01;
        Tun_Buff[7]   = 0x21;
        Tun_Buff[14]  = 0xf5;
        Tun_Buff[18]  = 0xf8;
        Tun_Buff[23]  = 0x58;
/**************************************
        Tun_Buff[5]   &= 0xc7;
        Tun_Buff[5]   |= 0x28;
        Tun_Buff[6]   &= 0xe0;
        Tun_Buff[6]   |= 0x01;
        Tun_Buff[7]   &= 0xf3;
        Tun_Buff[14]  &= 0x04;
 	    Tun_Buff[14]  |= 0xf1;
******************************************/

        WriteTunerRegister(0,31);
    	WriteTunerRegister(32,39);

	
   //**********************************************************
   //*********************************************************
		for(counter=0;counter<=200;counter++)
		   {
		     if((AM_radio_freq > 1629)||(AM_radio_freq < 540))
			     AM_radio_freq = 540;			 			     
		     if(Seekup==1)
			   {
                 AM_radio_freq += 9;
			   }
			 else
			     AM_radio_freq -= 9;
		     LED_GrnOn();
		     Delay(1000);
			 Radio_PLL_AMISet();
			 Radio_AMToPC();

			 Tun_Buff[7]   = 0x20;
        
			 Tun_Buff[23]   = 0x68;
			 WriteTunerRegister(7,7);
			
             WriteTunerRegister(23,23);

			 //Tun_Buff[5] = ( Tun_Buff[5]&0x7f );
           //  WriteTunerRegister(IF_SAMPLE_AREA);
             check = stable_check();
			 if (check == 1)
			 break;

           }
      
	  }
    
   }
   

⌨️ 快捷键说明

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