DIY编程器网

 找回密码
 注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 93|回复: 0
打印 上一主题 下一主题

一套数字音频采集、播放和传输系统的实现

[复制链接]
跳转到指定楼层
楼主
发表于 2012-1-21 23:45:49 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
TLV320AIC23简介 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重启
                          
                       
                          
                               
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友 微信微信
收藏收藏 分享分享 支持支持 反对反对
您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|文字版|手机版|DIY编程器网 ( 桂ICP备14005565号-1 )

GMT+8, 2025-11-25 06:05 , 耗时 0.101003 秒, 18 个查询请求 , Gzip 开启.

各位嘉宾言论仅代表个人观点,非属DIY编程器网立场。

桂公网安备 45031202000115号

DIY编程器群(超员):41210778 DIY编程器

DIY编程器群1(满员):3044634 DIY编程器1

diy编程器群2:551025008 diy编程器群2

QQ:28000622;Email:libyoufer@sina.com

本站由桂林市临桂区技兴电子商务经营部独家赞助。旨在技术交流,请自觉遵守国家法律法规,一旦发现将做封号删号处理。

快速回复 返回顶部 返回列表