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

📄 复件 bu2624.c

📁 sunplus spca514 cdmp3 源码
💻 C
📖 第 1 页 / 共 2 页
字号:
//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 + -