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

📄 radio_1.c.bak

📁 ROHM 公司BU9432:application:应用范围
💻 BAK
📖 第 1 页 / 共 5 页
字号:
/**************************************************************************/
/*	[NAME]   :radio.c										  	*/
/*	[OUTLINE]:tunner Controller								  	*/
/*	         :DSP BU9541									  	*/
/*	         :CPU BU18703	ROM48KB/RAM2KB/CLK4.2MHz		  	*/
/*			 :TUNER BH1401  FM									*/
/*	[HISTORY]:							  						*/
/*	[NOTE]   :TAB=4											 	*/
/*	         :LSIC_80 v3.60 + PARTNER ET2				  		*/
/**************************************************************************/
//#include <machine.h>  /*  Z80梡   */
#include "BU18703.h"			/*  CPU儗僕僗僞掕媊 */
#include "radio.h"
#include "prototype.h"
#include <string.h>
#include "extern.h"
#include "Mcal.h"

void Tuner_Option(void)
{
	switch(gu08_kind_tuner)
		{
		case 0:
			Tuner_Main();
			break;

		case 1:
			Tuner_TnLCD_Main();
			break;

		case 2:
			Tuner_ManuLCD_Main();
			break;

		case 3:
			Tuner_ManuLED_Main();
			break;
		}
	return;	

}

/*------------------------------------*/	
void Tuner_TnLCD_Main(void)				//toshiba tuner
{
return;
}

/*------------------------------------*/	

//void Tuner_ManuLCD_Main(void)			//manual tuner with AP905
//{

//return;
//}

/*------------------------------------*/	
void Tuner_ManuLED_Main(void)			//manual tuner	
{
	TunerPort_Init(  );
	Common_Wait_ms( 100 );
	CPU_PWM_PIO_DR|=B00000010;				//Tuner power on
							//tuner led on

	gu16_timer_wait=1000/10;
	CPU_PWM_PIO_DR|=B00000001;				//amute off
		
	while ( ( gu08_now_mode == 2 ) && ( gu08_power_df != 0 ) )
	{

		tap1_select();

		Clk_Job();
		Alm1_Job();
		Alm2_Job();
		Sleep_Main();

		Common_Timing(  );
		Common_SoftTimer(  );
		Key_Ctrl(  );
		Que_Cont_ManuTuner();

// 		if(gu08_kind_tuner!=3)
//			{
//			CPU_LCD_SDR1 |= B00000001;								// On "Tuner" icon
//			}

		Clk_Normal_Disp();

		if( gu08_power_df == 0 )
		{
			DrvLCD_ALL_Off(  );
		}
	}

return;
}

