CCS实验指导书

《数字信号处理系统的设计与实践》

实验指导书

上海交通大学

电子工程系

2002年10月(第一版)

前 言

随着数字信号处理技术的广泛应用和不断发展。我校学生对熟悉和掌握这门新兴学科的愿望日趋强烈。据初步统计,从1997年到2001年间,选修DSP课程的研究生人数平均每年以35%的速度增长,到2001年度,选修人数达到了200人左右,学生来自各个院系的各类专业,如电子、电力、通信、机械、医疗、生物等。为配合上海交通大学电子工程系研究生《数字信号处理系统的设计与实践》的教学和DSP开放实验室的建设,在系领导的关怀和任课老师的努力下,重新整理了原来的实验教学内容,并结合当前开放教育的特点,增加和进一步完善了实验内容,为同学提供了更大的自由发挥空间和创新能力的培养。希望通过实验能够提高《数字信号处理系统的设计与实践》的教学质量,增强同学们的实践和创新思维能力,推动数字信号处理技术在全校范围内推广和使用。

鉴于当前学生来自各个专业的实际情况,对实验教材的内容作了适当的编排,总体上可以划分为三个部分:第一部分为基础性实验,帮助大家熟悉DSP的开发环境和基本技巧;第二部分为综合性实验,让同学们了解和熟悉数字信号处理系统的设计和调试,树立DSP开发的总体架构;第三部分是课程项目,完成课程项目是考核同学学习情况的方法,要求大家能够根据自己的实际情况选择题目并最终完成设计和调试。

DSP开放实验室是我校“985工程”创新人才培养体系教学实验项目。新建的实验室在实验规模、仪器设备、开发系统及人员配置等方面比原来有很大的发展。提供的主要实验设备除常用的信号发生器、示波器、DSP集成开发环境及TMS320VC5402DSK实验开发板等设备和开发工具外。经系领导和实验室老师的多方努力,还添置了适合控制类实验的德州仪器TMS320C2000系列开发工具及ADI公司等多家DSP厂商的开发设备,以适应的不同专业同学的需要,为大家开展各种与DSP相关的教学和科研提供了便利条件。

该实验室主要面向在校研究生的教学实验,我们也欢迎对数字信号处理有兴趣或课题研究涉及DSP技术的本科生和博士生到实验室来。

2002年10月上海交通大学电子工程系

DSP开放实验室

TMS320VC5402DSK使用注意事项

1)先用并口电缆将TMS320VC5402DSK与PC机相连,而后再将电源接上,打开Code Composer Studio

(简称CCS)后有可能报TMS320VC5402DSK和PC机未能连上的错误,可在PC机的CMOS_BIOS 重新设置并行口的特性。

2)将TMS320VC5402DSK上的DIP Switches的5、6置ON,其它置OFF。

3)要在关闭CCS后及在断电的情况下插拔并口电缆线。

4)TMS320VC5402DSK电路板上大多是CMOS集成电路,为防止静电击毁,请不要用手及其它带电物

体直接和电路板接触。

版本更新说明:

第一版:2002年10月

第二版:2003年3月

第三版:2004年3月

第四版:2004年9月

目 录

前言I TMS320VC5402DSK使用注意事项II 目录 III 第一部分 基础性实验 1 实验一、CCS操作 1 实验二、DSP CPU 基础4实验三、数据寻址6实验四、中断仿真8实验五、Gel文件的编写10实验六、定点程序的实现11实验七、CODEC(模数/数模转换) 12实验八、UART串口通信实验14实验九、DMA 15实验十、 Flash的使用16实验十一、混合编程16实验十二、正弦信号发生器18实验十三、FIR滤波器的实现20实验十四、IIR滤波器的实现25实验十五、快速傅立叶变换(FFT)31实验十六、Flash自举35第二部分 综合性实验 36

一、信号调制解调36

二、DTMF(双音多频)信号的编码和解码37

