icfans

使用蓝牙耳机通话,蓝牙频响中DL的FIR不起作用

0
阅读(68) 评论(0)

[DESCRIPTION]
使用蓝牙耳机通话,蓝牙频响中DL的FIR不起作用
[SOLUTION]来自半导体社区
主要是寄存器DP_AUDIO_PAR的bit1位没有被置位,该位是用于控制DL filter的开关。在函数
AM_DSP_AudioPlaybackOn中会做一个将DP_AUDIO_PAR的bit1位清0的动作。
即:
static void AM_DSP_AudioPlaybackOn( uint32 data )
{
...
#if defined(__BT_AUDIO_VIA_SCO__)
if ( AM_IsBluetoothOn() ){
*DP_SC_FLAGS = 0x0600;
*DP_AUDIO_PAR &= ~0x0002;
*DP_AUDIO_VIA_8KBT_CTRL |= 0x0001;
am.state |= AM_STATE_AvBT;
}
#endif
am.state |= AM_STATE_AUDIO;
L1Audio_Msg_AM_Switch( AM_Switch_Name(8), L1AUDIO_Str_onoff(1) );
}
为确保通话中DP_AUDIO_PAR的bit1为1从而使DL的FIR起作用,需要修改文件am.c中的以下2个函数:
1.
AM_DSP_BluetoothOff()
#if defined(__BT_AUDIO_VIA_SCO__)
if (AM_IsAudioPlaybackOn() != -1){
*DP_AUDIO_VIA_8KBT_CTRL &= ~0x0001;
*DP_AUDIO_PAR |= 0x0002; // 添加此行
am.state &= ~AM_STATE_AvBT;
}else if (AM_IsVMPlaybackOn())
*DP_VSBT_CTRL &= ~0x1;
#endif
2.
AM_DSP_AudioPlaybackOff()
#if defined(__BT_AUDIO_VIA_SCO__)
if (AM_IsBluetoothOn()){
*DP_AUDIO_VIA_8KBT_CTRL &= ~0x0001;
*DP_AUDIO_PAR |= 0x0002; // 添加此行
am.state &= ~AM_STATE_AvBT;
}
#endif
这样即可保证通话过程中DP_AUDIO_PAR的bit1位被置为1,即DL FIR可以正常起作用。


ICfans