void Que_Cont_ManuTuner( void )
{
	if(gu08_kind_VolCtrl==VOL_DIG)UserCtrl_Key_AudioEffect( 0 );

	switch ( gu08_KeyBuffer )
	{

		case KEY_AUX:
			if( gu08_kind_Power )
				break;
		case KEY_AUX_ON:
			if( gu08_now_mode == 3 )
				break;
			Radio_Amute_Sens_On(  );
			gu08_timer_SetVolume = 0;
			gu08_now_mode = 3;
			Stdby_Port_Init(  );
			break;


		case KEY_MP3:
			if( gu08_kind_Power )
				break;
		case KEY_MP3_ON:
			if( gu08_now_mode == 4 )
				break;
			Radio_Amute_Sens_On(  );
			gu08_timer_SetVolume = 0;
			gu08_now_mode = 4;
			Stdby_Port_Init(  );
			break;

		case KEY_FUNC:
			Radio_Amute_Sens_On(  );
			gu08_now_mode=gu08_now_mode-1;
			gu08_power_df=1;
			gu08_mode_disp=0;
			break;


		case KEY_POWER:
		case KEY_POWER_OFF:
			POWER_Off();
			break;

		case KEY_ALM1:	
			UserCtrl_Alm1Set();
			break ;

		case KEY_ALM2:	
			UserCtrl_Alm2Set();
			break ;

		case KEY_ALM1_ON:
			gu08_alm1_df=2;
			gu08_flg_24halm1=1;					//060207
			break;

		case KEY_ALM1_OFF:
			gu08_alm1_df=0;
			break;

		case KEY_ALM1_SET:
	 		gu08_alm1_df=1;
			break;

		case KEY_ALM2_ON:
			gu08_alm2_df=2;
			gu08_flg_24halm2=1;					//060207
			break;

		case KEY_ALM2_OFF:
			gu08_alm2_df=0;
			break;

		case KEY_ALM2_SET:
			gu08_alm2_df=1;
			break;					

		case KEY_SLEEP:
			gu16_timer_SetSleep=3000/10;
			gu08_sts_Sleep=1;
			UserCtrl_SleepSet();			
			break;

		case KEY_STOP:
				Alarm_Stop();
			break;

		case KEY_SNOOZE:
			UserCtrl_Snooze();
			break;

		case KEY_FF:
		case KEY_FF_SEARCH:
						{
						switch(gu08_alm1_df)
							{
							case 0:
							case 2:
								break;
								
							case 1:
								UserCtrl_Alm1HourSet();
								break;
							}
						switch(gu08_alm2_df)
							{
							case 0:
							case 2:
								break;

							case 1:
								UserCtrl_Alm2HourSet();
								break;
							}	
						}				
					break;	

		case KEY_FR:
		case KEY_FR_SEARCH:
			switch(gu08_alm1_df)
				{
				case 0:
				case 2:
					break;
								
				case 1:
					UserCtrl_Alm1MinSet();								
					break;
				}
			switch(gu08_alm2_df)
				{
				case 0:
				case 2:
					break;

				case 1:
					UserCtrl_Alm2MinSet();
					break;
				}	
			break;											

			}
			gu08_KeyBuffer = KEY_EMPTY;
	return;
}


/*------------------------------------*/	
void Tuner_Main( void )						//LA1823
{

	TunerPort_Init(  );
	Common_Wait_ms( 100 );
//	gu16_timer_wait=200;			//051215

	if(gu08_kind_VolCtrl==VOL_DIG)
		{
		Audio_Init(  );
		BD3871_Data1( B01000000 );				//Channel B
		DrvLCD_Equalizer_Init(  );
		}
	
	u08h_tuner_o = DrvKEY_GetkeyNumber( CPU_ADC_ADR1 );
#if EMU
	u08h_tuner_o = 0;
#endif
	Tuner_Init(  );

	gu16_timer_wait=100;
//	u08h_tuner_scc = TU_INIT_WAIT;
	u08h_tuner_scc = TU_SEND_PLL;					//send pll

	gu16_timer_delay=DISP_DELAY_TIME;

	while ( ( gu08_now_mode == 2 ) && ( gu08_power_df != 0 ) )
	{
//		MainClock_Change();

		tap1_select();
		Clk_Job();
		
		if(gu08_flg_dcin==LOW)POWER_Off();			//for backup bat.,060110



//		if(gu08_kind_Display==DISP_LED)DrvLED_ComPort();
		
		Common_Timing(  );
		Common_SoftTimer(  );
		if(gu08_flg_dcin==HIGH)
		{
			Alm1_Job();
			Alm2_Job();
			Sleep_Main();

			Key_Ctrl(  );
			Que_Cont_Radio(  );
 			Tuner_Job(  );

			if((CPU_PIO9&CPU_AMUTE)==0)gu16_timer_delay=DISP_DELAY_TIME;
			DrvLCD_DisplayChange();

//			if(gu08_kind_Display==DISP_LCD)
			if(gu08_kind_tuner!=3)
			{
				CPU_LCD_SDR1 |= B00000001;								// On "Tuner" icon
			}

			if((gu08_mode_disp==0) && (gu08_now_mode==2))
				DrvLCD_TunerMain_Disp();
			 if ((gu08_mode_disp==1)&&(gu08_now_mode==2))
		 	{
				Clk_Normal_Disp();
				Common_Disp();
		 	}		
		}

		if( gu08_power_df == 0 )
		{
			DrvLCD_ALL_Off(  );
		}
	}
	return;
}




