摘要:DSP由于其强大的数字信号处理能力而被广泛应用,而DSP与其他器件的接口方法是设计基于DSP器件的各种系统应重点考虑的问题。本文介绍一种TLV320AIC24型编码解码器与DSP的接口设计方法。给出TMS320C54xx与TLV320AIC24的硬件接口电路和部分软件程序。
关键词:DSP;TMS320C54xx;TLV320AIC24;接口,DMA
1 前言
TMS320C54xx是TI公司生产的具有较高性价比的DSP系列,采用高性能的改进型哈佛总线结构;内含一个40bit的算术逻辑单元(包括一个40bit的筒形移位器和两个独立的加法器)、软件可编程等待状态发生器以及可编程分区转换逻辑电路;同时带有内部振荡器或用外部时钟源的片内锁相环(PLL)时钟发生器;该DSP带有全双工串行口,支持8位或16位传送;同时带有时分多路串行口、缓冲串行口、16位可编程定时器、8位并行主机接口等;可用外部总线进行关断控制,以断开外部数据总线、地址总线和控制信号;数据总线具有总线保持特性。
TI公司的TLV320AIC24型多媒体数字信号编解码器则可提供时分复用串行口(SMARTDM),并可用一个先进的TDM格式同步4线串行口以优化DSP的性能,从而实与流行DSP(如C5000、C6000)和微控制器的无缝连接。SMARTTDM提供了连续数据转换和再配置编程两种模式(ADC/DAC和控制数据),可使TLV320AIC24 DSP编码器和DSP数据转换的带宽最大化(只对ADC/DAC数据)。在一般的操作中,它会自动发现串行接口中的编码个数并调整时钟数以与编码数据相匹配。而在TURBO操作中,它可以保持相同的时钟数值,但位转换率最大到达25MHz,允许其他的DSP外围串行器件在相同的采样周期内分离相同的串行总线。TLV320AIC24支持任意基于SMARTDM的器件级联,实现多通道编码(最多可有8路TLV320AIC24编码级联到单个串行口),它所支持的3种串行口配置为单机主、单机从和级联主从模式。
TLV320AIC24还提供两种16位Σ-△A/D通道和16位Σ-△D/A通道,可连接到手机、耳机、麦克风等外部设备;其嵌入的模拟和数字侧音、反偏滤波器、可编程输入输出增益控制等电路楞为麦克风提供前置放大和150Ω负载、硬件/软件控制的掉电模式等功能;TLV320AIC24具有和TMS320C54xX完全兼容的电源电压;其可编程最高采样率达26ks/s(用片上IIR/FIR滤波器)和104ks/s(用IRR/FIR侧通);在8ks/s的采样率下,它们的片上FIR可产生87dB的动态范围(对ADC)和92dB的动态范围(对DAC);ADC和DAC滤波器符合G.711和G.722协议。此外,TLV320AIC24还提供了一个灵活的主机接口(一个可以编程为标准工业I2C总线协议或S2C总线协议的2位串行口)。
2 硬件接口
DSP McBSP和TLV320AIC24的接口方式为4路SMARTDM信号,分别为帧同步、串行数据输出、串行数据输入和时钟源,它们分别连接到FSX/FSR、DR、DX、CLKX/CLKR。在级联模式下,DSP可通过主器件的FS端接收帧同步信号,主器件的FDS端连接到第一级从器件的FS端,而将第一级从器件的FSD连接到第二级从器件的FS端,如此类推。最后一级的FSD通过电阻器连接到3.3V电源输入端。图1给出级联TLV320AIC24和DSP的连接方式。
3 软件编程
TLV320AIC24的每一个通道都含有6个控制寄存器,可以编程所需的操作模式。在控制帧模式下,通过DIN引脚可以对所有的寄存器进行编程。在一个帧同步延时后,新的配置生效。上电后,TLV320AIC24被默认为编程模式。设置控制寄存器1到第6位可用于转换连续数据模式。如果采用15+1数据格式,那么,把DIN的最低位设置成1可将连续数据传输模式转换成编程设置模式。其格式如下:
其中,D15-D13位为控制寄存器地址,操作时可与位D7-D0所携带的数据一块写入;位D12用于确定对所寻址寄存器的读写;位D11用来确定是否选择广播模式;位D10-D8永远设置为1。
下面给出编码器寄存器的编程例子。其中,DSP通过DMA连接到SMARTDM以对TLV320AIC24进行初始化。DMA是指在不需要CPU干预的情况下,在映射存储区的不同区间传输数据的技术。DMA可支持上存储器、片上外设(包括EHPI8)或是外部设备间无CPU负责的独立数据交换。
(1)初始化
SeriaIPortOInit(); //串行口初始化TLV320AIC24
DMAC_init(); //DMA初始化
DMAC_ch_enable(DMAC_CH_0);
DMAC_ch_enable(DMAC_CH_1);
*IMR=DMAC0 |DMAC1; //开DMA中断
*IFR=0xffff;
SeriaIPort0_TXRX_Enable(); //重新设置串行口0配置函数
Asm(" rsbx intm"); //使能中断
......;
(2)DMA0中断服务子程序,进行数据接收
interrupt void DMAC0_isr()
{if (mode==1)
{if(rx_full==0)
{if(receive==0)
{*(DMSA)=0;//配置通道0
*(DMSDI)=(unsigned short)MCBSP0_DRR1;//通道源地址寄存器配置为MCBSP0的数据接收寄存器的地址//
*(DMSDI)=(unsigned short)dmac_ch0B;//DMDST0
.0通道目标地址寄存器
*(DMSDI)=0x07; //DMCTR0.0通道单元计数器寄存器
*(DMSDI)=0x1000;//DMMCR0-0通道传输模式控制寄存器
receive=1;
}
else
{......;
receive=0;}
dmacount0++;
rx_full=1;}
DMAC_ch_enable(DMAC_CH_0);//使能DMA通道0
}
else
{if(frame>=4)
{......; //配置通道0
}
else
{......; //配置通道0
}
DMAC_ch_enable(DMAC_CH_0);//通道0使能
}}
(3)用DMA初始化TLV320AIC24子程序
short dmc_ctrl[CTRL_BUF_SIZE]={0,0,0,0,
AIC_RESETs,0,0,0,0,0,0,AIC_Ms,AIC_NFs,
AIC_DACs,AIC_MUTE_SITONs,0,0,0,0,
AIC_CH1_IN,AIC_CH2_IN,AIC_CH1_IN,
AIC_CH2_IN,0,0,0,0,AIC_CH1_OUT,
AIC_CH2_OUT,AIC_CH1_OUT,AIC_CH2_OUT,0,0,
0,0,AIC_ADCs,AIC_16BITs,0,0};
void DMAC_init()
{*(DMPREC)=0x8380;配置通道优先工作寄存器,初始化所有通道为禁止和低优先级
//设置通道0
......
//设置通道1
*(DMSA)=5;
*(DMSDI)=(unsigned short)dmac_ctrl+1;//通道1源地址寄存器
*(DMSDI)=(unsigned short)MCBSP0_DXR1;//通道1目标地址寄存器配置为MCBSP0的数据发送寄存器//
......
//设置单元和帧地址索引寄存器0
......
}
4 结束语
本文介绍的硬件设计方法和软件编程可以完成语音信号的采集与回放,从而实现语音数据的采集、处理和存储等功能。该方案能够满足主流语音处理产品的要求,可以广泛应用在各种相关设备中。