最近在调试QCC3005 蓝牙耳机方案。

考虑低功耗的问题,由于系统的音频输出接了一颗功放,而此功放有一个Shutdown管脚(低电平有效),可以平时不用功放的时候来拉低此管脚使功放工作在shutdown模式来降低静态功耗。

而我在QCC的管脚配置原理图上,通过 PIO18管脚接到此shutdown脚上,然后在ADK里通过系统的Audio Active事件来驱动它。

想要实现的功能就是:当系统出于Audio Active状态时,会控制PIO18输出高电平,然后功放被使能,而当没有在Audio Active状态时,系统输出PIO18为低电平,进而关闭了功放,依此来实现降低功耗的效果。

但是我们在实际调试时候发现一个问题:

正常情况下, 我们蓝牙连接了手机,播放音乐时,PIO输出高,停止播放时,PIO输出低;来电话时,PIO输出高,挂断电话时PIO输出低,好像一切都是和预想的结果一样。但是测试到一种情况:

当耳机连接了手机,正在通话中的时候,如果此时又有另外一个电话打进来,此时PIO18莫名奇妙变低电平了!!!导致耳机里没了声音,蓝牙连接之类的都是正常,如果此时挂断其中一个电话,然后调节一下音量,PIO18又变高电平,问题就出在这里。

我们参考了开发板,发现开发板的 SKP_Mute是接在PIO16,我们是接在PIO18。从官方datasheet里可以看到,这两个IO的情况不一样。

开发板用的PIO 16,就不会有这样的问题,

2019-03-28问题补充:

当时测试开发板没有问题的情况,后来验证开发板没有用PIO16去控制功放的shutdown,所以说,开发板也有同样问题,只是管脚没有控制,问题没有当场反应出来,后来通过测量,发现当打电话时,PIO16同样是输出低电平。

后来通过sink源码里,找到指定的判断条件,把电话state加入到条件列表,才解决此问题。

2019-07-26 继续补充:

接上面问题描述,如果控制音频功放的使能脚没用和开发板上一样的话,需要修改一下系统代码的判断条件。

第一步:在sink_statemanager.c文件里自定义一个判断在打电话状态的函数,如下:

bool isSinkInCallMode (void)
{if ((gTheSinkState == deviceOutgoingCallEstablish ) || (gTheSinkState == deviceIncomingCallEstablish ) || (gTheSinkState == deviceActiveCallSCO ) || (gTheSinkState == deviceActiveCallNoSCO )||(gTheSinkState == deviceThreeWayCallWaiting)||(gTheSinkState == deviceThreeWayCallOnHold)||(gTheSinkState == deviceIncomingCallOnHold)||(gTheSinkState == deviceActiveCallSCO)){return TRUE;}else{return FALSE;}
}

注意函数创建之后要在sink_statemanager.h中声明一下:

bool isSinkInCallMode(void);

然后,回到主函数里,查找关键词:PIO_AUDIO_ACTIVE

这个就是用来控制音频功放的IO。找到如下代码片段:

if((!IsAudioBusy()) && (!sinkAudioIsAudioRouted())){MAIN_DEBUG (( "HS : EventSysCheckAudioAmpDrive turn off amp\n" ));PioDrivePio(PIO_AUDIO_ACTIVE, FALSE);}

这个就是当音频不在有效的时候,将音频功放关掉。我们重点修改这段代码,加上一个判断条件(当不在通话模式的时候),如下:

if((!IsAudioBusy()) && (!sinkAudioIsAudioRouted()) && (!isSinkInCallMode())){MAIN_DEBUG (( "HS : EventSysCheckAudioAmpDrive turn off amp\n" ));PioDrivePio(PIO_AUDIO_ACTIVE, FALSE);}/* audio is still busy, check again later */else{MAIN_DEBUG (( "HS : EventSysCheckAudioAmpDrive still busy, reschedule\n" ));PioDrivePio(PIO_AUDIO_ACTIVE, TRUE);MessageSendLater(&theSink.task , EventSysCheckAudioAmpDrive, 0, CHECK_AUDIO_AMP_PIO_DRIVE_DELAY);}

注意上面加入了前面创建的 isSinkInCallMode()函数,然后编译通过。