/*-----------------------------------------------;
;	AMUTE_DF   :0000 = AMUTE ON
;			   :0001 = AMUTE release
;
;-----------------------------------------------*/
void Radio_Amute_Sens_On( void )
{
	gu08_amute_df = 0;
	CPU_PIO9 &= ~CPU_AMUTE;										// set AMUTE low
//	if( gu08_kind_VolCtrl & B00000001 )						// BD3871		//AD
	if(gu08_kind_VolCtrl==VOL_DIG)			//AP
//	if(gu08_kind_tuner!=3)
	{
			BD3871_Data2( 0xae );								// Max attenuation
	}
	return;
}


void Radio_Amute_Sens_Off( void )
{
	gu08_amute_df = 1;

	if ( gu08_num_Volume == 0 )
	{
		CPU_PIO9 &= ~CPU_AMUTE;									// set AMUTE low
	}
	else
	{
		CPU_PIO9 |= CPU_AMUTE;									// set AMUTE high
//		if( gu08_kind_VolCtrl & B00000001 )						// BD3871		//AD
		if(gu08_kind_VolCtrl==VOL_DIG)			//AP
//		if(gu08_kind_tuner!=3)
		{
			DrvDSP_SetVolume(  );								// Restore volume
		}
	}
//	Rec_Mute(  );
	return;
}


void Amute_Ctrl( void )
{
	if(( gu16_timer_wait == 0 ) && ( gu08_amute_df == 0 ))
		Radio_Amute_Sens_Off( );
}


//-----------------------------------------------------------------

// INITIALIZATION OF TUNER

void Tuner_Init( void )
{
	if ( u08h_tuner_o != u08h_to_bak )
	{
		Clr_Station(  );
	}

	u08h_to_bak = u08h_tuner_o;

	if ( ( u08h_tu_stat[0] & B11110000 ) != 0 )
	{
		u08h_tu_stat[0] = 							// Ref freq=25KHz
		u08h_tu_stat[1] = 0x00;						// set FM stereo
		u08_fm_no =
		u08_am_no = 1;
	}

	u08h_tu_stat[1] &= ~TU_STAT_MONO;					// set stereo condition
	u08h_fm_dts_df =
	u08h_am_dts_df = 0x00;

	Load_Com_Mem(  );
	Preset2Data(  );
	return;
}



void Preset2Data( void )
{
	if ( ( u08h_tu_stat[1] & TU_STAT_AM1 ) == 0 )
	{
		u16_rdata = u16_fm_preset;
	}
	else
	{
		u16_rdata = u16_am_preset;
	}
	return;
}



// VALIDATION THE FREQ IN u16_rdata IS IN RANGE

void Valid_Freq( void )
{
	if ( ( u16_rdata >= 1 ) && ( u16_rdata <= u16_max+1 ) )
	{
		return;
	}

	if ( u16_rdata == 0 )
	{
		u16_rdata = u16_max+1;
	}
	else
	{
		u16_rdata = 1;
	}
	u08h_rmute = 0x02;
	return;
}


void Data2Preset( void )
{
	if ( ( u08h_tu_stat[1] & TU_STAT_AM1 ) == 0 )
	{
		u16_fm_preset = u16_rdata;
	}
	else
	{
		u16_am_preset = u16_rdata;
	}
	return;
}


void Freq_Cal( void )
{
	Data2Preset(  );
	u16_sd_freq = u16_sd_init + ( u08_sd_step * ( u16_rdata-1 ) );
	u16h_ss_freq = u16h_ss_init + ( u08h_ss_step * ( u16_rdata-1 ) );
	return;
}



//----------------------------------------------
//	RADIO_SCC:

