📄 fm.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 + -