QCC3005 控制AMP_Mute的管脚配置问题相关推荐

  1. 手机内部充电电流控制原理图(如果手机支持快充,比如支持9V快充,则通过充电接口的D+、D-二根线,输出对应的高低电平组合,FP6601就会控制它的3脚接地,4脚悬空,此时R3与R2并联,改变反馈下拉)

    手机内部充电电流控制原理图 来源:电工之家•作者:电工之家• 2019-12-08 10:48 • 7365次阅读 0 手机充电器电流控制方面: 现在的手机充电器,无一例外,都使用了隔离式开关电源电路 ...

  2. html控制页眉页脚,HTML到PDF解决方案(处理内容,页眉和页脚)

    iTextSharp无法将HTML转换为PDF.这不是它的设计目的.它旨在从头开始创建PDF文件,而不是在各种格式之间转换为PDF.如果您想将HTML转换为PDF,您可以使用基于iText的{​​{3 ...

  3. 如何对DevOps数据库进行源代码控制

    提纲: 包括索引在内的数据库模式需要进行源代码控制 诸如查询表这类用于控制业务逻辑的数据需要进行源代码控制 开发人员需要一种能够便捷地创建本地数据库的方法 共享数据库的更新只能通过构建服务器完成 健壮 ...

  4. 电机的入门之路系列4--PWM控制直流电机

    本文原文来自于本人新浪博客:http://blog.sina.com.cn/s/blog_12f79c9b90102vd8u.html 一. 555定时器产生时钟信号 555定时器是一种多用途的数字- ...

  5. Linux学习~树莓派gpio控制

    WiringPi 是应用于树莓派平台的 GPIO 控制库函数,WiringPi 遵守 GUN Lv3.wiringPi 使用 C 或者 C++ 开发并且可以被其他语言包转,例如 Python.ruby ...

  6. HC-05蓝牙模块与STM32控制led灯亮详解

    HC-05蓝牙模块与STM32控制led灯亮 一.HC-05蓝牙模块解析 1.简介 2.HC-05原理 3.HC-05实物图 二.使用AT指令进行配置 1.进入命令响应工作模式 2.配置串口 3.进行 ...

  7. 立创梁山派学习笔记——GPIO输出控制

    梁山派 前言 开发板简介 GD32F407ZGT6官方资源 数据手册 1.系统框图 2. 引脚复用表 3.命名规则 4.其他 用户手册 固件库与PACK包 开发环境搭建 立创官方的资料包 资料齐活,开 ...

  8. 基于L298N的微型直流电机的控制课程设计报告

    1 绪论 1.1  直流电机简介 直流电机就是将直流电能转换成机械能(直流电动机)或将机械能转换成直流电能(直流发电机)的旋转电机.直流电机的结构应由定子和转子两大部分组成.直流电机运行时静止不动的部 ...

  9. 关于PMIC上CHG_LED_SINK引脚控制

    CHG_LED_SINK 为PMIC上一个专门用来控制充电指示灯的管脚. PMIC上关于这个管脚控制的寄存器地址为: 在dts中配置 qcom,chgr-led-support; 可以通过系统控制ch ...

  10. Raspberry Pi 4B树莓派 |#入门教程02# 树莓派GPIO控制(Python、C)

    树莓派GPIO编号方式 功能物理引脚 从左到右,从上到下:左边奇数,右边偶数:1-40 通过打开终端窗口并运行命令,可以在Raspberry Pi上访问方便的参考pinout.该工具由GPIO零 Py ...

最新文章

  1. linux开发教程,Java基础面试题(2)
  2. 网络营销——浅析网站改版之后对网站展开新的网络营销有哪些影响?
  3. 分布式架构的演进过程
  4. SpringData核心数据访问接口--PagingAndSortingRepository
  5. 米饭凉一凉再吃会更加地健康
  6. window 系统上传文件到linux 系统出现dos 格式换行符
  7. CentOS 6.4 yum安装LAMP环境
  8. wxpython textctrl_如何从wxpython中的textctrl接受值
  9. 年薪201万!华中科大AI博士生入选华为天才少年计划!
  10. 简单的maven自定义webapp目录
  11. C# 利用iTextSharp画PDF
  12. 阿里云域名解析设置自定义DNS服务器
  13. Android模拟手机QQ登录界面和主界面(含源码)
  14. Android存储子系统流程--vold
  15. Potplayer如何显示书签,书签编辑器
  16. python实现猫抓老鼠
  17. eclipse的正确使用方式
  18. Synology群晖 DS920 +,DS420 +,DS720 +,DS220 + NAS横向对比 群晖20plus系列怎么选
  19. [LOJ2568][可并堆]APIO2016:烟花表演
  20. socket通信之listen函数

热门文章

  1. M语言中的操作符说明:数字以及时间相关的操作符
  2. Linux自学day2
  3. 【微信小程序】解决代码上传超过大小限制
  4. php智能合约语言,智能合约语言 Solidity 教程系列9 - 错误处理
  5. Oracle常用函数解析运用整理
  6. pgAdmin III简介
  7. 真机linux系统封装rhel7.6虚拟机
  8. Axure Share ——原型设计工具 Axure ,移动版
  9. 用spss进行数据的标准化处理_如何用SPSS对数据进行标准化处理
  10. html透明颜色代码,CSS背景颜色透明