6253设置使用内部AB类功放,但实际应用时发现波形依然是内部D类功放
0赞6253设置使用内部AB类功放,但实际应用时发现波形依然是内部D类功放
半导体芯片设计厂商MTK FAQ参考文档
[Description]
在53_10A版本上设置使用内部AB类功放(afe2.c文件中函数AFE_Init内调用
pmu6253_spk_mode(SPK_CLASS_AB_MODE)),但是在实际应用时发现波形依然是内部D类功放
;后来打trace发现在每次关闭音乐重新打开时寄存器“PMIC_CLASSD_CON0”依然表示为内部D
类功放,请问什么地方改动了设置的mode? 麻烦帮忙确认下是在什么地方被设置成D类功放
[Solution]
关于“在关闭音乐到下次开启过程中是什么地方改动了内部AB类为D类的”,
与调用pmu6253_spk_mode设置mode的时机有关, 如果较晚就会造成afe.spk_driver_mode为0
,每次开启AFE会执行_AfeClassDInit,
_AfeClassDInit中根据 if (afe.spk_driver_mode == 0) // 0: class-D
{
_AfeSwitchClassD();
}
切为class D.
而afe.spk_driver_mode赋值是在AFE_Init 中。所以设置class d要比这个赋值早,
afe.spk_driver_mode才能得到正确的值。
要确保在AFE_Init 中afe.spk_driver_mode = (AFE_READ16(PMIC_CLASS_D_CTR0) &
(1<<3)) >> 3; // 0: class-D, 1:之前调用pmu6253_spk_mode设置mode。
void AFE_Init( void )
{。。。
pmu6253_spk_mode(SPK_CLASS_AB_MODE);//在这里设置CLASS AB mode.
。。。
afe.spk_driver_mode = (AFE_READ16(PMIC_CLASS_D_CTR0) & (1<<3)) >> 3; // 0:
class-D, 1: class-AB
。。。
}