智能手机无音频场景使用时Audio DSP低功耗的处理
智能手机(或智能手表)等用电池的电子设备对功耗比较敏感,因此不管是使用中还是待机时都要做低功耗处理来省电。前面的文章(智能手表音乐播放功耗的优化)讲了一款智能手表在播放音乐时的低功耗优化,这属于音频场景使用中的低功耗处理,智能手机上的处理也类似。本文讲讲没有音频场景使用时Audio DSP(下文简称ADSP)的低功耗处理。
没有音频场景使用时,ADSP的低功耗处理我处理过两种,一种是音频子系统(包含ADSP、SRAM等)没有PMU(power management unit,电源管理单元)的,另一种则是有PMU的。没有PMU单元的处理比较简单,就是没有音频场景使用时AP把ADSP下电,这样ADSP没任何功耗,但是当有音频场景使用时,AP首先去boot ADSP(boot过程见文章 Audio DSP boot 过程),然后开始具体的音频场景。Boot需要一定的时间,比如十几毫秒。对于有PMU单元的音频子系统,则要通过PMU做低功耗处理。即ADSP在没有音频场景使用时进入低功耗模式(Low Power Mode, LPM),有音频场景在使用时,ADSP被唤醒,开始具体的音频场景。下面具体讲。
ADSP被boot起来后,如果没有音频场景在使用中,就会进入idle状态。虽然在idle状态,但是也会耗电的,有一定的底电流。对于有PMU的音频子系统,就会通过PMU来做无音频场景使用时的低功耗处理,让功耗降到最小。低功耗处理是硬件和软件相结合的来做。硬件相关的由ASIC做好了,软件是要做好PMU相关的寄存器配置以及相关的逻辑。
先看要做低功耗处理PMU有哪些寄存器要配置。首先是低功耗模式。低功耗有三个模式,分别是CLOCK_GATING , PLL_OFF , PWR_OFF 。 CLOCK_GATING是关clock, PLL_OFF是关PLL,PWR_OFF是ADSP下电,这三种模式是功耗依次变小。通常情况下,既然做低功耗了,肯定要把功耗做到最低,即PWR_OFF模式。其次是memory配置模式。memory的配置有两种,分别是SHUTDOWN和RETENTION。SHUTDOWN是彻底下电,memory里的内容没了。RETENTION是带电保持,memory里的内容还在。在低功耗模式配成PWR_OFF的情况下,如果memory配成SHUTDOWN,让ADSP再起来就跟boot过程完全一样了。所以memory要配成RETENTION,在ADSP进入低功耗模式后让memory里的内容还在,当ADSP被唤醒后可以快速的进入工作模式。需要配置RETENTION的memory包括audio SRAM, ITCM, DTCM等。最后是唤醒源的配置。ADSP进入低功耗模式后要能被唤醒,即从低功耗模式出来开始工作。唤醒源就是那些能唤醒ADSP的中断,通常配置的唤醒源有其他核的IPC(比如AP的IPC)、内置的timer等,ADSP收到这些中断后就会被唤醒,先走唤醒流程,然后开始工作。
再看相关逻辑的处理,主要包括两方面,一是判断是否要进低功耗模式,二是从低功耗模式出来的唤醒流程。ADSP不仅在没有音频场景使用时处于idle状态,在有音频场景使用时也是频繁的在active和idle状态间切换,而且大部分时间处于idle状态。以codec播放音乐为例,是靠Audio DMA(ADMA)中断来驱动音乐播放的。ADMA中断通常10毫秒一次,来一次ADMA中断就会让ADSP从idle状态变成工作状态。ADSP工作一两毫秒后,任务完成,又回到Idle状态,所以说ADSP在音频场景使用时大部分时间处于idle状态。在ADSP处于idle状态时要判断是否进低功耗模式,在有音频场景使用时不进,没有则要进。具体软件实现时采用投票机制。每种音频场景都有一票,当所有音频场景都投票可进低功耗模式时才进低功耗模式,否则不进。
唤醒流程是指ADSP被唤醒后的软件处理流程。前面的文章(Audio DSP boot 过程)说过ADSP被boot时有入口地址,同样被唤醒时也有入口地址(这个入口地址是ADSP被boot起来后由ADSP去配的),也是在ctr0.c里,如下图:

