📄 radio_1.c.bak
字号:
/**************************************************************************/
/* [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 + -