📄 bu2624.c
字号:
//Use SANYO LC72130 PLL Frequency Synthesizer //dzh 2001/03/23
#include "..\main.h"
#include "..\bu1923\bu1923.h"
#define BU2624
//#define TEST_IF
#ifdef BU2624
#include <iom163.h>
#include "bu2624.h"
#include "..\io.h"
#pragma data:eeprom
NV_SETTINGS gps;
#pragma data:data
unsigned char search_dir;
extern void MCU_mute(void);
#ifdef SGJM_RDS
extern unsigned char rds_status;
extern unsigned char rds_display_type;
extern unsigned char display_type;
extern unsigned char rds_step,pty_is_searching;
extern RDS_DATA_STRUCT rds_data;
extern unsigned char rds_dis_string[65];
#endif
unsigned char rdelay20ms;
extern unsigned char g_ui_tmp_msg_cnt;
#ifdef TTY
extern BOOL key_is_pressed;
#endif
#define AM_BAND 1
static unsigned int dataout0;
static unsigned char dataout1;
static unsigned int In_Pdata;
static unsigned int In_Cdata;
unsigned int radio_count;
extern unsigned char muted;
unsigned char radio_is_muted;
//unsigned int FMreq_DIVIDER;
#include <eeprom.h>
unsigned char autosrch_step;
unsigned char search_ok;
/*0--search is not ok
1-- search a station
2-- full search end;
*/
//unsigned char radio_delay200ms;
unsigned char is_autosearching;
unsigned char is_stereo;
unsigned char station_no;
unsigned char amfm_flag;
//unsigned char ok_count;
//unsigned char unok_count;
//#define FM_SHIFT 1
unsigned int freq;
//unsigned long Ifcount;//Ifcount1;
void mute_radio(void);
//extern unsigned char radio_station_changed;
//unsigned char station_num;
#define IF_FM 1070
#define IF_AM 450
#define IF_CENTER 160
#define IFM_MIN (IF_FM*160-480+IF_CENTER)
#define IFM_MAX (IF_FM*160+480+IF_CENTER)
#define IAM_MIN (IF_AM*16-64)
#define IAM_MAX (IF_AM*16+64)
//void ps_restore_amfm();
//void ps_restore_station();
//void use_addr_as_io(void);
void switch_fmam(void);
#ifdef TTY
extern void wait_key_pressed(void);
#endif
void soft_delay(void)
{
register unsigned char i;
for(i=0;i<30;i++)
{
}
}
void init_radio(void) //default MONO out
{
//register unsigned char addr;
//set_dout_in();
//radio_stb_lo();
//radio_clk_hi();
//AMreq_STEP = radio_country[gps->ps_radio_standard].AM_step;
//FMreq_STEP = radio_country[gps->ps_radio_standard].FM_step;
//unsigned int *addr;
radio_is_muted = 1;
mute_radio();
delay_ms(100);
amfm_flag=EEPROMread((int)&(gps.ps_amfm_flag));
if(amfm_flag)
{
station_no = EEPROMread((int)&(gps.ps_am_no));
if(station_no>=MAX_AM_STATION)
{
station_no = 0;
EEPROMwrite((int)&(gps.ps_am_no),0);
};
EEPROM_READ((int)&gps.ps_amfre,freq);
//station_no = gps.ps_am_no;
}
else
{
station_no = EEPROMread((int)&(gps.ps_fm_no));
if(station_no>=MAX_FM_STATION)
{
station_no = 0;
EEPROMwrite((int)&(gps.ps_fm_no),0);
};
//*addr = &gps.ps_fm_station[station_no];
EEPROM_READ((int)&gps.ps_fmfre,freq);
}
// AMreq_MIN = radio_country[gps->ps_radio_standard].AM_start;
// AMreq_MAX = radio_country[gps->ps_radio_standard].AM_end;
// FMreq_MIN = radio_country[gps->ps_radio_standard].FM_start;
// FMreq_MAX = radio_country[gps->ps_radio_standard].FM_end;
is_autosearching = 0;
switch_fmam();
delay_ms(100);
radio_is_muted = 0;
mute_radio();
#ifdef SGJM_RDS
rds_init();
pty_is_searching = 0;
#endif
}
void send_word_to_bu2624( unsigned int data1)
{
char i;
for( i=0; i<16; i++)
{
radio_clk_lo();
if( data1 & 0x01)
{
radio_din_hi();
}
else
{
radio_din_lo();
}
soft_delay();
radio_clk_hi();
data1 >>= 1;
soft_delay();
}
}
void send_cmd_to_bu2624(void)
{
radio_clk_hi();
radio_stb_hi();
soft_delay();
send_word_to_bu2624(In_Pdata);
send_word_to_bu2624(In_Cdata);
radio_stb_lo();
}
void mute_radio(void)
{
if(radio_is_muted)
{
Enable_IF_OUT();//In_Cdata = In_Cdata&(~P1_IF_NOOUT);
muted = 1;
MCU_mute();
}
else
{
Disable_IF_OUT();//In_Cdata |= P1_IF_NOOUT;
Enable_SD_OUT();//In_Cdata &=(~(COUNTER_START|IF_COUNTER_16MS));
muted = 0; //
MCU_mute();
}
send_cmd_to_bu2624();
}
void read_data_from_bu2624()
{
register unsigned int value;
register unsigned char i,value1;
//set_dout_in();
radio_stb_lo();
soft_delay();
dataout0 = 0;
dataout1 = 0;
value = 0;
for(i=0;i<16;i++)
{
value >>=1;
radio_clk_lo();
soft_delay();
if(radio_dout()) value |= 0x8000;
radio_clk_hi();
soft_delay();
}
dataout0 = value;
value1 = 0;
for(i=0;i<8;i++)
{
value1 >>=1;
radio_clk_lo();
soft_delay();
if(radio_dout()) value1 |= 0x80;
radio_clk_hi();
soft_delay();
}
dataout1 = value1;
}
void switch_audio_channel(void)
{
if(is_stereo)
{
Set_Stereo();//In_Cdata &= (~P4_MONO);
}
else
{
Set_Mono();//In_Cdata |= P4_MONO;
}
send_cmd_to_bu2624();
}
void switch_fmam(void)
{
//unsigned char i;
radio_is_muted = 1;
if(amfm_flag)
{
if((freq < AMreq_MIN)||(freq > AMreq_MAX))
freq = AMreq_MIN;
/* switch(AMreq_STEP)
{
case 9:
Rfreq = Rfreq_009KHZ;
break;
case 10:
Rfreq = Rfreq_010KHZ;
break;
};*/
In_Cdata = P0_AM | P4_MONO | P3_MUTE | Rfreq_009KHZ| AMIN | IF2 | IF_COUNTER_8MS;
//AM:IF_OUT: MUTE ON : MONO:PLL OPERATION: RESET COUNT
//:PLL :AMIN : PS=1:IF2:8MS: TS
In_Pdata = ((freq+IF_AM)/AMreq_STEP)<<4;
//is_stereo = 0;
}
else
{
if((freq < FMreq_MIN)||(freq > FMreq_MAX))
freq = FMreq_MIN;
//In_Cdata = 0;
In_Cdata =(unsigned int) (P0_FM |P3_MUTE| Rfreq_025KHZ | FMIN | IF2 | IF_COUNTER_8MS);
//FM:IF_OUT:PLL OPERATE:RESET COUNT:PLL: FMIN:PS=X: 16MS
In_Pdata = ((freq+IF_FM)/5);
if(!is_stereo || is_autosearching) In_Cdata |= P4_MONO;
}
send_cmd_to_bu2624();
#ifdef SGJM_RDS
rds_init();
//rds_data.syc_flag = 0;
//rds_status = 0;
//rds_step = SEARCH_SYC_STEP;
#endif
}
void change_freq_value(void)
{
if(amfm_flag)
{
if(search_dir)
{
if(freq < AMreq_MAX)
freq +=AMreq_STEP;
else
{
freq = AMreq_MIN;
}
}
else
{
if(freq > AMreq_MIN)
freq -= AMreq_STEP;
else
freq = AMreq_MAX;
}
In_Pdata = ((freq+IF_AM)/AMreq_STEP)<<4;
}
else
{
if(search_dir) //++
{
if(freq <FMreq_MAX)
freq += FMreq_STEP;
else
freq = FMreq_MIN;
}
else
{
if(freq > FMreq_MIN)
freq -= FMreq_STEP;
else
freq = FMreq_MAX;
}
In_Pdata = (freq+IF_FM)/5;
}
}
void tuner_handsearch()
{
radio_is_muted = 1;
mute_radio();
is_autosearching = 0;
change_freq_value();
send_cmd_to_bu2624();
#ifdef SGJM_RDS
rds_init();
display_type = DIS_FREQUENCY;
g_ui_tmp_msg_cnt = 10;
#endif
delay_ms(100);
radio_is_muted =0;
mute_radio();
}
void tuner_autosearch(void)
{
//char i;
unsigned long Ifcount;
if(search_ok )
{
if(is_autosearching)
{
is_autosearching = 0;
save_fre();
/*if(amfm_flag)
{
In_Pdata =((freq+IF_AM)/AMreq_STEP)<<4;
}
else
{
In_Pdata = (freq+IF_FM)/5;
}*/
Enable_SD_OUT();// In_Cdata &= (~(COUNTER_START | IF_COUNTER_16MS)); //set cte = 0
Disable_IF_OUT();//In_Cdata |= P1_IF_NOOUT;
send_cmd_to_bu2624();
radio_is_muted = 0;
if(!amfm_flag)
switch_audio_channel();
delay_ms(100);
mute_radio();
//station_num = 1;
#ifdef SGJM_RDS
rds_init();
//rds_status = 0;
//rds_data.syc_flag = 0;
//rds_step = SEARCH_SYC_STEP;
g_ui_tmp_msg_cnt = 10;
// if(pty_is_searching==2)
// pty_search_delay = 67;
#endif
}
return;
}
rdelay20ms--;
switch(autosrch_step)
{
case AUTOSRCH_STEP1:
//printf("step 1\n");
switch_fmam();
autosrch_step ++;
rdelay20ms = 2;
//if(!ok_count) radio_delay200ms =2;
break;
case AUTOSRCH_STEP2:
//step interval 20ms
if(rdelay20ms) break;
In_Cdata |= (COUNTER_START|IF_COUNTER_16MS) ; //set cte = 1
send_cmd_to_bu2624();
autosrch_step = AUTOSRCH_STEP3;
rdelay20ms = 10;
break;
case AUTOSRCH_STEP3:
if (radio_dout()&& rdelay20ms)
{
break;
}
else
{
autosrch_step = AUTOSRCH_STEP4;
}
break;
case AUTOSRCH_STEP4:
read_data_from_bu2624();
Ifcount = ((((unsigned long)dataout1) <<16) | (unsigned long)dataout0) & 0x0fffff;
if((dataout1 & 0xc0)) //&& !wait_station_200ms)
{
autosrch_step = AUTOSRCH_STEP5;
//break;
}
else
{
if(amfm_flag)
{
if((Ifcount >= IAM_MIN) && (Ifcount <=IAM_MAX))
{
search_ok = 1;
#ifdef SGJM_RDS
rds_status = 0;
pty_search_delay = 67;
#endif
}
else
{
#ifdef TEST_IF
is_autosearching = 0;
#else
autosrch_step = AUTOSRCH_STEP5;
#endif
//break;
}
}
else
{
if((Ifcount >= IFM_MIN)&&(Ifcount <= IFM_MAX))//) && (170700--171700))
{
search_ok = 1;
#ifdef SGJM_RDS
rds_status = 0;
pty_search_delay = 67;
#endif
}
else
{
#ifdef TEST_IF
is_autosearching = 0;
#else
autosrch_step=AUTOSRCH_STEP5;
#endif
};
}
}
break;
case AUTOSRCH_STEP5:
radio_is_muted = 1;
mute_radio();
change_freq_value();
autosrch_step = AUTOSRCH_STEP1;
break;
} //switch
}
#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -