络达开发--SideTone配置的來龍去脈

芯片型号:AB1565

功能模块:Side Tone

功能描述:Side Tone是用来把耳机外界的声音导入到耳朵内,从而实现人能听到耳机外的自然声音,最理想的情况是听到的外部声音如同没有配置耳机一样的效果。


图1图2为Side Tone单元的函数调用关系,过程中会配置Side Tone的Filter和通透的增益。基中DTM()为FreeRTOS的一个任务,软件在启动后该任务便会一直运行,并且维护一个名为dtm_queue的本地队列,所有和Side Tone相关的操作命令都会被先发送到该队列,然后由该Task来把命令从队列中提取并做相应的执行,其工作逻辑如图2所示。

图1:Side Tone相关函数调用关系
图1:Side Tone相关函数调用关系

 

图2:SideTone相关消息处理任务
图2:SideTone相关消息处理任务

 

  • Filter

滤波系数是来对声音做EQ处理,比如音色的还原,噪声的消除、抑制或增强等。这些系统,是提前预置在代码中的,当然也可以编程手段来动态修改这些参数,比如从BL导入并存储在指定位置等,SDK中,此系数的位置如图1和图3所示,最终这些系数被写入了寄存器“AFE_SIDETONE_CON0”中。

图3:SDK中内置的Side Tone滤波系数题
图3:SDK中内置的Side Tone滤波系数题

 

那么这个系数的写入又是如何存储的呢?我来再来看芯片的Reference Manual,其中关于AFE_SIDETONE_CON0寄存器的定义,如图4所示,红框标记的即为控制系数写入RAM的相关位。

bit[20:16]为系数的地址,区5个bit位,因此可以知道系数最多只能是2^5=32个(当然实际可以小于32个)。

而bit[15:0]则为系数值(格式为Q1.15),因此在写入时需要依据系数的数量来执行同样次数的写操作。

图4:AFE_SIDETONE_CON0寄存器定义
图4:AFE_SIDETONE_CON0寄存器定义

 

  • 增益

则是调节外界声音透传入耳内的强度,理想情况下该增益应为动态的且有上限的阀值,对较小的声音有放大的功能,对较大的声音进行抑制,从而形成听力保护效果;

无论是filter还是gain,最终都是形成因子写入到AB1656对应的寄存器,即AFE_SIDETONE下面的若干寄存器。

那么gain又是如何写入芯片的呢?如图1所示,其中” dsp_sidetone_set_volume()”及“dsp_sidetone_start_volume_set()”函数即为配置sidetone的增益的相关接口函数,如图5所示。

图5:SideTone接口函数
标图5:SideTone接口函数题

 从图5可以发现,增益值最终被写入了寄存器AFE_SIDETONE_GAIN中,那么该寄存器又是如何定义的呢?我们看图6,可以发现关于增益共有两个:Positive Gain和SideToneGain(暂时还没研究两者的区别)。

图6:SideTone增益配置寄存器
标题图6:SideTone增益配置寄存器

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值