三、信号检测及接口设计实验37

四、自适应滤波器设计38

五、MP3播放器39

六、数字用户环路39

第三部分 课程项目 40推荐题目:40 编后语44 常用参考文献44

第一部分 基础性实验

实验一、CCS操作

一、实验目的

1.掌握TMS320C5400系列汇编语言程序的基本格式,

2.掌握程序编译、连接、运行和调试的基本过程

3.熟悉Code Composer Studio的使用

二、实验设备

1.集成开发环境Code Composer Studio(以下简称CCS)

2.实验代码ccs_basic.s54、ccs_basic.cmd和ccs_basic.gel

三、实验内容

1.基本操作

a)运行CCS setup,选择C54xx Simulator

b)建立一个新的项目ccs_basic.pjt,并加入文件ccs_basic.s54和ccs_basic.cmd

c)载入ccs_basic.gel

d)在Project-->Option中加入适当的编译和连接的选项(如下图)

e)Compiler --> files --> Asm File Ext --> 写入“s54”汇编语言扩展名

f)Build整个项目,产生可执行文件ccs_basic.out

g)File->Load Program,装载可执行文件ccs_basic.out,并运行和调试。

2.练习

a)观察存储器映象文件ccs_basic.Map,理解存储器的配置情况

b)观察和修改存储器单元的内容

四、实验结果和提示

1.建立项目,并加入文件

a)运行C54xx simulator,选择Project→New菜单项,建立一个新的项目ccs_basic.pjt,并

选择Project→add files to new project 菜单项,加入文件ccs_basic.s54和

ccs_basic.cmd.

b)在工程视图中选中GEL files文件夹,单击鼠标右键,在弹出的菜单中选择Load GEL

选项,载入ccs_basic.gel

2.编译和连接

a)编译:选择Project-->Build Option,在Compile表单的Category列表中,选择basic选

项,并设置generate debug info为full symbolic debug选项,

如图1-1所示。

b)连接:选择Project-->Build Option,在linker表单中的autoinit mode选项中选择no

autointialization模式,Output Filename中输入\debug\ ccs_basic.out,Code Entry Point

中输入main,Map Filename中输入ccs_basic.map,然后保存选项设置,如图1-2所示。

图1-1 编译选项的选择

图1-2 连接选项的选择

c)选择Project→Build构建整个项目,产生可执行文件ccs_basic.out

d)选择File->Load Program,装载可执行文件ccs_basic.out

3.观察存储器映象Map文件

选择File→Open打开ccs_basic.Map文件,可观察

a)存储器的配置情况:页面0为程序空间,页面1为数据空间

b)程序文本段:起始地址0x1000,存储区长度为0x0021

c)数据段:其中需初始化数据段.data起始地址0x2005,存储区长度为4

d)不需初始化数据段.bss起始地址0x2000,存储区长度为5

e)堆栈段:起始地址0x0100,存储区长度为0x0400

f)向量段:起始地址0x0080,存储区长度为0x0080

g)全局符号在存储器中的位置:共14个符号,如符号.bss在存储器中的位置为0x2000 将上述信息与cmd文件中的设置比较,理解cmd文件和连接器的关系。

4.输出文件ccs_basic.out的运行和调试

a)运行程序:将可执行文件装载到simulator中,选择Debug→Run 或按F5键运行程序,

按shift F5键可中止程序的运行;选择Debug→Step into或按F8键可实现程序的

单步执行。

b)设置断点:把光标移到某一行,按F9键,这一行将会以红色高亮显示,表示在该行加

了一个断点.

5.观察和修改存储器单元的内容

a)点击CCS操作界面左侧调试工具栏图标,出现寄存器窗口,在该窗口查看存储器

的地址

b)选择View→memory 或点击CCS操作界面左侧调试工具栏 图标,在弹出的菜单中

输入存储器地址,可观察存储器的内容。如存储器地址为0x2005中内容为0x000A。

