📄 system_operation.c
字号:
// Disc_in_rom DVD_DATA_OUT DVD_CLK CDC_BUS DVD_SW TOU_CLK TOU_DO TOU_IRQ
PB_DDR = 0X14;
PB_OR = 0X0c;
PB_DR = 0X1F;
// bit7 bit6 bit5 bit4 bit3 bit2 bit1 bit0
// AT041_CS AT041_SCK AT041_SI AT041_SO TUN_ON DVD_POWER_ON TFT_KEY_AD1 TFT_KEY_AD2
PC_DDR = 0XEc;
PC_OR = 0XEc;
PC_DR = 0XF0;
// bit7 bit6 bit5 bit4 bit3 bit2 bit1 bit0
// TV_ON MOTOR_OPEN MOTOR_CLOSE BRAKE_CHCK SW2 SW1 KEY_AD TUN_SM
PD_DDR = 0XE0;
PD_OR = 0XE0;
PD_DR = 0X0F;
// bit7 bit6 bit5 bit4 bit3 bit2 bit1 bit0
// TOU_DI MUTE TEL_MUTE BACK_CON_MUTE TUN_SD TUN_SSTOP TV_MUTE HI_CON
PE_DDR = 0Xd3;
PE_OR = 0Xd2;
PE_DR = 0X8d;
// bit7 bit6 bit5 bit4 bit3 bit2 bit1 bit0
// SEL_2533_1 SEL2533_2 BACK_CAR DVD_IR VIDEO_ID ACC_ID BELL IR
PF_DDR = 0Xd2;
PF_OR = 0Xc3;
PF_DR = 0X30; //Power on enable the bell sometime
}
/******************************************************
Function:All IO as input
******************************************************/
void ACC_off_setting_IO(void)
{
// bit7 bit6 bit5 bit4 bit3 bit2 bit1 bit0
// SCL SDA POWER_ON TFT_POWER_ON PLL_CE PLL_DI PLL_DO PLL_CL
PA_DDR = 0X30;
PA_OR = 0X30;
PA_DR = 0;//0Xc0;
// bit7 bit6 bit5 bit4 bit3 bit2 bit1 bit0
// Disc_in_rom DVD_DATA_OUT DVD_CLK CDC_BUS DVD_SW TOU_CLK TOU_DO TOU_IRQ
PB_DDR = 0;//0X88;
PB_OR = 0;//0X88;
PB_DR = 0;//0X88;
// bit7 bit6 bit5 bit4 bit3 bit2 bit1 bit0
// AT041_CS AT041_SCK AT041_SI AT041_SO TUN_ON DVD_POWER_ON TFT_KEY_AD1 TFT_KEY_AD2
PC_DDR = 0X04;
PC_OR = 0X04;
PC_DR = 0;//0X00;
// bit7 bit6 bit5 bit4 bit3 bit2 bit1 bit0
// TV_ON MOTOR_OPEN MOTOR_CLOSE BRAKE_CHCK SW2 SW1 KEY_AD TUN_SM
PD_DDR = 0X80;
PD_OR = 0X80;
PD_DR = 0;//0X6C;
// bit7 bit6 bit5 bit4 bit3 bit2 bit1 bit0
// TOU_DI MUTE TEL_MUTE BACK_CON_MUTE TUN_SD TUN_SSTOP TV_MUTE HI_CON
PE_DDR = 0X41;
PE_OR = 0X41;
PE_DR = 0X01;
// bit7 bit6 bit5 bit4 bit3 bit2 bit1 bit0
// SEL_2533_1 SEL2533_2 BACK_CAR DVD_IR VIDEO_ID ACC_ID BELL IR
PF_DDR = 0x10;//0XC0;
PF_OR = 0x10;//0XC0;
PF_DR = 0x10;//0XC0; //Power on enable the bell sometime
}
/*****************************************************************
Function:Init each process,such csp/video switch/TV tuner/Radio tuner and so on
*******************************************************************/
void Init_each_process(void)
{
unsigned char i;
// asm sim //Disable all interrupt
Bell_cnt = 50; //Enable the bell 0.5s 0.5s = 10ms * 50
SPI1_CR = 0; /* Disable SPI */
SCI_SCCR2 = 0; /* Disable SCI */
ADC_CR = 0x00; /* ADC Off */
ISPR0=0xCF;
TIM2_CR1 = 0; /* disable Timer 2 */
//TIM2_CR2 = 0x08;
TIM1_CR2 = 0x08; /* Clock divided by 8 */
TIM1_CR1 = 0x40; /* Output Compare Int Enable */
//------Init CSP----------
Total_volume = 15;
Bass_volume = 10;
Treble_volume = 7;
LF_volume = 14;
RF_volume = 14;
LR_volume = 14;
RR_volume = 14;
//-------Init T100 video setting
Contrast_volume =13;
Brightness_volume =13;
Chroma_volume =13;
//------Init BACK_CAR flag---------
if(!ValBit(PF_DR,BACK_CAR))
ClrBit(System_flag3,BACK_CAR_on_flag); //If low then first time power on then will in back car mode
//------Init telephone flag---------
if(ValBit(PE_DR,TEL_MUTE))
SetBit(System_flag3,Telephone_on_flag);
else
ClrBit(System_flag3,Telephone_on_flag);
//------Init BRAKE_CHCK flag------
if(ValBit(PD_DR,BRAKE_CHCK))
SetBit(System_flag3,BRAKE_CHCK_normal_flag);
else
ClrBit(System_flag3,BRAKE_CHCK_normal_flag);
//------Init TV tuner---------
for(i=0;i<50;i++)
TV_frequence_list[i] = VLF_MIN_FPC;
//------Init Radio tuner-------
for(i=0;i<30;i++)
FM_frequence_list[i] = 8750;
for(i=0;i<30;i++)
AM_frequence_list[i] = AMFREQ_MIN;
SetBit(Radio_tuner_flag,AutoSearchOK_flag);
//------Init the DVD command------------
SetBit(System_flag4,DVD_play_pause_flag);
//------Init CDC-----------------------
//------Init video switch--------
//------Init bell ---------------
SetBit(System_flag2,Bell_on_flag);
SetBit(System_flag,bSearchDir);
System_mode = Radio_mode;
EICR = 0x98;
asm rim;
}
/*--------------------------------------------------------------------------
Routine : Detect_key
Input :
Output : Code_number
Description
- Detect key function by ADC
--------------------------------------------------------------------------*/
void Detect_key(void)
{
unsigned char Key_volume,i;
unsigned char Key_code_buffer[5];
unsigned char Key_code= 0x44;
unsigned char Store_keep_key_code;
for(i=0;i<5;i++) /*One detect key will do 5 time ADC*/
{
/*Selection the analog input to convert >AIN13(PC1);CH3 CH2 CH1 CH0:1 1 0 1*/
Select_ADC_channel(13);
/*Start to convert*/
SetBit(ADC_CR,5);
/*Wait the EOC bit beto 1 then the convert complete*/
while(!ValBit(ADC_CR,7))
asm nop;
/*Finish convert then read the ADCDRH and the ADCDRL register to comparison
what key function had press on*/
Key_volume = ADC_DR;
Store_keep_key_code = Keep_key_code;
if(Key_volume >=0xe5 && Key_volume<=0xff)
{
Key_code = 0xff; /*No key press on*/
Keep_key_code = No_key_on;
} //8 is mean 0.15V
#ifdef Quest_500_a4
if(Key_volume>=23-8 && Key_volume<23+8) /*The volume is 23*/
Key_code = Key_power;
if(Key_volume>=45-8 && Key_volume<=45+8) /*The volume is 45*/
Key_code = Key_DVD;
if(Key_volume>=71-8 && Key_volume<=71+8) /*The volume is 71*/
Key_code = Key_TV;
if(Key_volume>=92-8 && Key_volume<=92+8) /*The volume is 95*/
Key_code = Key_FM;
if(Key_volume>=116-8 && Key_volume<=116+8) /*The vloume is 118*/
Key_code = Key_AM;
if(Key_volume>=138-8 && Key_volume<=138+8) /*The volume is 141*/
Key_code = Key_CDC;
if(Key_volume>=163-8 && Key_volume<=163+8) /*The volume is 166*/
Key_code = Key_open;
#else
if(Key_volume>=23-8 && Key_volume<23+8) /*The volume is 23*/
Key_code = Key_power;
if(Key_volume>=45-8 && Key_volume<=45+8) /*The volume is 45*/
Key_code = Key_jump_back;
if(Key_volume>=71-8 && Key_volume<=71+8) /*The volume is 71*/
Key_code = Key_jump_front;
if(Key_volume>=95-8 && Key_volume<=95+8) /*The volume is 95*/
Key_code = Key_vol_up;
if(Key_volume>=118-8 && Key_volume<=118+8) /*The vloume is 118*/
Key_code = Key_vol_down;
if(Key_volume>=141-8 && Key_volume<=141+8) /*The volume is 141*/
Key_code = Key_mute;
if(Key_volume>=166-8 && Key_volume<=166+8) /*The volume is 166*/
Key_code = Key_open;
#endif
if(Key_code == No_key_on) /*When no key1 press on then detect the key2*/
{
/*Selection the analog input to convert >AIN12(PC0);CH3 CH2 CH1 CH0:1 1 0 0*/
Select_ADC_channel(12);
/*Start to convert*/
SetBit(ADC_CR,5);
/*Wait the EOC bit beto 1 then the convert complete*/
while(!ValBit(ADC_CR,7))
asm nop;
/*Finish convert then read the ADCDRH and the ADCDRL register to comparison
what key function had press on*/
Key_volume = ADC_DR;
if(Key_volume >=0xc0 && Key_volume<=0xff)
{
Key_code = 0xff; /*No key press on*/
Keep_key_code = No_key_on;
}
else
Keep_key_code = Store_keep_key_code;
#ifdef Quest_500_a4
if(Key_volume>=23-8 && Key_volume<=23+8) /*The volume is 23*/
Key_code = Key_jump_front;
if(Key_volume>=45-8 && Key_volume<=45+8) /*The volume is 45*/
Key_code = Key_jump_back;
if(Key_volume>=71-8 && Key_volume<=71+8) /*The volume is 71*/
Key_code = Key_stop;
if(Key_volume>=92-8 && Key_volume<=92+8) /*The volume is 95*/
Key_code = Key_play_pause;
if(Key_volume>=116-8 && Key_volume<=116+8) /*The volume is 118*/
Key_code = Key_mute;
if(Key_volume>=138-8 && Key_volume<=138+8) /*The volume is 139*/
Key_code = Key_vol_down;
if(Key_volume>=163-8 && Key_volume<=163+8) /*The volume is 139*/
Key_code = Key_vol_up;
#else
if(Key_volume>=23-8 && Key_volume<=23+8) /*The volume is 23*/
Key_code = Key_menu;
if(Key_volume>=45-8 && Key_volume<=45+8) /*The volume is 45*/
Key_code = Key_slow_back;
if(Key_volume>=71-8 && Key_volume<=71+8) /*The volume is 71*/
Key_code = Key_fast_front;
if(Key_volume>=95-8 && Key_volume<=95+8) /*The volume is 95*/
Key_code = Key_mode;
if(Key_volume>=118-8 && Key_volume<=118+8) /*The volume is 118*/
Key_code = Key_time;
if(Key_volume>=139-8 && Key_volume<=139+8) /*The volume is 139*/
Key_code = Key_play_pause;
#endif
}
Key_code_buffer[i] = Key_code;
WAIT_100us();
}
if(((Key_code_buffer[0] == Key_code_buffer[1]) &&(( Key_code_buffer[2] == Key_code_buffer[3]) && Key_code_buffer[4])) &&
((Key_code_buffer[0] != 0xff && Key_code_buffer[1] != 0xff) && (Key_code_buffer[2] != 0xff && Key_code_buffer[3] != 0xff)))
{
Code_number = Key_code_buffer[3];
switch(Code_number) /*Check the key is the short key or the long key*/
{
case Key_power:
case Key_jump_back:
case Key_jump_front:
case Key_vol_up:
case Key_vol_down:
case Key_mode:
case Key_menu:
case Key_DVD:
case Key_TV:
case Key_FM:
case Key_AM:
case Key_CDC:
case Key_stop:
ClrBit(System_flag4,Long_key_flag);
break; /*These are the short key no need detect long time*/
case Key_mute:
case Key_open:
case Key_slow_back:
case Key_fast_front:
case Key_time:
case Key_play_pause:
if(!ValBit(System_flag4,Long_key_flag))
Key_delay = 100;
SetBit(System_flag4,Long_key_flag);
break; /*These are the long key need to detect long time*/
}
if(!ValBit(System_flag4,Long_key_flag)) //Short key
{
if(Keep_key_code == Code_number) //The key keep press on
{
if(Code_number == Key_vol_up || Code_number == Key_vol_down) //Process the volume up/volume down key
{
if(Volume_key_delay == 0)
{
SetBit(System_flag,Key_flag);
Volume_key_delay = Volume_key_delay_time;
}
}
else
ClrBit(System_flag,Key_flag);
}
else
{
SetBit(System_flag,Key_flag);
}
return;
}
if(ValBit(System_flag4,Long_key_flag))
Long_key_time++;
}
else
{
if(ValBit(System_flag4,Long_key_flag) && Long_key_time >= 1)
{
ClrBit(System_flag4,Long_key_flag);
Long_key_time = 0x00;
if(!ValBit(System_flag4,Active_long_key_flag))
SetBit(System_flag,Key_flag);
else
ClrBit(System_flag,Key_flag);
ClrBit(System_flag4,Active_long_key_flag);
}
else
ClrBit(System_flag,Key_flag); /*No key press on*/
}
if(ValBit(System_flag4,Long_key_flag) && Key_delay == 0x00) /*Finish counter time*/
{
if(Long_key_time >= 20)
{
SetBit(System_flag4,Active_long_key_flag);
switch(Code_number)
{
case Key_mute: Code_number = Long_key_mute; break;
case Key_open: Code_number = Long_key_open; break;
case Key_slow_back: Code_number = Long_key_slow_back; break;
case Key_fast_front: Code_number = Long_key_fast_front; break;
case Key_time: Code_number = Long_time_key; break;
case Key_play_pause: Code_number = Long_key_play_pause; break;
}
Long_key_time = 0x00; /*Next time keep check the long press key*/
Key_delay = 100; /*1s for detect the long key register counter*/
ClrBit(System_flag4,Long_key_flag);
if(Keep_key_code != Code_number)
SetBit(System_flag,Key_flag);
else
ClrBit(System_flag,Key_flag);
}
}
}
void Select_ADC_channel(unsigned char Channel)
{
ADC_CR = ADC_CR & 0XF0;
ADC_CR = ADC_CR |Channel;
}
/******************************************************************
Function:First time power on to wait unchain the stby state
*******************************************************************/
void First_wait_unchain_stby(void)
{
unsigned char i;
unsigned char Temp_buff[4]= {0};
//SetBit(System_flag,IR_flag);
//IR_Code_number = Remote_power;
while((!ValBit(System_flag,IR_flag) ||IR_Code_number != Remote_power) &&(!ValBit(System_flag,Key_flag) || Code_number != Key_power ))
{
if(ValBit(PF_DR,ACC_ID)) /*Check ACC*/
/*Sleep mode*/
{
System_mute_on();
Close_TV_tuner_power;
Close_Radio_tuner_power;
Close_DVD_5v_power;
Close_system_9v_5v_DVD12v_power;
Close_TFT_12v_power;
Close_TFT_high_power;
ClrBit(System_flag,ACC_on_flag);
ACC_off_setting_IO();
SetBit(MCCSR,1);
SetBit(MCCSR,2);
SetBit(MCCSR,3);
asm HALT; //Into halt mode
}
else
{
Init_IO_port();
Detect_key();
}
}
//Now unchain stby state
ClrBit(System_flag,IR_flag);
ClrBit(System_flag,Key_flag);
SetBit(System_flag,ACC_on_flag);
Set_bell_sound_time(10);
System_mute_on();
//-------Open TFT 12v power--------
Open_TFT_12v_power;
Close_TFT_high_power;
//-------Open system 9v/5v/DVD12v----
Open_system_9v_5v_DVD12v_power;
//-------Open the Radio tuner power----
Open_Radio_tuner_power;
WAIT_100ms();
//--------Init the clock-------
PCF8563_Init(); //It's power is open in all mode
Time_hour=0;
Time_Minute= 0;
g_clock_adjust = CLOCK_ADJUST_IN_HOUR;
Write_time(Time_hour);
g_clock_adjust = CLOCK_ADJUST_IN_MINUTE;
Write_time(Time_Minute);
SetBit(System_flag1,Time_on_flag);
//------Check the Chinese english system---------
AT45DB041B_ContinuousArrayRead(1000,0,Temp_buff,4);
if(Temp_buff[0] == 0xc0 && Temp_buff[1] == 0xd0 && Temp_buff[2] == 0xe0)
{
if(Temp_buff[3] == Chinese_system || Temp_buff[3] == English_system)
Chinese_english_system = Temp_buff[3];
else
Chinese_english_system = English_system;
}
else
{
Chinese_english_system = English_system;
}
AT45DB041B_BufferToMainMemoryPageProgramWithBuilt_inErase(1,500,0,Temp_buff,4);
//-------Init CDC------------------
//Send_command_to_CDC(C_CHECK);
//-------Init csp-------------------
Init_csp();
Select_audio_input_source(Radio_tuner_source);
Disable_loudness_off();
Select_audio_input_gain(Audio_input_gain_0db);
Audio_bass_control();
Audio_treble_control();
//Audio_total_volume_control();
Audio_LF_speaker_volume_control();
Audio_RF_speaker_volume_control();
Audio_LR_speaker_volume_control();
Audio_RR_speaker_volume_control();
//----------------------------------
Send_command_to_touch_panel();
//--------Init T100-------------------
//Open_TFT_high_power;
ClosePanel();
InitTW101();
TconInit();
ClosePanel();
OSDDisable();
LoadGammaTable(0);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -