完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
TLV320AIC23(以下简称AIC23)是TI推出的一款高性能的立体声音频Codec芯片,内置耳机输出放大器,支持MIC和LINE IN两种输入方式(二选一),且对输入和输出都具有可编程增益调节。AIC23的模数转换(ADCs)和数模转换(DACs)部件高度集成在芯片内部,采用了先进的Sigma-delta过采样技术,可以在8K到96K的频率范围内提供16bit、20bit、24bit和32bit的采样,ADC和DAC的输出信噪比分别可以达到90dB和100dB。与此同时,AIC23还具有很低的能耗,回放模式下功率仅为23mW,省电模式下更是小于15uW。由于具有上述优点,使得AIC23是一款非常理想的音频模拟I/O器件,可以很好的应用在随声听(如CD,MP3……)、录音机等数字音频领域。
AIC23的管脚和内部结构框图如下: 从上图可以看出,AIC23主要的外围接口分为以下几个部分: 一. 数字音频接口:主要管脚为 BCLK-数字音频接口时钟信号(bit时钟),当AIC23为从模式时(通常情况),该时钟由DSP产生;AIC23为主模式时,该时钟由AIC23产生; LRCIN-数字音频接口DAC方向的帧信号(I2S模式下word时钟) LRCOUT-数字音频接口ADC方向的帧信号 DIN-数字音频接口DAC方向的数据输入 DOUT-数字音频接口ADC方向的数据输出 这部分可以和DSP的McBSP(MulTI-channel buffered serial port,多通道缓存串口)无缝连接,唯一要注意的地方是McBSP的接收时钟和AIC23的BCLK都由McBSP的发送时钟提供,连接示意图如下: 二. 麦克风输入接口:主要管脚为 MICBIAS-提供麦克风偏压,通常是3/4 AVDD MICIN-麦克风输入,由AIC结构框图可以看出放大器默认是5倍增益 连接示意图如下: 三. LINE IN输入接口:主要管脚为 LLINEIN-左声道LINE IN输入 RLINEIN-右声道LINE IN输入 连接示意图如下: 四. 耳机输出接口:主要管脚为 LHPOUT-左声道耳机放大输出 RHPOUT-右声道耳机放大输出 LOUT-左声道输出 ROUT-右声道输出 从框图可以看出,LOUT和ROUT没有经过内部放大器,所以设计中常用LHPOUT和RHPOUT,连接示意图如下: 五. 配置接口:主要管脚为 SDIN-配置数据输入 SCLK-配置时钟 DSP通过该部分配置AIC23的内部寄存器,每个word的前7bit为寄存器地址,后9bit为寄存器内容。具体方法和寄存器具体内容见后。 六. 其他:主要管脚为 MCLK-芯片时钟输入(12.288M、11.2896M、18.432M、16.9344M) VMID-半压输入,通常由一个10U和一个0.1U电容并联接地 MODE-芯片工作模式选择,Master或者Slave CS-片选信号(配置时有效) CLKOUT-时钟输出,可以为MCLK或者MCLK/2(详见寄存器配置) DSP与AIC23的连接 设计中DSP采用了TI的C5409,这是一款性价比高,外设资源丰富,耗电量低,处理能力强的16位DSP,在实际应用中较为流行。 C5409有三组可通过寄存器灵活配置的McBSP同步串口,与AIC23的连接主要使用这些串口。 一. 与AIC23数字音频接口的连接 AIC23的数字音频接口支持I2S模式(一种通用的音频格式),也支持DSP Mode模式(专为与TI的DSP连接模式)。两种模式的时序如下图: I2S模式 DSP Mode模式 DSP与AIC23的连接可以采用I2S模式也可以采用DSP模式,区别仅在于DSP的McBSP帧信号的宽度。前者的帧信号宽度必须为一个字(16bit)长,而后者的帧宽度可以为一个bit长,比如在字长16bit(即左右声道的采样各为16bit),帧长为32bit的情况下,如果采用I2S,帧信号宽度应为16bit;而采用DSP Mode帧信号宽度1bit即可。 为了与AIC23通信,DSP的串口时钟也应该正确的设置。DSP的McBSP时钟为了减少外围电路通常都选择由内部CPU时钟分频得到,比如在AIC23采样速率为8K的情况下,McBSP串口时钟应为8×32=256K,这时,DSP工作时钟/256K=需要设置的分频因子。 需要注意的是,DSP的串口分频因子最大为0xff(256),所以如果采用内部时钟分频的办法,DSP工作时钟不能超过64M。 二.与AIC23配置接口的连接 AIC23的配置接口支持I2C模式,也支持SPI模式。通常比较简单的办法是利用DSP的一个McBSP用SPI模式跟AIC23连接。但是有些时候,如果DSP的McBSP串口资源比较紧张(比如需要跟近端RS-232和远端RS-485连接),也可以通过DSP模拟I2C总线与AIC23连接。下面简单介绍这两种方法: SPI时序图如下: 这种模式的特点是只在片选信号有效时锁存进数据。由于也是同步串口,所以通过配置McBSP为Clock Stop Mode(时钟在帧信号有效时产生,其他时间没有时钟信号)可以无缝与之连接。这时,McBSP的帧信号连接SPI的CS信号,时钟和数据信号与SPI一一对应。这种连接只需设置McBSP的寄存器,使用比较简单可靠。 I2C时序图如下: C5409没有I2C接口(TI的C5509有),但是可以利用DSP的GPIO(General Purpose Input/Output)来实现I2C时序。C5409有8个HPI(Host Port Interface)管脚可以选择作为GPIO使用(上电时HPIENA管脚或者HPI16管脚为低),这样我们可以利用其中的两个管脚来作为I2C中的SCL和SDA。在I2C中SDA是双向管脚,而DSP的GPIO的方向要通过寄存器来配置为输入或者输出,所以在实现I2C总线时,要经常在需要的时候变换GPIO(作为SDA的那个)的方向。对GPIO的操作是通过寄存器来完成:当设为输出时,向寄存器写入要输出的值;设为输入时,从该寄存器读入管脚上的值。 在实现I2C总线时,还需注意下面几点:作为SDA的那个GPIO应该接上拉电阻;AIC23只可写不可读;AIC23的设备地址当CS为低时是0011010b,CS为高时是0011011b。 DSP的软件设计 DSP需要处理来自和发向AIC23的数据,从而达到采集和播放声音。 从上面的分析我们知道,这些数据都是通过DSP的McBSP交换的。McBSP可以有三种方式跟CPU通信:每收到或发送一个单元,置标志位,CPU轮询此标志位;每收到或发送一个单元,给CPU发送中断;通过DMA收到或发送完一组单元,再给CPU中断。通常,为了减轻CPU负担,都采用第三种方法。 采用DMA的方式,即串口每发送或接受到一个单元,都会自动触发DMA将其搬送到一个内部的Buffer,等Buffer满了再通过中断方式告诉CPU处理。这时DMA最好采用ABU(Auto Buffering)模式,在这种模式下,DMA会在两个Buffer(其实是一个大Buffer的前一半和后一半)之间自动切换,每个Buffer满了(接收)或空了(发送)都会给CPU发出中断,在CPU处理这个Buffer的时候,DMA会自动去操作另一个Buffer。采用这种方式可以有效防止Buffer中的数据在串口速率较高时被新数据冲掉的问题。 在DMA的中断服务程序中为了可靠可以把这个Buffer的数据再拷贝到另一个待处理的空间,即两级Buffer,然后置标志位,CPU在主程序中查询标志位然后作出相应的处理。DMA操作的Buffer可以通过寄存器配置,Buffer的大小和起始位置应设置正确。在指定Buffer的起始位置时应该注意,起始位置应该为大于Buffer大小的下一个2的整数幂的倍数。例如,在8K、16bit采样的情况下,以20ms数据为Buffer大小,那么一次处理的数据是8000×32×0.02=5120bit=320word。所以,DMA的Buffer应为640word(两个320word Buffer)大小,而Buffer的起始地址应该为1024=2^10》640的整数倍,如0x7000,0x7400…… DSP与异步串口间的通信 DSP与PC机交换声音数据可以通过异步串口实现(近端RS-232或者远端RS-485再到RS-232)。下面简单介绍如何利用DSP的McBSP实现RS-232协议从而跟PC机的串口通信。 首先,因为McBSP和RS-232电平不同,之间需要加一个MAX232这样的电压转换芯片。同时,DSP的McBSP是一个三线同步串口,而RS-232只需一根数据线(单向)即可通信,所以在实现异步串口时,首先硬件连接应该如下: 从上图可以看出, McBSP串口的接收帧信号和接收数据线连在一起,这样做的目的是为了利用异步帧的开始位(低有效)来给McBSP一个帧信号。显然,这时DSP的帧信号应设置为低有效且接收延时应设置为‘1’。 同步-异步转换的基本原理就是对异步信号过采样得到同步信号,例如一般是对异步信号的每个bit用同步信号的一个字来表示(即16个‘1’-0xffff或16个‘0’-0x0000)。可参看下图(上边为异步信号,下边为同步信号): 串口的发送和接收都采用DMA方式,Buffer的大小为:1+8+1(无校验位,结束位长度为1)=10word。同步-异步具体转换在软件上实现: 对于发送来说,较为简单,就是对每一个Byte的每个bit用一个word(16bit)进行代替,加上开始位、结束位。然后判断是否可以发送(通过发送完毕标志),如果可以则把这10个word放入Buffer,启动DMA即可。在发送中断服务程序中需要作的是停止发送DMA,并置发送完毕标志有效。 接收相对发送麻烦一些,需要对接收到的每一个字进行判断从而恢复每一个bit,例如可以认为收到0000 1111 1111 0000b为‘1’,其余为‘0’。过滤掉开始位(‘0’)和结束位(‘1’),恢复的8个bit就合成一个Byte。这些应该在接收中断服务程序里面做。 还有就是同步串口时钟的选择,一定要稍大于设计速度,比如,在跟57.6K的RS-232通信时,时钟应该为57.6×16=921.6K,实际配置串口分频寄存器时应该稍大于这个速度,否则就可能由于没有正确检测到停止位而出现错误。 更详细的同步-异步转换设计流程跟我们的主题无关,有很多文章有具体的描述,这里就不主要讨论了。 至此,一个较为完整的系统就建立了。此系统可以完成对语音或者音频信号的采集和播放,同时通过DSP内部的压缩算法,如g.729或者MP3传给PC机进行储存和传输。 附录: AIC23的内部寄存器中的一些主要设置bit: 1. LINE IN左声道音量控制寄存器: LIM:静音 LIV【4:0】:音量控制 2. LINE IN右声道音量控制寄存器: RIM:静音 RIV【4:0】:音量控制 3. 耳机左声道音量控制寄存器: LHV【6:0】:音量控制 4. 耳机右声道音量控制寄存器: RHV【6:0】:音量控制 5. 模拟通道控制寄存器 BYP:Bypass模式 INSEL:ADC输入选择,0-LINE IN、1-麦克风 MICM:麦克风静音 6. 数字通道控制寄存器 DACM:DAC静音 ADCHP:ADC高通滤波器开关选择 7. 省电控制寄存器 OFF:Device Power off CLK:Clock Power off OSC:Oscillator Power off OUT:Outputs Power off DAC:DAC Power off ADC:ADC Power off MIC:MIC Power off LINE:LINE IN Power off 8. 数字接口格式寄存器: MS:工作模式Master or Slave LRSWAP:DAC左右声道交换 LRP:I2S模式下,LRCIN低左声道或右声道 DSP模式下,MSB在LRCIN有效后1st或者2nd BCLK沿出现 IWL【1:0】:采样Bit长度 FOR【1:0】:DSP格式,即帧信号后跟左右声道两个字 I2S格式,帧信号占空比50%,高低各是左右声道 9. 采样率寄存器: CLKIN:时钟输入选择,0-MCLK,1-MCLK/2 CLKOUT:时钟输出选择,0-MCLK,1-MCLK/2 10. 数字接口激活寄存器: ACT:激活开关 11. Reset寄存器 RES:写入0重启 |
|
|
|
只有小组成员才能发言,加入小组>>
791 浏览 0 评论
1151 浏览 1 评论
2527 浏览 5 评论
2860 浏览 9 评论
移植了freeRTOS到STMf103之后显示没有定义的原因?
2710 浏览 6 评论
keil5中manage run-time environment怎么是灰色,不可以操作吗?
1070浏览 3评论
193浏览 2评论
455浏览 2评论
368浏览 2评论
M0518 PWM的电压输出只有2V左右,没有3.3V是怎么回事?
453浏览 1评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-22 09:25 , Processed in 1.032707 second(s), Total 79, Slave 60 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号