c)修改源汇编程序中数据段内容,可查看存储器单元内容的变化。在数据表格复制到数

组a[]后,如果把a[0]的值由10改为1,那么求和的结果将变为0x001A。

图1-3 自定义文件扩展名

注: CCS使用说明请参阅文献spru327c.pdf、spru328b,pdf及CCS在线帮助。程序代码及详细说明见目录 D:\exp2004\chap3\lab1。

实验二、DSP CPU基础

一、实验目的

1.了解TMS320C5400系列汇编语言程序的基本格式,以及编译、连接的基本过程

2.进一步熟悉Code Composer Studio的使用

3.了解C5400中标志位对计算的影响,以及计算对标志位的影响

二、实验设备

1.集成开发环境CCS

2.实验代码cpu_basic.s54、cpu_basic.cmd和cpu_basic.gel

三、实验内容

1.基本操作

运行CCS,选择C54xx Simulator

建立一个新的项目,并加入文件cpu_basic.s54和cpu_basic.cmd

载入cpu_basic.gel

在Project-->Option中加入适当的编译和连接的选项

Build整个项目,产生可执行代码(.out)

File->Load Program,装载可执行代码,并运行。

2.基本调试

设置断点

单步执行

3.练习

观察并理解程序和数据空间安排

测试SXM、OVM、C16、FRCT对计算结果的影响

测试计算和逻辑运算对TC、C、OV A、OVB的影响

4.DSK仿真练习

a)测试SMUL标志对计算的影响

b)测试MP/MC、OVLY、DROM对计算结果的影响

MP/MC=0,切换DROM的数值,观测0xfc00地址存放的A、U律数据是否存在

MP/MC=0,OVLY=1, 观测0x1000地址存放程序是否存在(改变该处为只读)

四、实验结果和提示

1.与运算相关的标志位

SXM

当SXM置1时,数据读写按照符号扩展的方式,因此A=0xff ffff ff80

当SXM置0时,数据读写为无符号扩展的方式,因此A=0x00 0000 ff80

OVM

当OVM置1时,数据运算的结果将按照32位饱和,因此A=0xff 8000 0000

当OVM置0时,数据运算不饱和,因此B=0x00 fffe 0000

C16

双16位计算比较

FRCT

乘法移位比较

TC

比特测试比较

C

进位、借位和大小比较

OV A, OVB

溢出标志比较

SMUL(软件仿真器无法模拟该标志位,需用DSK开发板观察该位的影响)

乘法饱和

2.与存储器配置相关的标志位

DROM

ROM映射到数据空间

从View菜单的Graph中选择Time/Frequency即可生成一个时/频显示窗口,首先弹出的是”Graph Property”对话框,将其中Start Address 改为0xfe00。正弦表的长度为0x0100即256,Acquisition Buffer Size和Display Data size设为256,

(1)若MC为0,DROM为1,page 设为data 或program,则有下图:

图2-1 ROM中正弦表

说明片内ROM可访问,片内ROM映射到数据空间

(2)若MC为0,DROM为0,page设为data,则无数据显示。说明片内

ROM不映射到数据空间

(3)若MC为1,page设为program,无数据显示,说明片内ROM无法访问

OVLY

存储空间重叠

OVLY为1,片内RAM同时映射到程序和数据空间

注:程序代码说明见目录 D:\exp2004\chap3\lab2。

实验三、数据寻址

一、实验目的

1.熟悉C5400的寻址方式

2.比较利用不同寻址方式的指令执行时间

二、实验设备

1.集成开发环境CCS

2.实验程序addressing.s54、addressing.cmd和addressing.gel

三、实验内容

h)单步执行程序,观察地址寄存器的修改和目标数据

i)利用Profile功能,观察不同寻址方式的指令的执行时间

z使用Profile时,首先从Profile菜单中选择Enable Clock来打开测试时钟。测试时钟对应着CCS中的一个全局变量CLK, 可以通过在Profile菜单中选择View Clock来弹出

