首 页文档资料下载资料维修视频包年699元
请登录  |  免费注册
当前位置:精通维修下载 > 文档资料 > 家电技术 > 单元电路介绍 > 其它电路
一套数字音频采集、播放和传输系统的实现
来源:本站整理  作者:佚名  2010-04-08 19:04:25



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……

上一页  [1] [2] [3] 

关键词:

文章评论评论内容只代表网友观点,与本站立场无关!

   评论摘要(共 0 条,得分 0 分,平均 0 分)
Copyright © 2007-2017 down.gzweix.Com. All Rights Reserved .
页面执行时间:84,414.06000 毫秒