基于CCS和DSK5402板的音频采集和回放程序设计
下:软件仿真器和与硬件开发板相结合的在线编程。前者可以脱离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本身的特点,从一开始就需要认识到开发过程的复杂性。
- MS320VC5402 HPI接口与PCI总线接口设计(10-25)
- TMS320VC5402 DSP与串行AD73360 A/D转换器的接口设计(08-12)
- 详细阐述UCD3xxx 系列数字电源控制器烧写常用的两种十六进制文件格式:X0和Intel Hex(07-28)
- 一种基于CCSDS AOS的虚拟信道动态调度方案(07-31)
- 基于CCS的DSP片外Flash直接烧写设计(09-10)
- 12位串行A/D转换器MAX187的应用(10-06)