Profile Clock窗口,并且从该窗口中观察变CLK的数值。如果双击CLK的数值可以将

其清零。

注意:执行第一条语句的Clock =7,这是因为程序开始时流水线中尚空。在流水线中,指令处理的每个阶段彼此独立,因此允许有几条不同的指令同时处于流水线处理的不同步骤中,即允许不同的指令的执行过程相互重叠,实际上需要多个时钟周期才能完成的指令操作在允许时呈现“单周期”,因此后面的Clock显示为“单周期”。

z使能测试时钟后,需要从Profile菜单中选择Start New Session,会出现测试窗口。该窗口有4个表单:Files表单说明项目中每个文件的测试范围信息;Functions表单一般用

于统计C函数的测试信息;Ranges用于统计“测试区域”信息;Setup表单用于建立“测

试段”。设置测试区域最方便的方法时在源文件中选中感兴趣的代码段,然后将其拖入

Ranges表单即可。运行程序,程序运行时间的数据在窗口中显现。Count表示该段程序

在运行停止之前所运行过的次数,其他的各项均表示运行时间信息,以指令周期为单

位。

注意:单句无法作Profile统计,只能用Clock来看执行所耗费的时钟周期。

j)利用add指令,对各种不同的寻址方式进行练习,完成下面C程序的功能

void main(void)

{

i nt Data_0[8], Data_1[8];

i nt temp;

t emp=0;

f or(i=0;i<8;i++)

{temp=temp+i;

Data_0[i]=temp;

}

f or(i=0;i<8;i++)

Data_1[i]=0;

D ata_1[3]=Data_0[5];

D ata_1[5]=Data_0[3];

f or(i=0;i<4;i++)

{temp=Data_0[i];

Data_0[i]=Data_0[7-i];

Data_0[7-i]=temp;

}

r eturn;

}

四、实验结果和提示

1.立即数寻址指令中包含立即数,指令长度和运行时间都较长。

2.绝对寻址指令包含16位地址,双字节指令,执行速度慢。

3.累加器寻址利用累加器的低16位作为程序空间地址进行访问,单字节指令,指令周期5。

4.直接寻址指令中包含地址的低7位,为单字节指令,指令周期1;但是要注意如果越过数

据页访问地址会产生出人意料的错误。直接寻址中CPL=0时利用DP作高9位与指令中低7位组合成16位地址寻址,CPL=1时利用SP的16位地址加上指令中低7位地址得到新的16为地址寻址,特别要注意的是写了CPL标志位后的3个字指令中不能使用直接寻址,所以应仔细安排指令顺序。

5.间接寻址利用辅助寄存器的内容作为地址,同时可以在指令中修改辅助寄存器值。间接寻

址虽然比直接寻址的指令长度和执行时间长,但是寻址方式十分灵活且不用担心越过数据页的问题,使用起来非常方便。

6.存储器映射寻址对寄存器进行访问操作,指令长度和周期较短。

7.堆栈寻址进行压栈和出栈操作,指令长度1,指令周期1。

8.程序各条指令的运行结果详见程序注释。

注:例程请参阅目录 D:\exp2004\chap3\lab3。

实验四、中断仿真

一、实验目的

1.熟悉C54xx的中断类型及中断寄存器的定义

2.熟悉中断矢量表的意义及其作用

3.学习编写中断服务程序

二、实验设备

1.集成开发环境CCS

2.实验程序interrupt.s54、interrupt.cmd和c5402.gel

三、实验步骤

1.编译项目文件并装载程序。

2.单步调试程序,观察中断服务程序执行过程中寄存器和标志位的变化(特别是INTR和TRAP

之间的异同)。

3.修改程序,尝试自己编写中断服务程序。

四、实验内容

1. 单步执行程序,观察PC的修改

2. 改变IFR中的值,在Simulator环境下,使用Tools?Pin connect功能人为地产生INT0中

