FAQ-MT6250基线关机有pop音

2024-03-08 16:32
文章标签 关机 faq pop 基线 mt6250

本文主要是介绍FAQ-MT6250基线关机有pop音,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

MT6250基线关机有pop音,之前MT6250D有出现过,解决方法是将afe_def.h文件的
__AFE_PA_DELAY_OFF__定义为1,能够解决。而MT6250按此方法处理后,能将pop音消除,但录音机
录音后,立刻播放会死机。
[Solution]
分析过程:因为是播放声音的末尾有pop音,采用提前关PA的方法,这个方法在较多平台经常使用
,如MT6236,MT6253,MT6252等。
AFE_TurnOffSpeaker函数修改如下:
void AFE_TurnOffSpeaker( kal_uint8 aud_func )
{
kal_uint32 savedMask;
stack_print("AFE_TurnOffSpeaker v1-afe_common.c line 2872-2");
savedMask = SaveAndSetIRQMask(); /* Disable interrupt to prevent race
condition */
afe.sp_flag &= ~(1<<aud_func);
RestoreIRQMask(savedMask);
if( !afe.gpio_lock && (afe.aud[aud_func].out_dev & L1SP_BUFFER_EXT)) {
AFE_SwitchExtAmplifier( false );
kal_sleep_task(1);
afe.ext_op_on = KAL_FALSE; 

AFE_SetRefresh();
L1Audio_Msg_AFE_TurnSpk( L1AUDIO_Str_onoff(0), L1AUDIO_Func_Name(aud_func)
);
}
但经试验会出现通话时,对方听不到我们手机的声音,或者对方说话,我们听不到了,免提可以听到
.
考虑到若是再去分析通话的问题,会比较发散。于是从__AFE_PA_DELAY_OFF__定义为1,引发死
机问题着手。仍将__AFE_PA_DELAY_OFF__定义为1,但录音机录音后,立刻播放会死机,抓
memory dump分析。
AFE_Stop_and_Wait_DelayOff中kal_sleep_task,MMI (等待事件<aud_even:0x1>,一直
等不到,导致MMI的外部消息队列满。
作如下修改后,问题解决。
void AFE_Stop_and_Wait_DelayOff(kal_uint8 aud_func, kal_uint32 asp_fs)
{
#if __AFE_AudVoice_SingleClkSrc__
#if defined(MT6250)
kal_uint32 savedMask;
kal_bool stop_and_wait = KAL_FALSE;
kal_bool in_delayoff = KAL_FALSE;
savedMask = SaveAndSetIRQMask();
if(AFE_IsInDelayOff() )
in_delayoff = KAL_TRUE;
RestoreIRQMask(savedMask);
switch(aud_func)
{
case L1SP_SPEECH:
case L1SP_SND_EFFECT:
case L1SP_VOICE:
if( in_delayoff )
{
stop_and_wait = KAL_TRUE;
if(*AFE_VMCU_CON&0x0001)
AFE_TurnOff8K();
if(*AFE_AMCU_CON0&0x0001)
AFE_TurnOffAudioClock();
}
break;
case L1SP_AUDIO:
if( (!AFE_IsKaraok()) && (*AFE_VMCU_CON&0x0001) )
{
AFE_TurnOff8K();
stop_and_wait = KAL_TRUE;
}
else if(in_delayoff)
{
if( AFE_IsKaraok() )
stop_and_wait = KAL_TRUE;
else if(afe.die2die_status == AFE_DIE2DIE_UPLINK)
stop_and_wait = KAL_TRUE;
else if( (afe.die2die_status == AFE_DIE2DIE_DOWNLINK) && (afe.audio_fs != asp_fs) )
stop_and_wait = KAL_TRUE;
}
break;
case L1SP_KEYTONE:
case L1SP_TONE:
if( (afe.die2die_status == AFE_DIE2DIE_DOWNLINK) && in_delayoff )
-à 修改为: if( (afe.die2die_status == AFE_DIE2DIE_DOWNLINK) && (in_delayoff) &&
(AM_IsAudioPlaybackOn() == -1) )
stop_and_wait = KAL_TRUE;
break;
}
if(stop_and_wait)
{
AFE_Disable_IdleOffDelay();
while(afe.audio_clk_ena||afe.voice_clk_ena)
kal_sleep_task(1);
}
#endif
#else
return;
#endif
}

这篇关于FAQ-MT6250基线关机有pop音的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/787696

相关文章

Windows系统不关机故障的解决方法

当Windows系统出现不关机故障时,首先要查找引起Windows系统不关机的原因,然后根据 具体的故障原因采取相应的解决方法。   Windows系统不关机故障的解决方法如下。   1.检查所有正在运行的程序   检查运行的程序主要包括关闭任何在实模式下加载的TSR程序、关闭开机时从启动组自动启 动的程序、关闭任何非系统引导必需的第三方设备驱动程序。   检查运行的程序并停

MongoDB学习—(5)修改器$inc,$unset,$push,$pushAll,$allToSet,$pop,$pull,$pullAll

通过db.help()可以查询到关于数据库的操作,一查询发现有很多方法 其中有一个方法为db.getCollection(cname),即通过这一个函数,传入数据库中的一个集合的名称来获取到该集合的一个对象,我们可以编写函数   function insertTenRecord(obj){ var i=0; while(i++<10){ obj.insert({id:i+1,a

浙大数据结构:02-线性结构4 Pop Sequence

这道题我们采用数组来模拟堆栈和队列。 简单说一下大致思路,我们用栈来存1234.....,队列来存输入的一组数据,栈与队列进行匹配,相同就pop 机翻 1、条件准备 stk是栈,que是队列。 tt指向的是栈中下标,front指向队头,rear指向队尾。 初始化栈顶为0,队头为0,队尾为-1 #include<iostream>using namespace std;#defi

QDI主板的保护功能导致的电脑关机故障

由于QDI主板中的一种系统保护技术CPU Triple protection被激活导致电脑在刚开机几分钟后就自动关机的。   这种技术在用户开机时就开始运行,对CPU的温度进行实时的侦测,当发现CPU达到一定温度时即强行将CPU进行降速工作状态。如果温度继续升高,达到危险值时便会强行关机,以保护CPU,不会因为温度过高而烧毁。作为QDI的创新技术这一,这项技术主要是为了避免因CPU风扇安装不善

[转载]python:remove方法的使用,remove、pop、del三者的区别

remove方法 描述 删除列表中的给定的对象 语法 list.remove() 参数 obj 参数(可选择性插入)obj的作用是要从列表中删除的对象的索引 使用如:list.remove(obj = list[0]) 返回值 remove方法删除后不会返回值 实例 list = [1, 2, 3, 4, 5]List1 = list.remove(1)print (li

利用raspberry pi搭建typecho笔记(三) typecho nginx sqlite FAQ

前言 这是一个汇总文,用来总结我在整个配置过程中遇到的各种问题.因为我在解决这些问题的过程中发现,typecho被部署在这种需要完全自己配置的平台上的情况是比较少的,相关的资料也比较少,所以我的解决过程比较困难,因此在此之后,想把这些问题和解决方案都整理出来,如果有同样需要的人,可以直接参考,少走弯路.   1.typecho安装过程中提示"对不起,无法连接数据库,请先检查数据库配置再继续进行安

数组实现栈,实现push,pop,size方法 -- 面试算法

思考: 有几个关键的地方, 第一,数组的话,如果我们一直push,需要扩容. 第二,因为产生了扩容所以当前数组的大小,不代表存放的数据多少,所以我们需要一个count 表示当前的容量。 第三,扩容之后,要把之前的数据copy 到新的数组里面,并且要把数据放到新的数组里面。 实现: package com.xinyu.test;public class Test27 {/*** 数组实现

虹科干货|以太网系列FAQ(二):如何用EES记录和识别多个ECU流量?

面对包含众多设备的复杂网络,我们该如何有效地记录流量信息?在捕获到大量数据后,又如何确保每个数据包都能准确地与其生成设备相关联?更关键的是,如何在不改变原有网络路由的前提下实现这些目标?那么,如何利用虹科EES(增强型以太网交换机)来完成这些任务呢?本文将为您详细解答。 虹科EES如何实现流量记录与识别? 请想象有4个ECU在网络中,通讯方式如图1所示,在不改变网络拓扑的前提下记录这些ECU产

自然语言处理-应用场景-聊天机器人(三):MaLSTM【基于FAQ 的问答系统】【文本向量化-->问题召回(利用PySparNN句子相似度计算海选相似问题)-->问题排序(深度学习:句子相似度计算)】

一、问答机器人介绍 1. 问答机器人 在前面的课程中,我们已经对问答机器人介绍过,这里的问答机器人是我们在分类之后,对特定问题进行回答的一种机器人。至于回答的问题的类型,取决于我们的语料。 当前我们需要实现的问答机器人是一个回答编程语言(比如python是什么,python难么等)相关问题的机器人 2. 问答机器人的实现逻辑 主要实现逻辑:从现有的问答对中,选择出和问题最相似的问题,

【iOS】状态栏颜色和pop手势

说明 UINavigationController 管理状态栏颜色,需要转发给单个控制器 class NavController: UINavigationController {override func viewDidLoad() {super.viewDidLoad()}override var preferredStatusBarStyle: UIStatusBarStyle {let