芯方式

6253设置使用内部AB类功放,但实际应用时发现波形依然是内部D类功放

0
阅读(173) 评论(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

。。。

}