断,并观察中断响应的过程,编写数据文件(interrupt.dat),控制中断产生时间,并验证 (中断仿真文件编写在 Tools?Pin connect 后见帮助说明)

3. 观察软件中断指令产生中断的过程,状态位的变化,指出INTR和TRAP的区别

4. 验证在执行重复指令时,CPU是否响应中断

五、实验结果分析

1.执行

rsbx INTM

将全局中断使能,然后执行

stm #0x0026, TCR

启动计时器。接下去进入一个循环,在循环过程中由于有定时器中断产生,将执行定时器中断服务程序,共执行了4次。

2.执行

intr 2

通过软件方式产生SINT17中断,程序立即跳转到标号为int_SINT17处(通过查中断向量表可找到)。由于dsp提供给每个中断矢量的空间有限(只有4个字的空间),因此在int_SINT17处将程序跳转到SINT17_ISR。中断服务程序结束后,程序返回至

intr 2

的下一行。

3.执行

rsbx INTM

trap 3

再次执行SINT18中断程序。由于trap 2没有将INTM置1(不屏蔽其他中断),所以SINT17中断服务程序的执行过程中会响应定时中断(而在intr 2时不会)。

注意:SINT17中断处理服务程序最后用rete返回,而SINT18中断处理服务程序最后用ret返回,这是因为用intr指令通过软件方式产生SINT17中断,INTM置为1即禁止所有可屏蔽中断,因此在中断服务程序的最后用rete使INTM使能(enable)。而用trap指令产生SINT17中断,不改变INTM标志位,即在中断服务程序中仍能响应中断,从而实现中断的嵌套。因而在中断服务程序的最后只用ret返回

4.在dead_loop中,会响应定时器中断。

说明:在调试程序时,用单步执行无法观测到中断的响应。因此在每个中断服务程序中设置断点,程序运行到中断服务程序后可以单步执行,观察INTM标志位的变化,理解INTR和TRAPZ之间的异同。三个中断服务程序分别对x、y、z进行加一操作,由结果也可知每个中断程序响应的次数。附:中断向量的编写

系统为中断程序预留了0x00——0x7F共128个16位字的空间,其中每个中断对应4个字。由于中断服务程序一般都不止4个字,因此通常在中断矢量处放置跳转语句,让程序跳转到中断服务程序。在写中断向量时,切记中断矢量的相对位置是固定的,如果中间有空隙,一般用空白填充,如下:.space 8*16

(space的参数以bit为单位,因此乘以16)

图4-1 中断仿真管脚连接

图4-2 选择外围中断脚及连接中断文件

注:例程见目录 D:\exp2004\chap3\lab4。

实验五、Gel文件的编写

一、实验目的

1.掌握Gel文件的编写,

2.熟悉Code Composer Studio的使用

二、实验设备

1.集成开发环境CCS

2.实验代码ccs_gel.s54、ccs_gel.cmd和ccs_gel.gel

三、实验内容

1.建立项目并添加相应文件,了解GEL文件的功能。Gel文件不是DSP开发必须的文件,而

是给CCS使用的文件,它帮助设置CCS的仿真环境,而且可以完成一些常用的调试操作,如硬件设置等。

2.Gel文件的编写是采用类似C语言的编程语言。观察当前的Gel文件的编写。

3.使用者如果希望修改其功能,可以直接编写gel文件,并重新装载。Menuitem是一级子菜单,

hotmenu是二级子菜单,其中的处理可以直接填写或调用其他的函数。修改Gel文件,添加menuitem和hotmenu

menuitem "C54x Experiment";

hotmenu C5402_DSK_Test()

{

*(int *)0x0@io = 0xff07; /* turn on LED */

}

测试其功能。

4.查询help了解Gel的函数功能。

四、实验结果和提示

1.当设备被选用后,与其关联的gel文件将被使用,其中的StartUp函数将被调用。可修改其