上图意思是ADSP把被唤醒的入口地址配成了0x80,ADSP被唤醒后就从0x80处开始运行,进入唤醒处理流程。唤醒处理主要有哪些内容呢?上文说过,低功耗模式时memory配的是RETENTION模式,进入低功耗模式后memory里的内容还在,即软件还在,要处理的就是跟硬件相关的。主要是因为ADSP进入低功耗模式后,ADSP下电了,跟硬件相关的配置都没了,需要重新配置一下。硬件的配置主要包括cache的配置,中断控制器的配置等。还有就是在ADSP进入低功耗模式前要记下有哪些中断没有被mask。ADSP被唤醒后,这些中断也要被配成unmask,保持与ADSP进入低功耗模式前的一致。这些说白了就是硬件的配置要还原成ADSP进入低功耗模式前的样子。ADSP收到的唤醒源中断把ADSP唤醒后,中断还pending在那,没被处理。当软件把中断使能后,立刻进入中断服务程序处理,并进而进入后续的处理流程。
下面就以手机先开机然后播放音乐为例看看整个过程,示意如下图:

1, 手机开机,ADSP被AP boot起来,做软硬件的初始化等。由于没有音频场景,ADSP先进idle,再进低功耗模式(LPM)
2, 要播放音乐,AP给ADSP发IPC,把ADSP唤醒,走音乐播放流程。在音乐播放过程中,每个loop内ADSP大部分时间处于idle状态,但是由于有音频场景在,不会进入LPM
3, 音乐播放结束,没有音频场景了,ADSP就从idle进入了LP模式。如果后续又有新的音频场景开始,ADSP又会给唤醒,开始新的音频场景。
过程清楚了后再看怎么调试。我把调试分成了两个阶段,第一阶段是ADSP刚被boot起来后没有音频场景的单步调试,第二阶段是带音频场景的联合调试。第一阶段主要分3步:
1, ADSP被boot起来后,由于无活可干,会进idle,再通过配置寄存器让ADSP进入低功耗模式。通过读相关寄存器看ADSP是否能进低功耗模式。如没进,则要去调查原因,最终要进入低功耗模式。
2, 在ADSP进入低功耗模式后,AP给ADSP发一个IPC,看ADSP是否会被唤醒以及是否会进唤醒流程。同样如果ADSP没被唤醒或者没进唤醒流程,需要去调查,最终要能被唤醒以及进唤醒流程
3, 在唤醒流程中做上文说的一些处理,最后进IPC的中断服务程序。又无活可干,再进idle,再进低功耗模式。
上面这3步就把ADSP能进低功耗模式以及能被唤醒以及唤醒流程处理调好了。然后就是带音频场景的联合调试,期望结果是有音频场景时ADSP被唤醒,音频场景结束后ADSP又进低功耗模式。把每个音频场景都要调试一下后整个调试就算完成了。无音频场景的低功耗处理看上去没什么,但是从理解过程到完成调试是需要花一些时间的,因为它牵涉到硬件以及最底层软件的处理。
智能手机无音频场景使用时Audio DSP低功耗的处理的更多相关文章
- Android智能手机中各种音频场景下的audio data path
上一篇文章(Android智能手机上的音频浅析)说本篇将详细讲解Android智能手机中各种音频场景下的音频数据流向,现在我们就开始.智能手机中音频的主要场景有音频播放.音频录制.语音通信等.不同场景 ...
- Toolbar 和 CollapsingToolbarLayout一起使用时menu item无点击反应解决办法
昨天一直在琢磨为什么Toolbar和CollapsingToolbarLayout一起使用时menu item无点击放应的原因,后来在stackoverflow上一条回答,说可能是Toolbar的背景 ...
- Java 中无返回值的方法在使用时应该注意的问题
Java 中的方法是形态多样的.无返回值的方法在使用时应该规避哪些问题呢? 一.不可以打印调用或是赋值调用,只能是单独调用(非常重要): 二.返回值没有,不代表参数就没有: 三.不能return一个具 ...
- 【原】无脑操作:IDEA使用时,提示"8080端口被占用"的解决
1.问题描述:IDEA使用时,提示"8080端口被占用" Description: The Tomcat connector configured to listen on ...
- Android手机上Audio DSP频率低 memory小的应对措施
我在前面的文章(Android智能手机上的音频浅析)中说过Android手机上有一块专门用于音频处理的DSP,它的特点是频率低(一般几百MHZ).内部memory小(通常不超过100k word).要 ...
- html5之音频、视频(video&audio)
音频&视频 本篇为本人的学习笔记. 在Html5之前,浏览器对于视频和音频的处理并没有一个标准.因此在网页中看到的视频,都是通过第三插件的方式嵌入的,如:QuickTime.RealPlaye ...
- Netty4.0.24.Final 版本中 IdleStateHandler 使用时的局限性
使用Netty在客户端和服务端建立通讯通道,一般来说,一个连接可能很久没有访问,由于各种各样的网络问题导致连接已经失效,客户端再次发送请求时会产生连接异常. 基于这个原因,需要在客户端和服务端之间建立 ...
- bootstrap-datepicker 与bootstrapValidator同时使用时,选择日期后,无法正常触发校验
bootstrap-datepicker 与bootstrapValidator同时使用时,选择日期后,无法正常触发校验 (解决办法) http://blog.csdn.net/biedazhangs ...
- selenium + PhantomJS使用时 PhantomJS报错解决
selenium + PhantomJS使用时 PhantomJS报错解决 在做动态网页爬虫时用到了selenium + PhantomJS,安装好之后运行时报错: UserWarning: Sele ...
- 华为音频编辑服务(Audio Editor Kit),快速构建应用音频编辑能力
音频编辑服务(Audio Editor Kit)是华为为开发者开放的各类场景音频处理能力的集合,汇聚了华为在音乐.语音等相关音频领域的先进技术.音频编辑服务提供基础编辑.伴奏提取.空间渲染.变声降噪等 ...
随机推荐
- IEC101、IEC103、IEC104、Modbus报文解析工具
一.概述 国际电工委员会第57技术委员会(IEC TC57)1995年出版IEC 60870-5-101后,得到了广泛的应用.为适应网络传输,2000年IEC TC57又出版了IEC 60870-5- ...
- 打造企业级AI文案助手:GPT-J+Flask全栈开发实战
一.智能文案革命的序幕:为什么需要AI文案助手? 在数字化营销时代,内容生产效率成为企业核心竞争力.据统计,营销人员平均每天需要撰写3.2篇文案,而传统人工创作存在三大痛点: 效率瓶颈:创意构思到成文 ...
- 3.4K star!全能PDF处理神器开源!文档转换/OCR识别一键搞定
嗨,大家好,我是小华同学,关注我们获得"最新.最全.最优质"开源项目和高效工作学习方法 PDF-Guru 是一款开箱即用的全能型PDF处理工具,支持跨平台文档转换.智能OCR识别. ...
- Java字节流--输出流OutputStream和输入流InputStream
OutputStream和InputStream都是抽象类 OutputStream定义和InputStream定义 OutputStream InputStream public abstract ...
- 【工具】JS脚本|网页任意视频倍速播放(包括MOOC、本地视频、其他的视频)
实际发布时间:2022-12-14 22:54:52. csdn禁止浏览器脚本相关博客了,就只能重新发到这儿了. 2024/12/14更新:更新了常见问题Q&A,可以配合食用. 只要浏览器 ...
- 作业时间之"最早时间和最晚时间"
一.从左往右(小到大)算最早时间 0+2=2 0+3=3 因为3比2大所以选择3(早大晚小),需活动无时间所以不用加 3+4=7 7+3=10 因为13号点有两个 2+5=7 和 11号点的10(虚活 ...
- .NET外挂系列:2. 了解强大的 harmony 注解特性
一:背景 1. 讲故事 上一篇我们简单的聊了下harmony外挂的基本玩法,让大家宏观上感受到了外挂在 .NET高级调试 领域的威力,这一篇我们从 注解特性 这个角度继续展开. 二:harmony 注 ...
- QQ会员首页HTML+CSS
作为一个穷人,唯一一次逛这么久的会员首页还是因为要写最头大的web~苦涩 效果图 源码 <!DOCTYPE html> <html> <head> <meta ...
- Windows平台调试器原理与编写03.单步
调试器原理与编写03.单步-C/C++基础-断点社区-专业的老牌游戏安全技术交流社区 - BpSend.net 单步 TF - 置位(置1 复位就是置0) 单步步入 -- 遇到call便入 单步步过 ...
- 阅读类元服务开发笔记---week2
.markdown-body { line-height: 1.75; font-weight: 400; font-size: 16px; overflow-x: hidden; color: rg ...