基于CCS和DSK5402板的音频采集和回放程序设计
扫描二维码
随时随地手机看文章
TMS320VC5402(以下简称C5402)是TI(德州仪器)公司1999年10月推出的性价比极高(目前批量价格约人民币40元)的定点数字信号处理器(DSP)。指令执行速率高达100MIPS,已经广泛用于实时语音处理、个人数字助理(PDA)和数字无线通信等嵌入式系统。TLC320AD50C(简称AD50)是TI公司生产的SIGMA-DELTA型单片音频接口芯片(AIC)。而DSK板是TI公司的一种DSP仿真/开发板,本文着重介绍了利用CCS在DSK板上进行实时语音处理的软件设计过程。
1.C5402及其多通道缓冲串口
C5402硬件优点。改进的哈佛结构解决了冯诺伊曼(Von-Neumann)结构中高速数据传输时的传输通道上的瓶颈现象;内部多总线结构保证在一个机器周期内可以多次访问程序空间和数据空间;指令执行时的多重流水线结构将指令周期降低到了最小值;多处理单元可以在一个指令周期内同时进行运算,而这种结构恰好满足了数字信号处理中的一些特殊要求如FIR、IIR、FFT等运算。尤为值得一提的是C5402的软件特点,7种有效灵活的寻址方式,仅为10ns的指令执行周期,还有一些特殊的运算指令更好地满足了数字信号处理中特有的运算需要。
C5402具有高速的,全双工串行口,可用来与系统中的其他C54x器件,编码解码器,串行A/D,D/A转换器以及其他的串行器件直接接口。这两个串行口均为多通道缓冲串行口McBSP(Multi-channel Buffered Serial Port)。它支持全双工通信,双缓冲数据寄存器,允许连续的数据流。可以与工业标准的编/解码器,AICs接口。支持多种方式的传输接口如T1/E1帧协议、MVIP帧方式、H.100帧方式、SCSA帧方式、IIS兼容设备等。可与多达128个通道进行收发。支持传输的数据字长可以是8bit,12bit,16bit,20bit,24bit或32bit。内置μ-律和A-律压扩硬件。
McBSP在结构上可以分为一个数据通道和一个控制通道。如图1所示:
数据通道完成数据的发送和接收。控制通道完成的任务包括内部时钟的产生,帧同步信号产生,对这些信号的控制以及多通道的选择等。控制通道还负责产生终端信号送往CPU,产生同步事件通知DMA控制器。
图1 McBSP的结构
象51/96系列单片机一样,对C5402串行口的操作也是通过设置各控制寄存器来进行的。这些控制寄存器有串行口控制寄存器SPCR1/2;接收控制寄存器RCR1/2;发送控制寄存器XCR1/2;多通道寄存器MCR1/2等。需要注意的是,要对某一控制寄存器寻址,只能采用加子地址寻址方式。
2. AD50的一般说明
AD50是一款SIGMA-DELTA型单片音频接口芯片(AIC)。它内部集成了16位的D/A和A/D转换器,采样速率最高可达22.05kb/s,其采样速率可通过DSP编程来设置。在DAC之前有一个插值滤波器以保证输出信号平滑和ADC之后有一个抽取滤波器以提高输入信号的信噪比。
AD50内部有7个数据和控制寄存器,用于编程控制它们的工作状态。
寄存器0:空操作寄存器。
寄存器1: 软件复位
软件掉电
选择16位或15位工作方式
硬件或软件二次通信请求方式的选择
寄存器2:使能ALTDATA输入端
为ADC选择16/15位方式
寄存器3:选择FS与FSD之间延迟SCLK的个数
告诉主机有几个从机被联上
寄存器4:为输入和输出放大器选择放大器增益
选择N来设置采样频率,fs=MCLK/(128*N)或MCLK/(512*N)
在MCLK输入端使能外部时钟输入并旁通内部的PLL
寄存器5,6:保留
AD50与C5402之间的数据传送采用串行方式,包括两种传输模式:16位和15+1位传输模式。15+1位模式时,其中的D0位表示二次通信。它们各自的时序如下:
注:A,16位或15位工作方式是通过控制寄存器2来编程实现的。
B,M/S用来表明15位的数据是来自主机还是从机。
C,最高位MSB(D15)在SCLK第一个周期的下降沿稳定,最低位(D0,M/S)在SCLK第16个周期的下降沿稳定。
图 2 仅有首次通信时的ADC通道时序
注:A,二次通信时的M/S位(DS15)用于表明在设置了读位后寄存器数据(地址和内容)是来自主机还是从机。在寄存器读期间,DS7-DS0位是指定寄存器的内容,在寄存器写期间,DS7-DS0为0。
图3 有首次通信和二次通信的ADC通道时序
AD50的数据传输模式和采样速率都可以通过DSP对其控制寄存器的编程来实现,因此,在许多场合下,AD50都作为DSP的AIC来实现音频处理。
3.CCS和DSK
CCS(Code Composer Studio)为TI公司的DSP集成开发环境。它提供了环境配置、源文件编辑、程序调试、跟踪和分析等工具,可以帮助用户在一个软件环境下完成编辑、编译链接、调试和数据分析等工作。与TI提供的早期软件开发工具相比,利用CCS能够加快软件开发进程,提高工作效率。
CCS一般工作在两种模式下:软件仿真器和与硬件开发板相结合的在线编程。前者可以脱离DSP芯片,在PC机上模拟DSP的指令集与工作机制,主要用于前期算法实现和调试。后者实时运行在DSP芯片上,可以在线编制和调试应用程序。
DSK板是一块需要外部提供+5VDC电源的独立的开发板,在板线性电压调整器提供1.8VDC的DSP内核电压,3.3VDC数字和5VDC模拟电压。它提供低功耗的、标准的、独立的C54X系列开发平台,允许用户为C54X系列DSP评估和开发应用程序。DSK板上的核心当然就是100MHz的C5402 DSP,还有两片AD50,它们占用了DSP的两个McBSP,其中的一片是本文用到的即用于采集外部音频信号(使用McBSP1),另一片则与标准电话线相接口(使用McBSP0)。
值得一提的是DSK板的在板接口十分丰富,有25针并行接口,9针串行接口,JTAG仿真口,电话 DAA接口,麦克风/扬声器 接口,还有扩展接口用于扩展存储器和外围电路。这些接口极大地方便了DSP开发者的在板开发。本文所涉及的程序设计是通过25针的并行口将主机和DSK板连接起来的。
4.软件设计
本文所设计的程序要完成的功能是通过麦克风接口进行语音信号的采集并实时地通过扬声器接口回放出来。
4.1 通信格式的研究
AD50C有两种通信格式:首次通信和二次通信。
首次通信格式的16位都用来传输数据。ADC的数据长度由寄存器2的D4位决定。启动和复位后默认值为15+1位模式,最后一位用于请求二次通信(D0:0表示无操作,1表示请求二次通信)。当然,二次通信也可以由硬件的FC引脚产生,本文不作讨论。下图为首次通信的数据格式:
图4 首次通信的数据格式
二次通信则用来初始化和设置AD50C的内部寄存器的值。二次通信时DSP可通过向DIN写入寄存器的值,也可以从DIN读出寄存器的值。二次通信的数据格式如下:
图4 二次通信的数据格式
由图可以看出,DS13位控制读写,DS12~8为寄存器的地址,DS7~0为寄存器的值。系统复位后,必须通过DSP的DX口向AD50C的DIN写数据以初始化各控制寄存器,如AD转换只用到寄存器1,寄存器2和寄存器4。
4.2 程序流程
图5示出了CCS配置的主程序源文件(.c或.asm)的设计流程
图5 主程序设计流程
当然,要使用CCS在DSK板上运行某个程序,光有源文件的主程序(.c或.asm)是不够的,还需要配置中断向量表(.asm)和命令链接文件(.cmd),在一些特殊的场合还需要配置其他的文件。主程序当然是整个程序的核心,它的作用涉及数据的读/写和具体的处理过程以及中断的设置、寄存器的配置等;中断向量表主要作用是告知程序中断跳转的位置,显而易见,如果在主程序中已经设置,则不再需要配置中断向量表;命令链接文件(.cmd)的主要作用是分配存储空间,比如存储器的第0页分配作程序空间,第1页分配作数据空间,以及各个段将要放在哪儿(如.text段放在数据空间),这个文件对每个工程来说都是必须的。
4.3 程序设计
从上面的程序流程中,我们可以看到,要完成预定的功能,首先要初始化DSP的串行口和AIC,然后的工作就是开辟缓存区以便将输入的数据存储起来等待进一步处理如滤波、DA转换等。限于篇幅,下面只列出了本文要实现音频回放功能的几个关键程序段。
一.主程序:
在程序中要定义诸多的变量以及所需要包含的头文件和库文件在此略。
5.CCS运行结果
待程序设计好之后,将其添加到一个新建的工程里编辑、调试,直到编译、构建通过并生成.out文件,然后装载.out文件。这样就可以运行了。为了验证程序是否已正常运行,可以在麦克风/扬声器接口分别接上话筒和小音箱,在对着话筒说话时,将可以从小音箱中听到。同时,也可以在CCS中打开观察窗口、寄存器窗口以及图形显示窗口。下图为音频输入时某一时刻的图形显示和寄存器的值。
图6. CCS运行窗口
事实上,在程序调试过程中经常会遇到这样或那样的问题,一般的方法是采用单步执行的方式来调试。而且,由于DSP本身的特点,从一开始就需要认识到开发过程的复杂性。