中的内容,如PMST寄存器的数值,并测试。

2.如果当前CCS中装载了gel文件,那么就会出现相应的菜单项,如图5-1所示。

图5-1 GEL菜单

3.添加代码后,重新装载Gel文件将出现新的子菜单,如图5-2所示,并测试新菜单的功能。

图5-2 新的子菜单

注:例程见目录 D:\exp2004\chap3\lab5

实验六、定点程序的实现

一、实验目的

1.掌握数据的两种格式,

2.掌握浮点程序定点化的过程。

3.熟悉定点计算中数据精度的保护方法。

二、实验设备

1.集成开发环境CCS

2.实验代码:fixed_point为CCS下的定点C代码,fix_point_asm为对应的汇编代码,fix_point_c为VC下的C代码。

三、实验内容

1.建立项目,添加相关文件。运行程序,观察浮点数结果。

2.测试浮点数的大致范围,并利用伪定点的方式大致确定定点数的格式。

3.浮点程序的定点化。

4.编写对应的汇编程序。

四、实验结果和提示

1.观察浮点数的取值范围应该观察其数据的绝对值的变化。

2.利用PrecisionLimit函数能够方便地实现定点数据格式的确定。

3.编写基本操作能够大大简化定点程序的编写。

4.基本操作能够使汇编程序的编写简单化。

注:例程见目录 D:\exp2004\chap4。

实验七、CODEC(模数/数模转换)

一、实验目的

1.掌握利用CODEC进行AD/DA转换

2.熟悉McBSP, DMA的使用

3.掌握C和汇编混合编程封装具体实现

二、实验设备

1.集成开发环境CCS

2.5402DSK实验板

3.实验代码:

a).汇编:codec_cnst.h54, dsp_cnst.h54, macro.h54, codec_init.s54, dsp_init.s54,

main.s54和codec.cmd

b). 混合编程:codec_c.h, dsp_cnst.h54, codec.s54, codec_c.c, rts.lib和codec_c.cmd

三、实验内容

1.阅读理解McBSP, CODEC和DMA的相关文档

2.阅读和理解相关实验代码

3.接通DSK板电源,打开CCS,加载程序并调试

4.输入声音信号并听取DA端输出

四、实验结果和提示

1.DSK实验板上有两块CODEC芯片,一块与DAA口相联,另一块与音频模块相联。5402有两

个McBSP口,在DSK板上的缺省设置为McBSP0的信号源为DAA,McBSP1的信号源为音频模

块。如果想更改缺省设置必须写相应的CPLD寄存器,具体情况请参考《数字信号处理器开

发实践》4.2.3节。本实验中使用了音频模块作为输入输出端口,因此实验中使用的是相

应的CODEC及McBSP1口。

2.使用CODEC必须设置相应的控制寄存器,实验使用的TLC320AD50C共有7个寄存器,其中

4个为控制寄存器,要写这些控制寄存器必须将CODEC切换到第二串行通信方式,切换方式有两种:硬件方式和软件方式。本实验采用了硬件方式,这样必须将FC在FS的上跳沿前拉高,然后CODEC会在128个SCLK后切换到第二串行通信,然后就可以向CODEC发送控制字。具体可参阅《数字信号处理器开发实践》5.1.2及5.1.3节。

3.要设置CODEC必须通过McBSP1口发送数据,为使McBSP1口正常工作要设置相应的控制寄

存器,McBSP1的15个控制寄存器采用同址访问的方式进行访问,将要访问的寄存器的子地址写入子地址寄存器SPSA1后再访问同一个数据寄存器即可。具体控制寄存器的设置请参阅《数字信号处理系统的应用和设计》5.4.2节。要注意的是由于板上McBSP1口与CODEC 相联时FS, CLK信号均由CODEC驱动,所以相应的管脚必须设置为输入脚并置好对应的标志位,可以参考实验代码中的寄存器参数注释。

