1、实验七、CODEC(模数/数模转换)一、实验目的 1. 熟悉DSK板的结构和设置(DSK板注意事项在第2页);2. 掌握利用CODEC进行AD/DA转换;3. 熟悉McBSP, DMA的使用;4. 掌握C和汇编混合编程封装具体实现。二、实验设备 1集成开发环境CCS 25402DSK实验板 3. 实验代码: a). 混合编程:codec_c.h(.h、.h54均由程序自动加载,可不加,后同), dsp_cnst.h54, codec.s54, codec_c.c, rts.lib和codec_c.cmd,c5402_dsk.gel(同上用来做gel初始设置, c5402_dsk.gel与 c5
2、402.gel稍有区别,注意比较其中的异同)。b). 汇编(时间多的同学做):codec_cnst.h54, dsp_cnst.h54, macro.h54, codec_init.s54, dsp_init.s54, main.s54和codec.cmd,c5402_dsk.gel(说明同前)。三、实验内容及步骤1. 阅读理解McBSP, CODEC和DMA的相关文档 2. 阅读和理解相关实验代码 3. 本实验由于用到DSK板,环境设置与前不同,要特别注意。打开CCS前,用并口电缆将TMS320VC5402DSK与PC机相连,出现发现硬件提示,安装驱动(驱动程序在D:DSPdriver500
3、0。一般会要求装3次,2次装USB,driver5000USBDevice目录,如无则可跳过;1次装driver,即 driver5000中setup.exe,注意driver驱动的安装路径要求与CCS的安装路径一致,故要先找出CCS的安装目录)。4. 接通DSK板电源,配置工作环境: 双击打开Code Composer (Studio)配置程序,如图:点击“Clear”按钮,清除原有配置。然后,在列表框“Available Configurations”中加亮“ICETEK-5100 USB Emulator”选项。如图中圆圈所示:,点击对话框中的“Import”按钮,然后点击“Save a
4、nd Quit”按钮,退出并确认同时打开CCS主程序。5. 建立项目,添加代码,编译并连接,各事项如下: a) 混合编程中改设置:Build option子菜单linker中Basic项Autoinit Model 改为Load-time Initialization或Run-time Initialization。用No Initialization编译不过,有1 Errors, 1 Warnings。为: error: symbol referencing errors undefined first referenced symbol in file pinit D:Program Fi
5、lesTImyprojects.lab5651_codecCrts.lib cinit D:Program FilesTImyprojects.lab5651_codecCrts.lib warning: codec_c.c, line 63: warning: statement is unreachable 修改后只有1 Warnings,同上,但是可以做出实验结果。 b) 汇编编程中: Build option子菜单linker中Basic项Autoinit Model 则可用No Initialization,用load-time Initialization或Run-time Ini
6、tialization将有1 Warnings,为:warning: entry point other than _c_int00 specified,都可做出实验结果。6. Build得到.out程序,然后加载程序并调试,7. 输入声音信号或自己的语音并听取DA端输出。四、实验结果和提示 1. DSK实验板上有两块CODEC(编译码器)芯片,一块与DAA口相联,另一块与音频模块相联。5402有两个McBSP口,在DSK板上的缺省设置为McBSP0的信号源为DAA,McBSP1的信号源为音频模块。如果想更改缺省设置必须写相应的CPLD寄存器,具体情况请参考数字信号处理器开发实践4.2.3节。
7、本实验中使用了音频模块作为输入输出端口,因此实验中使用的是相应的CODEC及McBSP1口。 2. 使用CODEC必须设置相应的控制寄存器,实验使用的TLC320AD50C共有7个寄存器,其中4个为控制寄存器,要写这些控制寄存器必须将CODEC切换到第二串行通信方式,切换方式有两种:硬件方式和软件方式。本实验采用了硬件方式,这样必须将FC在FS的上跳沿前拉高,然后CODEC会在128个SCLK后切换到第二串行通信,然后就可以向CODEC发送控制字。具体可参阅数字信号处理器开发实践5.1.2及5.1.3节。 3. 要设置CODEC必须通过McBSP1口发送数据,为使McBSP1口正常工作要设置相
8、应的控制寄存器,McBSP1的15个控制寄存器采用同址访问的方式进行访问,将要访问的寄存器的子地址写入子地址寄存器SPSA1后再访问同一个数据寄存器即可。具体控制寄存器的设置请参阅数字信号处理系统的应用和设计5.4.2节。要注意的是由于板上McBSP1口与CODEC相联时FS, CLK信号均由CODEC驱动,所以相应的管脚必须设置为输入脚并置好对应的标志位,可以参考实验代码中的寄存器参数注释。 4. 音频信号经CODEC采集后通过McBSP再由DMA通道送往数据区缓冲区,这样可以在不影响CPU的情况下完成数据的传输。5402的DMA共有6个通道,每个通道有5个独立的控制寄存器,此外还共享10个
9、全局寄存器。由于全局寄存器中有四个重载寄存器,可以对1个通道实现自动初始化,这样可以很方便的对输入(或输出)信号进行连续传输。由于输入输出必须占用两个DMA通道,这样就必须对另一个通道手动重载,这些在中断中完成。由于5402中断资源有限,DMA中断是与其他外设中断复用的,这个通过DMPREC寄存器中的中断复用位进行设置。对以上这40个寄存器的访问也采用与McBSP相同的同址访问方式。具体设置请参阅数字信号处理系统的应用和设计5.5.2节和实验代码中的寄存器参数注释。 5. 要实现数据连续的数据采集和发送必须在数据缓冲区开辟两块区域交替使用,为了辨别使用哪块区域要设置一个相应标志位,这就是常用的
10、乒乓法。在DMA中断处理程序中要根据此标志位更新缓冲区地址。 6. 数据输入的DMA通道中断后必须对输入数据进行处理,然后送入输出缓冲区,这就要在中断中设置一个中断标志位,然后在主程序中查询此标志位判断是否要进行数据处理。本实验中没有对数据进行任何处理直接送入输出缓冲区,但是可以很方便地加入各种信号处理代码。 7. 将汇编程序分模块封装成C函数后可以使整个流程简洁明了,一目了然。同时留下的接口可以让用户很方便地对CODEC进行设置并加入自己想要采用的信号处理代码。在混合编程中要注意的是函数名和变量在C和汇编中的命名规则;C语言接口的汇编函数可以自由使用的寄存器和使用前必须先保存的寄存器;C语言
11、中的状态标志位缺省值以及C语言和汇编的相互调用通过堆栈来进行参数和返回值的传递,同时通过堆栈可以方便的实现局部数据的使用。具体情况可以参阅数字信号处理系统的应用和设计7.1节。 五、实验思考题:1、整个语言程序是如何实现的?答:整个语言程序由主程序和子程序构成,主函数中由亮灯程序、延时程序、初始化程序、CODEC程序等,子函数中是各函数的定义,还有中断函数。音频信号经CODEC采集后通过McBSP再由DMA通道送往数据区缓冲区,CODEC 中的A/D 出来的语音采样数据由串行口ISR (中断服务控制) 通过DSS_ rxP ipe触发软件中断, 在这里语音采样数据被编码存储, 然后再被解码通过
12、DSS_ txP ipe 发送至串行口ISR , 经由CODEC 中的D/A 可以播放出来。2、语言程序由哪个模块组成?答:语言程序由语音模块组成,进行语音信号的处理。3、如果要对语音进行处理的话,可以在哪个地方添加处理程序?答:在_enable_codec:函数中可以添加处理程序,如图所示:4、比较C5402.gel和CS402_dsk.gel的区别?答:在C5402.gel文件中;在CS402_dsk.gel文件中;由上两图可知:两个gel文件中SWWSR中地址不同,还有在在CS402_dsk.gel文件中添加了语句SWWSR = SWWSR_VAL。六:实验总结:这次实验主要是了解了熟悉DSK板的结构和设置,利用CODEC进行AD/DA转换,说话之后就可以听到自己说的话,一个方法可以是c编的,也可以是用汇编编程序。实验不难,过程很顺利。
©2010-2025 宁波自信网络信息技术有限公司 版权所有
客服电话:4008-655-100 投诉/维权电话:4009-655-100