/* 功能: i2c开始工作 CLOCK在高电平,DATA从高变低 */
void start_2313()
{
bc_sda_2313=1;
bc_clk_2313=1;
_nop_(); _nop_(); _nop_();
bc_sda_2313=0;
_nop_(); _nop_(); _nop_();
bc_clk_2313=0;
_nop_();
}
/* 功能: i2c 的结束工作 CLOCK在高电平,DATA从低变高 */
void stop_2313()
{
_nop_();
bc_sda_2313=0;
_nop_(); _nop_();
bc_clk_2313=1;
_nop_(); _nop_(); _nop_();
bc_sda_2313=1;
_nop_();_nop_();_nop_();
bc_clk_2313=0;
}
/* 读应答位 bc_sda_2313被拉低有应答, ack_2313=1有应答,ack_2313=0 没应答 */
uchar get_2313_ack()
{ uchar ack_2313;
ack_2313=0;
bc_clk_2313=1;
bc_sda_2313=1; // get ack bit from pt2313,ack bit is save in 000h
_nop_(); _nop_();
if(bc_sda_2313==0) ack_2313=20; /* 有应答 */
if(bc_sda_2313==1) ack_2313=10; /* 没应答 */
_nop_();
bc_clk_2313=0;
_nop_();
return ack_2313;
}
/* 功能: 写一字节到i2c 先送最高位, CLOCK低电平时,DATA允许变化; CLOCK高电平时,DATA需稳定
参数: par_2313=一字节的发送数据 */
void send_a_byte_2313(uchar par_2313)
{
uchar i;
for(i=0;i<8;i++ )
{ bc_clk_2313=0;
_nop_(); _nop_();
if((par_2313&0x80)==0x80)
{ bc_sda_2313=1; }
else
{ bc_sda_2313=0; }
par_2313=par_2313<<1;
_nop_();
bc_clk_2313=1;
_nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_();
}
bc_clk_2313=0;
}
/* 发2313的数据 */
void send_pt2313(uchar par_2313 )
{ uchar i,ask_2313;
uchar temp;
// error_2313=0;
for(i=0;i<10;i++) /* 发10次,无效才返回 */
{ start_2313();
send_a_byte_2313(0x88); //0x88=PT2313 address
ask_2313=get_2313_ack();
send_a_byte_2313(par_2313);
ask_2313=get_2313_ack();
// error_2313=ask_2313;
stop_2313();
_nop_();
if(ask_2313==20) break;
}
}
/* PT2313 音量处理 实际是先置音量为最大,然后一通道是MIC_VOL 另一通道是 MIC_ECHO */
void volume_2313()
{ uchar par_2313;
send_pt2313(2);
par_2313=31-par_vol[MIC_VOL];
par_2313=0xc0+par_2313;
send_pt2313(par_2313);
par_2313=31-par_vol[MIC_ECHO];
par_2313=0xe0+par_2313;
send_pt2313(par_2313);
}
/* PT2313 低音处理 */
void bass_2313(uchar par_2313)
{ par_2313=par_2313/2;
par_2313=bass_treble_code[par_2313];
par_2313=par_2313+0x60;
send_pt2313(par_2313);
}
/* PT2313 高音处理 */
void treble_2313(uchar par_2313)
{ par_2313=par_2313/2;
par_2313=bass_treble_code[par_2313];
par_2313=par_2313+0x70;
send_pt2313(par_2313);
}
评论0