4.音频信号经CODEC采集后通过McBSP再由DMA通道送往数据区缓冲区,这样可以在不影响

CPU的情况下完成数据的传输。5402的DMA共有6个通道,每个通道有5个独立的控制寄存器,此外还共享10个全局寄存器。由于全局寄存器中有四个重载寄存器,可以对1个通道实现自动初始化,这样可以很方便的对输入(或输出)信号进行连续传输。由于输入输出必须占用两个DMA通道,这样就必须对另一个通道手动重载,这些在中断中完成。由于5402中断资源有限,DMA中断是与其他外设中断复用的,这个通过DMPREC寄存器中的中断复用位进行设置。对以上这40个寄存器的访问也采用与McBSP相同的同址访问方式。具体设置请参阅《数字信号处理系统的应用和设计》5.5.2节和实验代码中的寄存器参数注释。

5.要实现数据连续的数据采集和发送必须在数据缓冲区开辟两块区域交替使用,为了辨别使

用哪块区域要设置一个相应标志位,这就是常用的乒乓法。在DMA中断处理程序中要根据此标志位更新缓冲区地址。

6.数据输入的DMA通道中断后必须对输入数据进行处理,然后送入输出缓冲区,这就要在中

断中设置一个中断标志位,然后在主程序中查询此标志位判断是否要进行数据处理。本实验中没有对数据进行任何处理直接送入输出缓冲区,但是可以很方便的加入各种信号处理代码。

7.将汇编程序分模块封装成C函数后可以使整个流程简洁明了,一目了然。同时留下的接口

可以让用户很方便的对CODEC进行设置并加入自己想要采用的信号处理代码。在混合编程中要注意的是函数名和变量在C和汇编中的命名规则;C语言接口的汇编函数可以自由使用的寄存器和使用前必须先保存的寄存器;C语言中的状态标志位缺省值以及C语言和汇编的相互调用通过堆栈来进行参数和返回值的传递,同时通过堆栈可以方便的实现局部数据的使用。具体情况可以参阅《数字信号处理系统的应用和设计》7.1节。

注:例程见目录D:\exp2004\chap5\51_codec。TLC320AD50C见当前目录中文献slas131e_ad50c.pdf。

实验八、UART串口通信实验

一、实验目的

1. 了解RS232通信接口的基本原理

2. 熟悉通信接口芯片(TL16C550C)在DSP I/O空间寄存器的地址映射及工作原理

3.了解异步通信中串口模式选择、设置数据传输格式、设置波特率、建立连接、传输数据和断开连接等功能。

二、实验设备

1. 集成开发环境CCS

2. 实验开发板TMS320VC5402DSK、RS232接口电缆线及附件

3.程序“串口调试程序v2.2.exe”

三、实验内容

3.1 在汇编环境调试Uart:

a. 实验代码main.s54、uartasm.cmd和uart_init.s54、dsp_init.s54以及uartasm.h54

b. 串口调试程序“串口调试程序v2.2.exe”

c. 程序文件介绍:

1)“uart.h54”定义了一些一些寄存器的地址以及函数类型。

2)“dsp_init.s54”与dsp工作有关的寄存器ST1、PMST、IMR、IFR和SWWSR,并且清除INTM位以及设定时钟模式。

3)“uart_init.s54”先检测UART模块是否工作正常,然后设定UART模块的寄存器,如CNTL1、CNTL2、LCR、MSB&LSB(设定波特率)、FCR、IER等。

4)“main.s54”主程序查看标志位,检测是否UART存在有效接收数据。若有,则执行一定的处理,包括亮LED以及将接收的数据从UART回发。

d. 执行程序时,只要发送数据时,可在串口调试程序的接收窗口立即看到回发的数据。

e. 程序中UART工作参数设置如下:

1)波特率9600、无数据校验、字符长度8比特、停止位2。

2)IER允许数据就绪中断和线路状态中断

