📄 复件 bu2624.c
字号:
//Use SANYO LC72130 PLL Frequency Synthesizer //dzh 2001/03/23
#define BU2624
#ifdef BU2624
#include "sysdefs.h"
#include "..\..\..\playcore\timing\timing.h"
#include "..\..\..\cpu\fr101\MB91101.H"
//#include "uicc_def.h"
#include "..\..\kernel\ker_api.h"
#include "..\..\playcore\coremain\coregdef.h"
#include "..\..\playcore\playmode\playmode.h"
#include "..\..\playcore\ps\ps.h"
#include "bu2624.h"
#include "bu2624_io.h"
#include "uicc_def.h"
#include "..\cs4360\cs4360.h"
unsigned char radio_station_is_saved;
unsigned char memory_key_pressed;
unsigned char radio_station_changed;
unsigned char volume_mode_wait_time;
unsigned char search_dir;
unsigned char number_key_pressed;
unsigned char radio_menu_id = 0;
extern void DEC_EX_mute(BYTE mute);
extern NV_SETTINGS *gps;
extern unsigned char g_ui_tmp_msg_cnt;
extern unsigned char volume_key_pressed;
extern unsigned char bass_key_pressed;
extern unsigned char treble_key_pressed;
extern unsigned char Mchvolume;
#ifdef TTY
extern BOOL key_is_pressed;
#endif
#define AM_BAND 1
static unsigned int dataout[2];
static unsigned int In_Pdata;
static unsigned int In_Cdata;
unsigned int radio_count;
unsigned char radio_is_muted;
//unsigned int FMreq_DIVIDER;
unsigned int AMreq_STEP;
unsigned int FMreq_STEP;
unsigned int AMfreq;
unsigned int FMfreq;
unsigned int AMreq_MIN;
unsigned int AMreq_MAX;
unsigned int FMreq_MIN;
unsigned int FMreq_MAX;
unsigned int Rfreq;
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_search_all_station;
unsigned char is_stereo;
unsigned char station_no;
unsigned char ok_count;
unsigned char unok_count;
//#define FM_SHIFT 1
DWORD Ifcount;
const RADIO_STANDARD radio_country[6]=
{{8750,10800,5,522,1611,9},
{8750,10800,5,522,1611,9},
{8750,10800,5,522,1611,9},
{8750,10800,10,522,1611,9},
{8750,10800,10,520,1710,10},
{7600,9000,5,522,1629,9}
};
extern unsigned char radio_station_changed;
unsigned char station_num;
//void ps_restore_amfm();
//void ps_restore_station();
//void use_addr_as_io(void);
void switch_fmam(unsigned char am_flag);
#ifdef TTY
extern void wait_key_pressed(void);
#endif
void init_radio(void) //default MONO out
{
//AMreq_DIVIDER = radio_country[gps->radio_standard]->AM_step;
//FMreq_DIVIDER = radio_country[gps->radio_standard]->FM_step;
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;
if(gps->ps_amfm_flag)
AMfreq = gps->ps_am_station[gps->ps_am_no];
else
FMfreq = gps->ps_fm_station[gps->ps_fm_no];
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_stereo = 1;
//FMfreq = 10690;
//gps->ps_amfm_flag = 0;
// wait_key_pressed();
switch_fmam(gps->ps_amfm_flag);
//wait_key_pressed();
//mute_radio(0);
}
void send_word_to_bu2624(unsigned int data1)
{
char i;
//printf("cmd_data=:");
//debug_out_wx(data1);printf("\n");
for( i=0; i<16; i++)
{
radio_clk_lo();
//printf("clk low\n");
//wait_key_pressed();
if( data1 & 0x01)
{
radio_din_hi();
//printf("high level\n");
//wait_key_pressed();
}
else
{
radio_din_lo();
//printf("low level\n");
//wait_key_pressed();
}
delay_us(5);
radio_clk_hi();
//printf("clk_high\n");
// wait_key_pressed();
//RADIO_CLK = 1;
data1 >>= 1;
delay_us(5);
}
}
void send_cmd_to_bu2624(unsigned int para1,unsigned int para2)
{
//RADIO_STB = 0;
//send_byte_to_lc72130(cmd);
//RADIO_STB = 1;
radio_clk_hi();
radio_stb_hi();
//printf("stb hi\n");
// wait_key_pressed(); //sgjm1
delay_us(6);
send_word_to_bu2624(para1);
send_word_to_bu2624(para2);
//RADIO_STB = 0;
radio_stb_lo();
// printf("stb lo\n");
// wait_key_pressed();
}
void mute_radio(unsigned char mute)
{
if(mute)
{
In_Cdata &= (~P1_IF_NOOUT);
radio_is_muted = 1;
DEC_EX_mute(1);
printf("Radio out is mute\n");
}
else
{
In_Cdata |= P1_IF_NOOUT;
In_Cdata &=(~(COUNTER_START|IF_COUNTER_16MS));
radio_is_muted = 0;
DEC_EX_mute(0);
printf("Radio out is unmute\n");
}
send_cmd_to_bu2624(In_Pdata,In_Cdata);
}
void read_data_from_bu2624()
{
unsigned int i,value;
set_dout_in();
radio_stb_lo();
delay_us(5);
dataout[0] = 0;
dataout[1] = 0;
value = 0;
for(i=0;i<16;i++)
{
radio_clk_lo();
delay_us(5 );
if(radio_dout()) value |= 0x8000;
radio_clk_hi();
delay_us(5 );
if(i <15) value >>= 1;
}
dataout[0] = value;
value = 0;
for(i=0;i<8;i++)
{
radio_clk_lo();
delay_us(5 );
if(radio_dout()) value |= 0x0080;
radio_clk_hi();
delay_us(5 );
if(i <7) value >>= 1;
}
dataout[1] = value;
}
void switch_audio_channel(unsigned char stereo_out)
{
if(stereo_out)
{
In_Cdata &= (~P4_MONO);
}
else
{
In_Cdata |= P4_MONO;
}
send_cmd_to_bu2624(In_Pdata,In_Cdata);
}
void switch_fmam(unsigned char am_flag)
{
unsigned char i;
radio_is_muted = 1;
//if(!is_search_all_station)
// station_num = 0;
// printf("Radio out is mute\n");
if(am_flag)
{
if((AMfreq < AMreq_MIN)||(AMfreq > AMreq_MAX))
AMfreq = AMreq_MIN;
/*switch(AMreq_STEP)
{
case 9:
Rfreq = Rfreq_009KHZ;
break;
case 10:
Rfreq = Rfreq_010KHZ;
break;
};*/
In_Cdata = P0_AM | P4_MONO | AMINH |P1_IF_OUT| P3_MUTE | Rfreq_001KHZ | AMIN | IF2 | IF_COUNTER_8MS;
//AM:IF_OUT: MUTE ON : MONO:PLL OPERATION: RESET COUNT
//:PLL :AMIN : PS=1:IF2:8MS: TS
In_Pdata = AMfreq+450;
is_stereo = 0;
}
else
{
if((FMfreq < FMreq_MIN)||(FMfreq > FMreq_MAX))
FMfreq = FMreq_MIN;
/* switch(FMreq_STEP)
{
case 5:
Rfreq = Rfreq_025KHZ;
break;
case 10:
Rfreq = Rfreq_050KHZ;
break;
};*/
In_Cdata = 0;
In_Cdata = P0_FM |P1_IF_OUT|P3_MUTE| Rfreq_005KHZ | FMIN | IF2 | IF_COUNTER_8MS;
//FM:IF_OUT:PLL OPERATE:RESET COUNT:PLL: FMIN:PS=X: 16MS
In_Pdata = ((FMfreq+1070));//<<FM_SHIFT);///FMreq_STEP) ;
if(!is_stereo) In_Cdata |= P4_MONO;
}
send_cmd_to_bu2624(In_Pdata,In_Cdata);
}
void change_freq_value(unsigned char bband,unsigned char bsearchdir)
{
if(bband == AM_BAND)
{
if(bsearchdir)
{
if(AMfreq < AMreq_MAX)
AMfreq +=AMreq_STEP;
else
{
AMfreq = AMreq_MIN;
}
}
else
{
if(AMfreq > AMreq_MIN)
AMfreq -= AMreq_STEP;
else
AMfreq = AMreq_MAX;
}
In_Pdata = AMfreq+450;
}
else
{
if(bsearchdir) //++
{
if(FMfreq <FMreq_MAX)
FMfreq += FMreq_STEP;
else
FMfreq = FMreq_MIN;
}
else
{
if(FMfreq > FMreq_MIN)
FMfreq -= FMreq_STEP;
else
FMfreq = FMreq_MAX;
}
In_Pdata = (FMfreq+1070);//<<FM_SHIFT;///FMreq_STEP;
}
}
void tuner_handsearch(unsigned char bband ,unsigned char bsearchdir)
{
change_freq_value(bband,bsearchdir);
send_cmd_to_bu2624(In_Pdata,In_Cdata);
}
void tuner_autosearch(unsigned char searchdir)
{
char i;
if(search_ok )
{
if(is_autosearching)
{
is_autosearching = 0;
if(gps->ps_amfm_flag)
{
In_Pdata =(AMfreq+450);
}
else
{
In_Pdata = (FMfreq+1070);//<<FM_SHIFT;///FMreq_STEP;
}
In_Cdata &= (~(COUNTER_START | IF_COUNTER_16MS)); //set cte = 0
In_Cdata |= P1_IF_NOOUT;
send_cmd_to_bu2624(In_Pdata,In_Cdata);
radio_is_muted = 0;
//mute_radio(0);
//station_num = 1;
}
return;
}
switch(autosrch_step)
{
case AUTOSRCH_STEP1:
//printf("step 1\n");
switch_fmam(gps->ps_amfm_flag);
autosrch_step ++;
radio_delay200ms = 3;
break;
case AUTOSRCH_STEP2:
//step interval 20ms
if(radio_delay200ms) break;
In_Cdata |= (COUNTER_START|IF_COUNTER_16MS) ; //set cte = 1
send_cmd_to_bu2624(In_Pdata,In_Cdata);
autosrch_step = AUTOSRCH_STEP3;
radio_delay200ms = 10;
delay_us(2100); //2.1ms
break;
case AUTOSRCH_STEP3:
if (radio_dout() && (radio_delay200ms))
{
break;
}
else
{
autosrch_step = AUTOSRCH_STEP4;
}
break;
case AUTOSRCH_STEP4:
//wait_key_pressed();
// read_data_from_bu2624();
read_data_from_bu2624();
#ifdef TTY
printf("frequence=:");debug_out_wx(In_Pdata);printf("\n");
printf("ok_count=:");debug_out_wx(ok_count);printf("\n");
printf("unok_count=:");debug_out_wx(unok_count);printf("\n");
printf("dataout0=:");debug_out_wx(dataout[0]);printf("\n");
printf("dataout1=:");debug_out_wx(dataout[1]);printf("\n");
#endif
Ifcount = ((((DWORD)dataout[1]) <<16) | (DWORD)dataout[0]) & 0x0fffff;
if((dataout[1] & 0x00c0)) //&& !wait_station_200ms)
{
autosrch_step ++;
//autosrch_step = AUTOSRCH_STEP1;
break;
}
else
{
if(gps->ps_amfm_flag)
{
if((Ifcount >7180) && (Ifcount < 7220))
{
ok_count ++;
unok_count = 0;
if(ok_count>1)
{
search_ok = 1;
}
else
{
autosrch_step = AUTOSRCH_STEP1;
};
}
else
{
unok_count++;
if(unok_count>2)
autosrch_step ++;
else
autosrch_step = AUTOSRCH_STEP1;
break;
}
}
else
{
if((Ifcount >0x29da0)&&(Ifcount<0x29dfa))//) && (170700--171700))
{
ok_count ++;
unok_count = 0;
if(ok_count>3)
{
search_ok = 1;
}
else
{
autosrch_step = AUTOSRCH_STEP1;
};
}
else
{
if((Ifcount>0x29d80)&&(Ifcount<0x29e10))
{
unok_count++;
if(unok_count>2)
autosrch_step ++;
else
autosrch_step = AUTOSRCH_STEP1;
break;
}
else
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -