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

📄 fm.c.bak

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

#include "include.h"
#include<stdio.h>
data unsigned long  FM_radio_freq;
data unsigned long  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_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);
    ReadTunerEEPROM(21,20,&Tun_Buff[0]);
	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 >= 986 )
        {
		  if(buffer >= 1069)
		   {
            Tun_Buff[0] = 0x4c;
		//	WriteTunerRegister(CPUMP_AREA);
			}
		  else
		    {
             Tun_Buff[0] = 0x49;
		//	 WriteTunerRegister(CPUMP_AREA);
             }
		 }
	   else
	     {
		    if(buffer >= 945)
			  {
               Tun_Buff[0] = 0x46;
		//	   WriteTunerRegister(CPUMP_AREA);
			   }
			 else 
			   {
		//	   Tun_Buff[0] = 0x43;
               WriteTunerRegister(CPUMP_AREA);
			   }
		 }
	   if (buffer > 998)
	      {
		  if( buffer > 1061 )
		     {
              Tun_Buff[4] = 0x06;
		//	  WriteTunerRegister(TUNVOLT_AREA);
			  }
		   else if( buffer > 1031 )
		        {
                 Tun_Buff[4] = 0x04;
		//		 WriteTunerRegister(TUNVOLT_AREA);
				}
		   else 
		        {
                Tun_Buff[4] = 0x02;
		//		WriteTunerRegister(TUNVOLT_AREA);
                }
           }
		else
		  {
		    if(buffer > 962)
			 {
               Tun_Buff[4] = 0x00;
		//	   WriteTunerRegister(TUNVOLT_AREA);
			 }
			else if(buffer > 927)
			  {
			  Tun_Buff[4] = 0x82;
		//	  WriteTunerRegister(TUNVOLT_AREA);
			  }
			else if (buffer > 901)
			  {
			  Tun_Buff[4] = 0x84;
		//	  WriteTunerRegister(TUNVOLT_AREA);
			  }
			else 
			  {
			  Tun_Buff[4] = 0x86;
		//	  WriteTunerRegister(TUNVOLT_AREA);
			  }
		  }
   
  }
void  Radio_PLL_AMISet(void)
 {
 if( AM_radio_freq > 1098 )
    {
	if (FM_radio_freq > 1386)
	   {
	    if( FM_radio_freq >1530 )
		   {
		     Tun_Buff[0] = 0xdc;
		//	 WriteTunerRegister(CPUMP_AREA);

		   }
		 else
		   {
		     Tun_Buff[0] = 0xdb;
        //	 WriteTunerRegister(CPUMP_AREA);

		   }
	   }
	  else 
	    {
          if (FM_radio_freq > 1242)
		     {
			   Tun_Buff[0] = 0xda;
        //	 WriteTunerRegister(CPUMP_AREA);
			 }
		  else 
		     {
               Tun_Buff[0] = 0xd9;
		//	 WriteTunerRegister(CPUMP_AREA);
			 }
		}
	}
  else 
    {
       if(FM_radio_freq > 801)
	      {
		    if(FM_radio_freq > 954)
			   {
               Tun_Buff[0] = 0xd8;
		//	 WriteTunerRegister(CPUMP_AREA);			    
			   }
			 else
			   {
               Tun_Buff[0] = 0xd7;
		//	 WriteTunerRegister(CPUMP_AREA);
			   }
		  }
		 else 
		    {
			  if(FM_radio_freq > 666)
			    {
               Tun_Buff[0] = 0xd6;
		//	 WriteTunerRegister(CPUMP_AREA);				 
				}
			  else
			    {
              Tun_Buff[0] = 0xd5;
		//	 WriteTunerRegister(CPUMP_AREA);				  
				}

			}
			 
	}
 }
bit stable_check(void)
 {
    data unsigned int i ,j;
	j = 0;
	for( i=0;i<2000;i++)
	   {
	   if (StopIn() == 1)
 	      j++;
		  Delay(100);
	   }
	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);

 }

    
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<=200;counter++)
           {
	          if (Seekup==1)
		         {
                  FM_radio_freq += 100;
			     }
		      else
		         {
				 FM_radio_freq -= 100;
			     }
			 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
			 Radio_PLL_FMISet();
			 Radio_FreqToPC();
             check = stable_check();
			 if (check == 1)
			 break;
            }

	  }
	 else
	  {
        TunerRegister_Init();
        Tun_Buff[5] = 0x2a;
        Tun_Buff[6] = 0x01;
		Tun_Buff[7] = 0x21;
        Tun_Buff[14] = 0xf5;
        Tun_Buff[18] = 0xf8;
        Tun_Buff[23] = 0x58;
		WriteTunerRegister(IF_AREA);
		WriteTunerRegister(7,7);
		WriteTunerRegister(VCO_AREA);
        WriteTunerRegister(SMETER_AREA);
		WriteTunerRegister(SSTOP_AREA);
		for(counter=0;counter<=200;counter++)
		   {
		     if(Seekup==1)
			   {
                 AM_radio_freq += 9;
			   }
			 else
			     AM_radio_freq -= 9;
		   
		     if(AM_radio_freq > 1629)
			     AM_radio_freq = 540;
			 if( AM_radio_freq < 540)
			      AM_radio_freq = 540;
			 Radio_PLL_AMISet();
			 Radio_FreqToPC();
             check = stable_check();
			 if (check == 1)
			 break;

            }
      
	  }
    
   }
   

⌨️ 快捷键说明

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