3)FIFO不使能,所以,在用串口程序调试时,只能单个字符发送,如“x”。若采用16进制发送,应2位发送,如“a4”。

f. 用汇编语句编写UART应用程序基本步骤:

1)在UART初始化程序中设置UART寄存器,特别是IER、LCR、FCR和除数寄存器LSB&MSB;并且检测UART工作是否正常。

2)设置寄存器CNTL2,选择UART作为信号源,这也放在UART初始程序中。

3)在DSP初始程序中设定DSP工作方式,这主要通过设置寄存器ST1、ST0、INTM、IFR、SWWSR、PMST、IMR、CLKMD等。

4)编写主程序和中断程序,通常在中断程序中把数据从UART中读到CPU,然后在主程序中对数据进行处理。

3.2 用c函数库调试Uart:

a.实验代码uartc.c、5402.cmd和c5402_dsk.gel,另外还有库函数drv5402.lib、dsk5402.lib、rts.lib

以及头文件board.h、mcbsp54.h、type.h、uart.h。

b.串口调试程序“串口调试程序v2.2.exe”

c.运行程序后,串口程序窗口会出现提示“Select a leed to light? 0/1/2,Or,press 5 to end the

program ”,这是通过函数“uart_fputs()”输出的。在键入指定的数字时,相应的LED将亮大约一秒钟。

d.本程序中用到了如下驱动函数,分别为:

1)brd_init(int):dsk板初始化,输入参数是工作主频;

2)uart_init(void):uart模块初始化,不带参数,不过在调用前需设定好一些全局变量,如波特率、字长、停止位、校验方式、fifo控制方式、数字环使能等;

3)uart_fputs(string):向uart输出字符串;

4)uart_fgetc():从uart中读取一个字符;

5)brd_led_enable(BRD_LED):打开指定的led;

6)brd_led_disable(BRD_LED):关闭指定的led。

e.程序中还自定义了一些函数:

1)void delay(int):实现延时功能;

2)int initpro(struct uartset):初始化uart模块,其中结构体参量定义了uart的一些工作参数;

3)void lightled(void):按照用户的选择亮相应的led灯。

f.此外,TI公司还提供了许多函数方便对uart的使用,这些函数的使用说明见头文件“uart.h”。

注:例程见目录 D:\exp2004\chap5\52_uart。

实验九、 DMA

一、实验目的

1.掌握DMA的工作方式

2.掌握DMA寄存器的设置以及对DMA传输的检测

二、实验设备

1.集成开发环境CCS

2.5402DSK实验板

3.实验代码main.s54, dsp_init.s54, codec.cmd

三、实验内容

1.阅读理解DMA的相关文档

2.阅读和理解相关实验代码

3.接通DSK板电源,打开CCS,加载程序并调试

4.尝试修改DMA设置,运行程序,查看是否其工作方式与希望的相同

四、实验结果和提示

1.DMA第一部分中,源数据和目的数据都是线性排列的,且地址修改方式为单调增。检测DMA

传输是否结束采用查询方式。

2.DMA第二部分中,目的数据重新排列,且地址修改按照帧间和帧内采用不同方式修改。检测

DMA传输是否结束采用中断方式。

注:例程见目录 D:\exp2004\chap5\dma。

实验十、 Flash的使用

一、实验目的

1.掌握Flash的使用方法

2.初步掌握Flash读写的方法

二、实验设备

1.集成开发环境CCS

2.实验代码falsh_c.c、operations.s54、falsh_c.cmd和c5402_dsk.gel,另外还有库函数dsk5402.lib、

rts.lib以及头文件falsh_c.h。

三、实验内容

1.设置DSK的DIP,使能flash。

2.将DSP程序下载并运行。

3.观察Flash的数据是否写入。

四、实验结果和提示

注:例程见目录 D:\exp2004\chap6。

实验十一、混合编程

一、实验目的

1.学习使用实时运行库

2.熟悉用c和汇编混合编程的方法

相关文档
最新文档