void Tuner_Job( void )
{
	switch ( u08h_tuner_scc )
	{
		case	TU_STEP_UP:						// 0x02
		case	TU_STEP_DN:						// 0x03
			TUCtrl_SingleStep(  );
			break;

		case	TU_MAN_SRCH_UP:					// 0x04
		case	TU_MAN_SRCH_DN:					// 0x05
			TUCtrl_ManualSerch(  );
			break;

		case	TU_AUTO_SRCH_UP:				// 0x08
		case	TU_AUTO_SRCH_DN:				// 0x09
			TUCtrl_AutoSerch(  );
			break;

		case	TU_UP_SD_CHECK:					// 0x0a
		case	TU_DN_SD_CHECK:					// 0x0b
			TUCtrl_SDCheck(  );
			break;

		case	TU_UP_IF_CHECK:					// 0x0c
		case	TU_DN_IF_CHECK:					// 0x0d
			TUCtrl_IFCheck(  );
			break;

		case	TU_SEND_PLL:					// 0x0e
			TUCtrl_SendPll(  );
			break;

		case	TU_AMUTE_OFF:					// 0x0f
			TUCtrl_AmuteOff(  );
			break;

//		case	TU_INIT_WAIT:					// 0x8e
//			TUCtrl_InitWait(  );
//			break;

		default:
			;
	}
	return;
}


void TUCtrl_SingleStep( void )
{
	if ( u08h_tuner_scc == TU_STEP_UP )
	{
		Step_Up(  );
	}
	else
	{
		Step_Dn(  );
	}
//	gu16_timer_wait = 0;
	TUCtrl_SendPll(  );			//0xoe
	return;
}


void TUCtrl_ManualSerch( void )
{
	if ( gu16_timer_wait != 0 )
	{
		return;
	}

	if ( u08h_tuner_scc == TU_MAN_SRCH_UP )
	{
		Step_Up(  );
	}
	else
	{
		Step_Dn(  );
	}

	Valid_Freq(  );
	Freq_Cal(  );
	gu16_timer_wait = 12;

	return;
}



void TUCtrl_AutoSerch( void )
{
	if ( gu16_timer_wait != 0 )
	{
		return;
	}

//check starting freq.
	if ( u08_lp_start == 0 )
	{
		u16_sfdata = u16_rdata;
		u08_lp_start = 1;
	}
	else if ( u16_sfdata == u16_rdata )
		{
			TUCtrl_SendPll(  );									// already 1 cycle
			return;
		}

	if ( u08h_tuner_scc == TU_AUTO_SRCH_UP )
	{
		Step_Up(  );
	}
	else
	{
		Step_Dn(  );
	}

	Valid_Freq(  );
	Freq_Cal(  );
	Manual_Para(  );
	Send_Pll(  );

	u08h_tuner_scc |= B00000010;

	if ( u08h_rmute & B00000010 )								// Limit?
	{															// v. Yes
		gu16_timer_wait = 50;			

	}
	else
	{
		if ( u08h_tu_stat[1] & TU_STAT_AM1 )
		{
			gu16_timer_wait = 25;							// AM delay 250ms
		}
		else
		{
			gu16_timer_wait = 10;							// FM delay 100ms
		}
	}
	u08h_rmute &= B11111101;
	return;
}


void TUCtrl_SDCheck( void )
{
	if ( gu16_timer_wait != 0 )
	{
		return;
	}

	if ( ( CPU_PIO3 & CPU_ST_DET ) == 0 )						// low for station detected
	{
		Auto_Para(  );
		Send_Pll(  );

		u08h_tuner_scc += 0x02;
		gu16_timer_wait = 10;
	}
	else
	{
		u08h_tuner_scc &= B11111101;
		gu16_timer_wait = 10;
	}
	return;
}



void TUCtrl_IFCheck( void )
{
	if ( gu16_timer_wait != 0 )
	{
		return;
	}

	Get_Pll_Data(  );

	if ( ( u08h_tu_stat[1] & B00000001 ) == 0 )
	{
// FM, compare it w/53980 = 10.7MHz/8 with 32 ms gate time
// freq tol is +-12KHz from 5380 to 53B0

⌨️ 快捷键说明

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