📄 csp.c
字号:
/***************************************************************************
Project : Car two ting dvd System
Compiler : ST7 HiCross C (HiWARE)
Module : autos.c
Version : V 1.0
Created : 24 11, 2005
Author : tomi / SA
Description
- Audio process,include volume control/select input/gain control/bass,treble control and so on.
Modified
- tomi
***************************************************************************/
#include "Csp.h"
#include "Libr.h"
#include "Sys_config.h"
#include "i2c_drv.h"
#include "System_operation.h"
unsigned char Csp_buff[8] = {0x00,0xc0,0xe0,0x80,0xa0,0x40,0X60,0X70};
unsigned char Bass_volume = 0x07/*0db*/; //The range is 0 to e
#pragma INTO_ROM
static const unsigned char Bass_list[] = {0x60,0x61,0x62,0x63,0x64,0x65,0x66,0x67,0x6e,0x6d,0x6c,0x6b,0x6a,0x69,0x68};
unsigned char Treble_volume = 0x07/*0db*/; //The range is 0 to e
#pragma INTO_ROM
static const unsigned char Treble_list[] = {0x70,0x71,0x72,0x73,0x74,0x75,0x76,0x77,0x7e,0x7d,0x7c,0x7b,0x7a,0x79,0x78};
unsigned char Total_volume = 30/*0db*/; //The range is 0 to 30
#pragma INTO_ROM
static const unsigned char Total_volume_list[] = {0x38,0x30,0x2c,0x28,0x26,0x24,0x22,0x20,0x1e,0x1c,
0x1a,0x18,0x16,0x14,0x12,0x10,0x0e,0x0d,0x0b,0x0a,
0x09,0x08,0x07,0x06,0x05,0x04,0x03,0x02,0x01,0x00
};
unsigned char LF_volume = 14/*0db*/;
#pragma INTO_ROM
static const unsigned char LF_list[] = {0X9F,0X98,0X94,0X90,0x8e,0X8C,0X8A,0X88,0X87,0X86,0X85,0X84,0X83,0X82,/*0X81,*/0X80};
unsigned char RF_volume = 14/*0db*/;
#pragma INTO_ROM
static const unsigned char RF_list[] = {0XBF,0XB8,0XB4,0XB0,0xbe,0XBC,0XBA,0XA8,0XA7,0XA6,0XA5,0XA4,0XA3,0XA2,/*0XA1,*/0XA0};
unsigned char LR_volume = 14/*0db*/;
#pragma INTO_ROM
static const unsigned char LR_list[] = {0XDF,0XD8,0XD4,0XD0,0xde,0XDC,0XDA,0XC8,0XC7,0XC6,0XC5,0XC4,0XC3,0XC2,/*0XC1,*/0XC0};
unsigned char RR_volume = 14/*0db*/;
#pragma INTO_ROM
static const unsigned char RR_list[] = {0XFF,0XF8,0XF4,0XF0,0xfe,0XFC,0XFA,0XE8,0XE7,0XE6,0XE5,0XE4,0XE3,0XE2,/*0XE1,*/0XE0};
unsigned char Csp_adjust_mode = Front_speaker_balance_mode;
unsigned char Front_speaker_balance_volume=7;
unsigned char Back_speaker_balance_volume=7;
void Select_audio_input_source(unsigned char Input_source);
void Enable_loudness_on(void);
void Disable_loudness_off(void);
void Select_audio_input_gain(unsigned char Input_gain);
void Audio_bass_control(void);
void Audio_treble_control(void);
void Audio_total_volume_control(void);
void Audio_LF_speaker_volume_control(void);
void Audio_RF_speaker_volume_control(void);
void Audio_LR_speaker_volume_control(void);
void Audio_RR_speaker_volume_control(void);
void Init_csp(void);
void Front_speaker_balance_volume_control(void);
void Back_speaker_balance_volume_control(void);
void Csp_up_adjust_control(void);
void Csp_down_adjust_control(void);
void Mute_csp(void);
void Unmute_csp(void);
/**********************************************************************
Function:Select the audio input source,total 3 stereo input
**********************************************************************/
void Select_audio_input_source(unsigned char Input_source)
{
switch(Input_source)
{
case AV_switch_input_source:
Audio_switch = Audio_switch & 0xfc;
break;
case Radio_tuner_source:
Audio_switch = Audio_switch & 0xfd;
Audio_switch = Audio_switch | 0x01;
break;
case Outside_AV2_input_source:
Audio_switch = Audio_switch & 0xfe; //bit S0 is 0
Audio_switch = Audio_switch | 0x02; //bit S1 is 1
break;
}
I2CWrite_nBytes(PT2313_I2C_address,Csp_buff,8);
}
/*********************************************************************
Function:Enable the loudness function on
*********************************************************************/
void Enable_loudness_on(void)
{
ClrBit(Audio_switch,2); //bit S2 is 0
I2CWrite_nBytes(PT2313_I2C_address,Csp_buff,8);
}
/*******************************************************************
Function:Disable the loudness function off
*******************************************************************/
void Disable_loudness_off(void)
{
SetBit(Audio_switch,2); //bit S2 is 1
I2CWrite_nBytes(PT2313_I2C_address,Csp_buff,8);
}
/*******************************************************************
Function:Select input gain:11.25db/7.5db/3.75db/0db
*******************************************************************/
void Select_audio_input_gain(unsigned char Input_gain)
{
switch(Input_gain)
{
case Audio_input_gain_1125db:
Audio_switch = Audio_switch & 0xe7; //The bitG1 G0 are 0
break;
case Audio_input_gain_75db:
Audio_switch = Audio_switch & 0xef; //The bitG1 is 0
Audio_switch = Audio_switch | 0x08; //The bitG0 is 1
break;
case Audio_input_gain_375db:
Audio_switch = Audio_switch & 0xf7; //The bitG0 is 0
Audio_switch = Audio_switch | 0x10; //The bitG1 is 1
break;
case Audio_input_gain_0db:
Audio_switch = Audio_switch | 0x18; //The bitG1 GO are 1
break;
}
I2CWrite_nBytes(PT2313_I2C_address,Csp_buff,8);
}
/*****************************************************************
Function:Bass control
*****************************************************************/
void Audio_bass_control(void)
{
if(Bass_volume <= 0)
Bass_volume = 0x00; //The min is 0x00
if(Bass_volume >= 0x0f)
Bass_volume = 0x0e; //The max is 0x0e
Bass_control = Bass_list[Bass_volume];
I2CWrite_nBytes(PT2313_I2C_address,Csp_buff,8);
}
/*******************************************************************
Function:Treble control
*******************************************************************/
void Audio_treble_control(void)
{
if(Treble_volume <= 0)
Treble_volume = 0x00; //The min is 0x00
if(Treble_volume >= 0x0f)
Treble_volume = 0x0e; //The max is 0x0e
Treble_control = Treble_list[Treble_volume];
I2CWrite_nBytes(PT2313_I2C_address,Csp_buff,8);
}
/******************************************************************
Function:Total volume control
******************************************************************/
void Audio_total_volume_control(void)
{
if(Total_volume <= 0)
Total_volume = 0; //The min is 0x00
if(Total_volume > 29)
Total_volume = 29; //The max is 30
Volume_control = Total_volume_list[Total_volume];
I2CWrite_nBytes(PT2313_I2C_address,Csp_buff,8);
if(ValBit(System_flag1,Mute_flag) && Total_volume != 0) //From 0 to 1
{
Unmute_csp();
WAIT_100ms();
Hardware_disable_mute_system;
Hardware_disable_mute_BACK_CON;
ClrBit(System_flag1,Mute_flag);
}
if(!ValBit(System_flag1,Mute_flag) && Total_volume == 0) //From 1 to 0
{
Hardware_enable_mute_system;
Hardware_enable_mute_BACK_CON;
WAIT_100ms();
Mute_csp();
SetBit(System_flag1,Mute_flag);
}
}
/******************************************************************
Function:LF speaker volume control
******************************************************************/
void Audio_LF_speaker_volume_control(void)
{
if(LF_volume <= 0)
LF_volume = 0; //The min is 0
if(LF_volume > 14)
LF_volume = 14; //The max is 15
Speak_att_LF = LF_list[LF_volume];
I2CWrite_nBytes(PT2313_I2C_address,Csp_buff,8);
}
/******************************************************************
Function:RF speaker volume control
******************************************************************/
void Audio_RF_speaker_volume_control(void)
{
if(RF_volume <= 0)
RF_volume = 0; //The min is 0
if(RF_volume > 14)
RF_volume = 14; //The max is 15
Speak_att_RF = RF_list[RF_volume];
I2CWrite_nBytes(PT2313_I2C_address,Csp_buff,8);
}
/******************************************************************
Function:LF speaker volume control
******************************************************************/
void Audio_LR_speaker_volume_control(void)
{
if(LR_volume <= 0)
LR_volume = 0; //The min is 0
if(LR_volume > 14)
LR_volume = 14; //The max is 15
Speak_att_LR = LR_list[LR_volume];
I2CWrite_nBytes(PT2313_I2C_address,Csp_buff,8);
}
/******************************************************************
Function:LF speaker volume control
******************************************************************/
void Audio_RR_speaker_volume_control(void)
{
if(RR_volume <= 0)
RR_volume = 0; //The min is 0
if(RR_volume > 14)
RR_volume = 14; //The max is 15
Speak_att_RR = RR_list[RR_volume];
I2CWrite_nBytes(PT2313_I2C_address,Csp_buff,8);
}
/*****************************************************************
Function:Init the csp
*****************************************************************/
void Init_csp(void)
{
Volume_control = 0x00; //Total volume is 0db
Speak_att_LR = 0xc0; //LR speaker is 0db
Speak_att_RR = 0xe0; //RR speaker is 0db
Speak_att_LF = 0x80; //LF speaker is 0db
Speak_att_RF = 0xa0; //RF speaker is 0db
Audio_switch = 0x49; //input gain is 0db/Loudness is on/input soure is AV_switch_input_source
Bass_control = 0x67; //bass volume is 0db
Treble_control = 0x77; //Treble volume is 0db
I2CWrite_nBytes(PT2313_I2C_address,Csp_buff,8);
}
void Front_speaker_balance_volume_control(void)
{
if(Front_speaker_balance_volume <1)
Front_speaker_balance_volume = 0; //The min is 0x00
if(Front_speaker_balance_volume > 14)
Front_speaker_balance_volume = 14; //The max is 30
switch(Front_speaker_balance_volume)
{
case 0:
Speak_att_LF = LF_list[14];
Speak_att_RF = RF_list[0];
break;
case 1:
Speak_att_LF = LF_list[14];
Speak_att_RF = RF_list[2];
break;
case 2:
Speak_att_LF = LF_list[14];
Speak_att_RF = RF_list[4];
break;
case 3:
Speak_att_LF = LF_list[14];
Speak_att_RF = RF_list[6];
break;
case 4:
Speak_att_LF = LF_list[14];
Speak_att_RF = RF_list[8];
break;
case 5:
Speak_att_LF = LF_list[14];
Speak_att_RF = RF_list[10];
break;
case 6:
Speak_att_LF = LF_list[14];
Speak_att_RF = RF_list[12];
break;
case 7:
Speak_att_LF = LF_list[14];
Speak_att_RF = RF_list[14];
break;
case 8:
Speak_att_RF = RF_list[14];
Speak_att_LF = LF_list[12];
break;
case 9:
Speak_att_RF = RF_list[14];
Speak_att_LF = LF_list[10];
break;
case 10:
Speak_att_RF = RF_list[14];
Speak_att_LF = LF_list[8];
break;
case 11:
Speak_att_RF = RF_list[14];
Speak_att_LF = LF_list[6];
break;
case 12:
Speak_att_RF = RF_list[14];
Speak_att_LF = LF_list[4];
break;
case 13:
Speak_att_RF = RF_list[14];
Speak_att_LF = LF_list[2];
break;
case 14:
Speak_att_RF = RF_list[14];
Speak_att_LF = LF_list[1];
break;
case 15:
Speak_att_RF = RF_list[14];
Speak_att_LF = LF_list[0];
break;
}
I2CWrite_nBytes(PT2313_I2C_address,Csp_buff,8);
}
void Back_speaker_balance_volume_control(void)
{
if(Back_speaker_balance_volume <1)
Back_speaker_balance_volume = 0; //The min is 0x00
if(Back_speaker_balance_volume > 14)
Back_speaker_balance_volume = 14;
switch(Back_speaker_balance_volume)
{
case 0:
Speak_att_LR = LR_list[14];
Speak_att_RR = RR_list[0];
break;
case 1:
Speak_att_LR = LR_list[14];
Speak_att_RR = RR_list[2];
break;
case 2:
Speak_att_LR = LR_list[14];
Speak_att_RR = RR_list[4];
break;
case 3:
Speak_att_LR = LR_list[14];
Speak_att_RR = RR_list[6];
break;
case 4:
Speak_att_LR = LR_list[14];
Speak_att_RR = RR_list[8];
break;
case 5:
Speak_att_LR = LR_list[14];
Speak_att_RR = RR_list[10];
break;
case 6:
Speak_att_LR = LR_list[14];
Speak_att_RR = RR_list[12];
break;
case 7:
Speak_att_LR = LR_list[14];
Speak_att_RR = RR_list[14];
break;
case 8:
Speak_att_RR = RR_list[14];
Speak_att_LR = LR_list[12];
break;
case 9:
Speak_att_RR = RR_list[14];
Speak_att_LR = LR_list[10];
break;
case 10:
Speak_att_RR = RR_list[14];
Speak_att_LR = LR_list[8];
break;
case 11:
Speak_att_RR = RR_list[14];
Speak_att_LR = LR_list[6];
break;
case 12:
Speak_att_RR = RR_list[14];
Speak_att_LR = LR_list[4];
break;
case 13:
Speak_att_RR = RR_list[14];
Speak_att_LR = LR_list[2];
break;
case 14:
Speak_att_RR = RR_list[14];
Speak_att_LR = LR_list[1];
break;
case 15:
Speak_att_RR = RR_list[14];
Speak_att_LR = LR_list[0];
break;
}
I2CWrite_nBytes(PT2313_I2C_address,Csp_buff,8);
}
void Csp_up_adjust_control(void)
{
switch(Csp_adjust_mode)
{
case Front_speaker_balance_mode:
Front_speaker_balance_volume++;
Front_speaker_balance_volume_control();
break;
case Total_volume_mode:
Total_volume++;
Audio_total_volume_control();
break;
case Treble_volume_mode:
Treble_volume++;
Audio_treble_control();
break;
case Bass_volume_mode:
Bass_volume++;
Audio_bass_control();
break;
case Back_speaker_balance_mode:
Back_speaker_balance_volume++;
Back_speaker_balance_volume_control();
break;
}
}
void Csp_down_adjust_control(void)
{
switch(Csp_adjust_mode)
{
case Front_speaker_balance_mode:
if(Front_speaker_balance_volume != 0)
Front_speaker_balance_volume--;
Front_speaker_balance_volume_control();
break;
case Total_volume_mode:
if(Total_volume != 0)
Total_volume--;
Audio_total_volume_control();
break;
case Treble_volume_mode:
if(Treble_volume != 0)
Treble_volume--;
Audio_treble_control();
break;
case Bass_volume_mode:
if(Bass_volume != 0)
Bass_volume--;
Audio_bass_control();
break;
case Back_speaker_balance_mode:
if(Back_speaker_balance_volume != 0)
Back_speaker_balance_volume--;
Back_speaker_balance_volume_control();
break;
}
}
void Mute_csp(void)
{
Speak_att_LF=0x9f;
Speak_att_RF=0xbf;
Speak_att_LR=0xdf;
Speak_att_RR=0xff;
I2CWrite_nBytes(PT2313_I2C_address,Csp_buff,8);
}
void Unmute_csp(void)
{
Audio_LF_speaker_volume_control();
Audio_RF_speaker_volume_control();
Audio_LR_speaker_volume_control();
Audio_RR_speaker_volume_control();
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -