DSP 原理与应用 实验指导书 - Shandong University择TMS320C5416...

72
二零一零年四月 DSP 原理与应用 实验指导书

Transcript of DSP 原理与应用 实验指导书 - Shandong University择TMS320C5416...

二零一零年四月

DSP 原理与应用

实验指导书

DSP 本科实验教材

1

目录

第一部分 软件仿真(Simulator)实验

实验一 集成开发环境 CCS 应用基础 实验二 寻址方式 实验三 定点定标运算 实验四 浮点运算 实验五 汇编程序的优化 实验六 C 语言编程与优化(乘法—累加运算程序设计) 实验七 混合编程实验 实验八 FIR 滤波器的实现 实验九 基于 DSP 的数字图像处理算法的实现

第二部分 硬件(Emulator)实验

实验十 片内定时器实验 实验十一 数字 I/O 口的应用 实验十二 同步串口与 A/D 转换 实验十三 基于 DSP 的数字音频处理系统

第三部分 部分实验程序参考清单

实验一参考程序 实验二参考程序 实验三参考程序 实验四参考程序 实验五参考程序

第四部分 参考资料

一、C54xCPU 的存储器映像寄存器及其地址 二、C54xCPU 的状态和控制寄存器 ST0、ST1 三、TMS320C5416DSP 的存储区映像 四、C54xCPU 的处理器模式状态寄存器 PMST 五、C54x 的片内定时器控制寄存器 TCR 六、TMS320C5416 的中断矢量表

参考文献

DSP 本科实验教材

2

第一部分 软件仿真(Simulator)实验

实验一 集成开发环境 CCS 应用基础

一、目的

1. 通过创建一个简单的应用工程,初步熟悉 Code Composer Studio(简称 CCS)的集成开

发环境(IDE)及其工具的使用。 2. 掌握汇编语言源程序的基本框架和编写方法,了解 CCS 的工程结构以及编译、汇编、连

接、运行和调试的基本过程。 3. 了解 ST0、ST1 的控制位对计算过程的控制以及计算结果对状态位的影响。

二、内容

1. 学习使用 CCS 集成开发环境(IDE)的各种工具。 包括下列内容: (1)编辑、汇编和连接。 (2)查看和修改存储器映像寄存器的内容。 (3)查看和修改 ST0、ST1 及 PMST 的有关位。 (4)查看和修改程序存储器和数据存储器的内容。 (5)断点操作。 (6)运行程序(单步运行、连续运行和断点运行)。 2. 观察并理解 COFF 段结构的划分及存储空间的分配。 3. 观察控制位 SXM、OVM、C16 及 FRCT 置 1 或清 0 对执行结果的影响。 4. 观察标志位 TC、C、OVA 及 OVB 的变化情况。

三、实验步骤

1.准备工作 在逻辑盘 D:\下,建立以自己学号命名的子目录,(如:D:\DXK03\学号)以后自己的所有

实验程序都在此子目录下运行。(说明:CCS 在安装时,曾在 C 区建立了 ti 文件夹,但由于实

验室 PC 机的 C 区都已保护,所以学生的目录及文件不能建在 c:\ti\myprojects 下)。 将实验一的文件夹拷贝至自己的子目录内。在 PC 机的 CCS 软件仿真环境(Simulator)下,选

择 TMS320C5416 软件仿真模式,并在此模式下进行实验。 2.预习实验程序 实验一提供了三个有关程序:汇编主程序 test1.asm、中断矢量处理程序 vectors.asm 及命令

文件 test1.cmd(参见第三部分,实验一参考程序)。 (1)读懂主程序 test1.asm,分析程序中各操作所提供的原始数据、中间过程和最终结果。

在实验前先填写主程序注释中的括号部分,然后通过实验验证自己的分析正确否。 (2)通过预习程序(特别是预习 test1.cmd),了解该工程中 COFF 格式段的划分及存储器

的分配情况。在实验前先填写表 1-1。 表 1-1 工程 test1 中的段及其定位

DSP 本科实验教材

3

段名 已/未初始化段 所属 PAGE 起始地址 存储区长度

(3)在程序 vectors.asm 中有从复位中断(RESET)到主程序入口 c_int00 的一些汇编指令。

通过阅读它们,了解在 CCS 软件仿真环境(Simulator)下,怎样编写中断矢量入口的处理程序。 3.运行 CCS setup,选择“C5416 Device Simulator”,如图 1-1 所示。单击“Import”按钮,

即可将其添加到系统配置(System Configuration)中,单击“Save and Quit”按钮,就可以启动

CCS 在 C5416 软件仿真环境下工作。

图 1-1 CCS 安装界面

4.创建一个新的工程项目 启动 CCS。从 CCS 的主菜单“Project”下选择子菜单“New”,将出现“Project Creation”

对话框,如图 1-2 所示。在对话框的“Project Name”处输入“test1”,在“Location”处用浏览

方式选入在第 1 步中建立的文件夹,在“Project Type”处选择“Executable(.out)”类型,在“Target”中选择 CCS 所配置的目标 DSP 类型,最后单击“Finish”完成。

5.向工程添加各类型文件 (1)在主菜单中单击“Project”,选择“Add Files to Project”命令,然后在弹出的添加文

件对话框中找到文件 vectors.asm 及 test1.asm,单击“Open”。(也可在工程图标处单击鼠标右键,

然后在快捷菜单中选择“Add Files to Project”,或将文件拖入工程视图窗口的文件夹中)。 (2)在主菜单中单击“Project”,选择“Add Files to Project”命令,使用上述同样的方法

选择链接命令文件“test1.cmd”,单击 Open。

DSP 本科实验教材

4

图 1-2 “Project Creation”对话框

(注:在一个工程项目中,通常包括源程序、库文件、链接命令文件和头文件等。本工程

项目中没有库文件和头文件,因此不需添加它们)。 实验所需的 3 个文件到此添加完毕。在工程浏览窗中,单击工程名左边的“+”标记展开工

程文件列表,如图 1-3 所示。在工程浏览窗里的某个文件名上双击鼠标,即可在 CCS 的编辑窗

中看到该文件的源代码。

6.建造和装载程序

在主菜单中单击“Project”,选择“Rebuild All”命令或者单击工具条图标 ,即可自动完

成编译、汇编和连接这三个步骤,并在底部窗口中同步的显示汇编连接信息。连接完毕,将生

成一个“test1.out”文件,默认存放在目录“test1”下的“debug”目录内。在修改文件后,选

择“ReBuild All”命令,或者单击工具条图标 ,CCS 将重新对工程中的所有文件进行编译、

汇编和连接。 建造完毕后,在主菜单中单击“File”,选择“Load Program”如图 1-4 所示。在对话框中选

图 1-3 展开工程文件列表

图 1-4 装载程序

DSP 本科实验教材

5

择文件 test1.out,单击“Open”打开。这样,CCS 就将可执行代码载入到目标 DSP 中。 选择主菜单“View”下的“Mixed Source/ASM”,将同时看到汇编源代码和相应的机器代

码,如图 1-5 所示。如果要查找某条汇编指令的功能,只需将光标放在该汇编指令的前面,并

按 F1 键,CCS 就会搜索并显示该条指令的帮助信息,这在调试中是很有用的。

图 1-5 观察指令代码

7.运行和调试

选择主菜单“Debug”下的“Run”或单击工具按钮 ,可使程序全速运行。通过“Debug”

下的“Halt”或单击工具按钮 可停止程序的运行。

设置断点的方法是:把光标移到某一行,按 F9 键或单击工具按钮 ,在这一行前面会出

现一个红点,表示在该行加了一个断点。 8.寄存器的察看和修改 选择主菜单“View”下的“Registers ——> CPU Registers”或点击 CCS 操作界面左侧的调

试工具栏 图标,就会在 CCS 工作区底部打开一个 CPU 寄存器窗口,其中列出了所有 CPU

寄存器的值,并列出了 ST0、ST1 和 PMST 中有特殊意义的位和位域,如图 1-6 所示。要修改

某个寄存器值,只要双击该寄存器名称,既可出现“Edit Register”对话框,只要在“Value”文

本框中输入新的值,单击“Done”按纽,即修改成功。

图 1-6 CPU 寄存器窗口

选择主菜单“View”下的“Memory”或点击 CCS 操作界面左侧的调试工具栏 图标,

DSP 本科实验教材

6

就会弹出一个“Memory Window Options”对话框,如图 1-7 所示。选择 Data 或 Program,输入

存储器的地址,即可观察以该存储器地址开始的内容,如图 1-8 所示。要修改某个存储器地址

中的内容,可以双击该地址,在出现的对话框中修改即可。

图 1-7 存储器窗口

图 1-8 存储器显示及修改对话框

关于 CCS 使用的详细说明,请查看有关说明书(见参考文献[15]、[16]),或参考 CCS 主

菜单的“Help”。 9.观察存储器映象 Map 文件 选择主菜单“File”下的“Open”,打开 test1.Map 文件,观察存储器的配置、段的定位及全

局符号等各项内容,将它们与 test1.cmd 文件中的设置进行比较,进一步理解 cmd 文件的作用。

四、实验报告的要求

1.程序分析 (1)说明 3 个文件的作用及接口情况,说明各个文件中伪指令的作用。

DSP 本科实验教材

7

(2)分析主程序的结构和功能,对每条指令进行注释,写出执行结果。 (3)写出本工程的分段和存储器的定位情况。 2.调试说明 总结上机调试步骤和调试情况,分析调试中遇到的问题是如何解决的。 3.回答下列问题: (1)如果没有在工程中添加 test1.cmd 文件,试问汇编连接后能否产生 test1.out 文件?能

否获得正确的执行结果? (2)在主程序中存在着许多 NOP 指令,它们的作用是什么?如果将它们去掉,程序能否

正常运行? (3)伪指令.def 和.ref 的在本工程中的作用是什么?如果将它们去掉将会产生什么后果?

实验二 寻址方式

一、目的

1.了解 C54x 的各种数据寻址方式,包括立即寻址、绝对寻址、累加器寻址、直接寻址、

间接寻址、存储器映象寄存器寻址及堆栈寻址等。 2.掌握各种寻址方法以及指令的执行过程,比较利用不同寻址方式的指令执行时间。 3.进一步掌握在 CCS 软件仿真环境下工程的建立、汇编、连接、运行和调试的基本过程。

二、内容

1.单步或断点执行程序,观察在各种寻址方式下地址的修改和空间的变化。 2.利用 CCS 的“View”功能,观察不同寻址方式下指令执行的结果(即目标数据的变化)。

三、实验步骤

1.预习实验程序 实验二提供了三个有关程序:汇编主程序 test2.asm、中断矢量处理程序 vectors.asm 及命令

文件 test2.cmd(参见第三部分,实验二参考程序)。 (1)读懂主程序 test2.asm,了解程序中各种寻址方式的寻址空间情况,分析指令中源操作

数和目标操作数的寻址方式、执行过程和最终结果。在实验前先填写主程序中注释的括号部分,

然后通过实验验证自己的分析正确否。 (2)通过预习程序(特别是预习 test2.cmd),了解该工程中 COFF 格式段的划分及存储器

的分配情况。在实验前先填写表 2-1。 表 2-1 工程 test2 中的段及其定位

段名 已/未初始化段 所属 PAGE 起始地址 存储区长度

2.在 CCS 下建立工程,进行汇编、连接和调试的步骤与实验一类同,在此不再赘述。

DSP 本科实验教材

8

3.为了更方便的观察在各种寻址方式下地址和目标数据的变化情况,建议在 CCS 环境下,

打开“CPU Registers”及“Memory”窗口,使用主菜单“Windows”下的“Tile Vertically”,平

铺各个观察窗口,如图 2-1 所示,即可快捷的观察到程序执行过程中地址和数据的变化情况。

图 2-1 在 CCS 中平铺各个窗口进行调试

四、实验报告的要求

1.程序分析 (1)分析主程序的结构和功能,对每条指令进行注释,写出该条指令的寻址方式和执行结

果。 (2)写出本工程的分段和存储器的定位情况,填写表 2-1。 (3)分析和总结各种寻址方式的特点。 2.调试说明 总结上机调试步骤和调试情况,分析调试中遇到的问题是如何解决的。 3.回答下列问题: (1)总结 TMS320C54x 的 7 种寻址方式的寻址空间情况,它们分别应用在什么场合? (2)直接寻址有两种方式,它们是如何控制的? (3)写出符号“#”、“@”、“*”在指令(寻址方式)中所表示的含义。 (4)堆栈寻址的作用是什么?压栈和弹出操作是如何实现的? (5)绝对地址寻址有哪几种?它们可以访问哪些地址空间?各有什么特点?

DSP 本科实验教材

9

实验三 定点定标运算

一、目的

1.了解 DSP 定点数的定标方法。 2.掌握将十进制数转换为 Q 定标的十六进制数的方法。 3.学习利用定点定标完成纯小数运算和混合小数运算的程序编写方法。

二、内容

1.编写定点定标乘法程序,完成纯小数 y=x1×x2=0.35×0.9=0.315 的运算和混合小数

z=s1×s2=7.62×1.84=14.0208 的运算。 2.在程序中保留 8 个数据存储单元,分别存放被乘数和乘数 x1、x2、s1、s2 及乘积 y、z

的值。其配置情况如图 3-1 所示。 3.完成纯小数乘法运算 y=x1×x2=0.35×0.9=0.315,用 Q15 定标。完成混合小数乘法运算

z=s1×s2=7.62×1.84=14.0208,其中 s1 用 Q12 定标,s2 用 Q14 定标。

图 3-1 数据存储单元的配置 (注:实际上,y 只需要一个字存储单元,后面的存储单元存放了 0x0000,是为了保证 s1

指针是偶地址存放格式)。

三、实验步骤

1.预习实验程序 实验三提供了三个有关程序:汇编主程序 test3.asm、中断矢量处理程序 vectors.asm 及命令

文件 test3.cmd(参见第三部分,实验三参考程序)。 (1)读懂主程序 test3.asm,了解在汇编程序中进行纯小数运算或混合小数运算的方法。掌

握 Q 法定点定标的编程方法(可参考文献[1])。在实验前先计算出源操作数及结果的定标值,

填写下列各括号,然后通过实验验证自己的计算正确否。 0.35 的 Q15 定标值: ( ) 0.9 的 Q15 定标值: ( ) 0.35×0.9 的 Q15 定标值: ( ) 7.62 的 Q12 定标值: ( ) 1.84 的 Q14 定标值: ( )

DSP 本科实验教材

10

7.62×1.84 的 Q26 定标值: ( ) (2)通过预习程序(特别是预习 test3.cmd),了解该工程中 COFF 格式段的划分及存储器

的分配情况。在实验前先填写表 3-1。

表 3-1 工程 test3 中的段及其定位

段名 已/未初始化段 所属 PAGE 起始地址 存储区长度

2.在 CCS 下建立工程,进行汇编、连接和调试的步骤与实验一类同,在此不再赘述。

四、实验报告的要求

1.程序分析 分析程序的结构和功能,对每条指令进行注释,写出执行结果。 2.调试说明 总结上机调试步骤和调试情况,说明调试中遇到的问题是如何解决的。 3.总结定点数定标的方法,总结将十进制数转换为 Q 定标的十六进制数的方法。 4.总结实现定点数乘法运算的方法。

实验四 浮点运算

一、目的

1.了解 DSP 浮点数的表示方法。 2.掌握定点数规格化为浮点数及浮点数转换为定点数的方法。 3.学习利用定点 DSP 进行浮点数运算的程序编写方法。

二、内容

编写浮点乘法程序,计算 a1×a2=0.4×(-0.9)。

三、实验步骤

1.预习实验程序 实验四提供了三个有关程序:汇编主程序 test4.asm、中断矢量处理程序 vectors.asm 及命令

文件 test4.cmd(参见第三部分,实验四参考程序)。 读懂主程序 test3.asm,程序设计分为下列三步进行: (1)将定点数规格化为浮点数。 1)用 EXP A 指令提取指数,并将指数保存在暂存器 T 中。如果累加器(A)= 0,则令 T=0,

否则,将(A)的冗余符号位减 8→T,而累加器 A 中的内容不变。指数的取值范围是:-8~31。 2)用 ST T,EXPONENT 指令,将保存在 T 中的指数存放到数据存储器 EXPONENT 中。

DSP 本科实验教材

11

3)按 T 中的内容对累加器 A 进行规格化处理(左移或右移),即(A)<<TS→A。 (2)进行浮点乘法运算:两浮点数相乘,尾数相乘,指数相加。 (3)将浮点数转换成定点数。因为浮点数的指数就是在规格化时左移(指数为正时)或右

移(指数为负时)的位数,所以在将浮点数转换成定点数时,只要按指数值将尾数右移(指数

为正时)或将尾数左移(指数为负时)。 (4)在程序中保留 10 个数据存储单元,其中:

a1(被乘数) a2(乘数) b1(被乘数的指数) b2(乘数的指数) c1(被乘数的尾数) c2(乘数的尾数) ep(乘积的指数) mp(乘积的尾数) product(乘积) temp(暂存单元)

实验前要作好充分准备,读懂主程序,分析程序中的原始数据定标格式、浮点数的表示形式

和最终的定点数结果(可参考文献[2])。然后通过实验验证自己的计算正确否。 2.在 CCS 下建立工程,进行汇编、连接和调试的步骤与实验一类同,在此不再赘述。

四、实验报告的要求

1.程序分析 分析程序的结构和功能,对每条指令进行注释,写出执行结果。 2.调试说明 总结上机调试步骤和调试情况,说明调试中遇到的问题是如何解决的。 3.总结定点数定标的方法,总结定点数规格化为浮点数及浮点数转换为定点数的方法。 4.总结实现浮点数乘法运算的方法。

实验五 汇编程序的优化

一、目的

1.进一步了解和掌握 DSP 汇编程序设计的基本结构和设计方法。 2.探讨 DSP 汇编程序设计的优化方法和编程技巧。 3.学习利用 CCS 提供的 Profile(剖析)工具检测程序执行效率的方法。

二、内容

1.利用指令的超标量操作能力 编写程序,比较两数X1和X2的大小。若两者相等,则将其值存入Y单元。否则将大者存入

Y单元。分别使用CMPR指令、SUB指令和CMPS指令编程,比较代码长度和执行时间。 2.使用延迟功能

计算y1= 16

1( )i i i

iu v w

=

× +∑ ,分别使用BANZ(无延迟)和BANZD(有延迟)指令编程,比

较代码长度和执行时间。 3.重复机制和重复操作指令的应用

DSP 本科实验教材

12

计算 S=20

140 i

ic

=∑ ,分别使用 RPT 指令和 BANZ 指令组成循环程序,比较代码长度和执行时

间。 4.利用多总线结构和并行操作功能 计算 y2[i]= g[i]+h[i],i=1,2,3…20,分别使用双操作数寻址或并行操作指令编程,比较代码

长度和执行时间。

三、实验步骤

1.预习实验程序 实验五提供了三个有关程序:汇编主程序 test5.asm、中断矢量处理程序 vectors.asm 及命令

文件 test5.cmd(参见第三部分,实验五参考程序)。 (1)读懂主程序 test5.asm,了解在汇编编程过程中,怎样使用恰当的寻址方式、编程技巧

和程序结构,特别是采用合理妥当的优化手段,去充分发挥 DSP 的多总线、流水线、循环重复

机制和超标量操作等结构特点,在缩短代码长度,提高执行速度,增大数据吞吐量以及提高 CPU的利用效率等方面优化程序的设计。

(2)在预习中,针对实验中的 4 个内容,先围绕下列 4 个表进行分析思考,然后通过实验

获得结果,并在实验报告中填写这 4 个表格。 针对内容 1

表 5-1 三种方法编程的代码长度和执行时间

使用指令 代码长度(字) 执行时间(CPU时钟周期)

CMPR SUB

CMPS 针对内容 2

表 5-2 两种方法编程的代码长度和执行时间

使用指令 代码长度(字) 执行时间(CPU时钟周期)

BANZ(无延迟) BANZD(有延迟)

针对内容 3

表 5-3 两种方法编程的代码长度和执行时间

使用指令 代码长度(字) 执行时间(CPU时钟周期)

RPT BANZ

针对内容 4

表 5-4 两种方法编程的代码长度和执行时间

使用方法 代码长度(字) 执行时间(CPU时钟周期)

双操作数寻址 并行指令

DSP 本科实验教材

13

(3)本实验针对 4 个内容开辟了不同的未初始化数据存储器空间,通过预习主程序

test5.asm,指出有关的汇编伪指令,对它们进行分析,并在实验报告中写出这 4 个实验内容所

涉及的未初始化数据存储器空间的分布情况。 2.在 CCS 下建立工程,进行汇编、连接和调试。 3.使用剖析时钟 要观察某段程序或者某个函数的执行时间是多少,可以在这段程序的开始和结束位置上设

置断点,然后使用 CCS 主菜单“Profile”下的剖析时钟统计出时钟周期数。操作的方法如下: (1)选择 CCS 主菜单“Profile”下的“Enable Clock“命令,打开剖析时钟。 (2)选择主菜单“Profile”下的“Clock Setup”命令,打开时钟设置窗口,如图 5-1 所示。

在此窗口中设置剖析的相关属性。 在“Count”下拉列表框中选择需要剖析的事件。一般选择“CPU Cycles”,以统计代码执

行的时钟周期。另外,还可以选择其它选项,如统计程序运行中的中断、子程序的调用、程序

分支、返回及指令预取等信息。 在“Reset Option”拦中选择“Mamual”(手工复位)或者“Auto”(自动复位)。手工复位

是指在整个剖析过程中,剖析时钟的值不停的累加,除非主动手工复位清 0。在自动复位方式

下,每次运行时遇到断点或单步停下,剖析时钟会自动清 0。要注意的是:在自动复位方式下

得到的剖析时钟数据并不准确。一般采用手工复位。 在“Pipeline Adjustments”文本框中输入流水线校正值。 设置完成后键入“OK”,关闭时钟设置窗口。

图 5-1 时钟设置窗口

(3)选择主菜单“Profile”下的“View Clock”命令,打开剖析时钟窗口,执行该段程序(已

设置了起始和结束的断点)之后,就会在剖析时钟窗口中显示出时钟的计数值,如图 5-2 所示。

用鼠标双击此计数值,可以将它复位为 0。

图 5-2 剖析时钟窗口

4.观察代码长度 我们可以采用下列两种方法来观察代码长度: (1)选择 CCS 主菜单“View”下的“Mixed Source/ASM”,可以在 CCS 的编辑窗口中看

到程序的机器码,通过观察即可计算出一段程序的代码长度。 (2)根据命令文件(.cmd)对段的定位可以确定代码段.text 所在的位置,选择 CCS 主菜

单“View”下的“Memory”命令,或者单击快捷键 ,打开 Memory 窗口设置,如图 5-3 所示。

DSP 本科实验教材

14

在“Page”拦中选择“Program”,在“Address”拦中输入地址,即可打开存储器显示窗口观察代

码的长度,如图 5-4 所示。

图 5-3 Memory 窗口设置

图 5-4 存储器窗口

四、实验报告的要求

1.程序分析 (1)分析主程序中 4 个汇编程序内容的优化方法,对有关指令进行注释,写出各个程序段

的执行结果。 (2)填写表 5-1~表 5-4 的内容,分析和总结各种优化方法的特点。 (3)写出各个程序段的未初始化数据存储器空间的分布情况。 2.调试说明 总结上机调试步骤和调试情况,分析调试中遇到的问题是如何解决的。

DSP 本科实验教材

15

实验六 C 语言编程与优化(乘法—累加运算程序设计)

一、 目的 1.通过创建一个用 C 语言编程的应用工程,学习 DSPC5000 C 的编程方法,掌握 C 语言

编程的基本框架和程序的组织。 2.掌握 CCS 所提供的 4 级文件优化选项(-O0、-O1、-O2、-O3),观察选用不同优化选项

时的执行速度和代码长度。 3.了解 C5000 C 编程的一些优化方法。

二、内容 设有两个数组 x 和 h,已知 int x[10] = 1,2,3,4,5,6,7,8,9,10, int h[10] = 11,12,13,14,15,16,17,18,19,20,

用 C 语言编写程序,计算 y = 10

1i i

ix h

=∑

1.采用地址指针编程,基本程序如下: #define N 10 int x[] = 1,2,3,4,5,6,7,8,9,10; int h[] = 11,12,13,14,15,16,17,18,19,20; int *a = &x[0]; int *b = &h[0]; int sum; void main() int i; sum=0; for(i = 0; i < N; i++) sum+= *a++ * *b++; ) 2.不采用地址指针编程,基本程序如下: #define N 10 int x[] = 1,2,3,4,5,6,7,8,9,10; int h[] = 11,12,13,14,15,16,17,18,19,20; int sum; void main() int i; sum=0; for(i = 0; I < N; i++)

DSP 本科实验教材

16

sum+= x[N] * h[N];

三、实验步骤 1.编写实验程序 实验六只提供中断矢量处理程序 vectors.asm 及命令文件 test6.cmd(参见文件夹“test6”),

不提供主程序,由实验者自己编写主程序。参考上列程序,在任意的编辑环境下编写 C 语言程

序。要求如下: (1)采用地址指针编程,将全局指针改为局部指针,然后运行,观察编译后的汇编程序能

否组成块循环或单指令循环,并观看程序的执行速度。 (2)不采用地址指针编程,在 for 循环体中使用一个局部变量,然后运行,观察编译后的

汇编程序能否组成块循环或单指令循环,并观看程序的执行速度。 2.在 CCS 下建立工程 建立一个新的工程(project),向工程添加各类型文件,包括 C 语言主程序、C 头文件(如

果有的话)、中断矢量处理程序 vectors.asm 和命令文件 test6.cmd。因为本实验的工程是基于 C语言编写的,所以还需要添加运行时支持库“rts.lib”文件。该文件存放在 CCS 的安装目录

“c5400\cgtools\lib”下。注意:在添加文件对话框的“文件类型”下拉列表中,要选择“Object and Library Files(*.o,*.l*)”。

3.进行编译、汇编、连接和调试。 4.选择 CCS 主菜单“View”下的“Watch Window”命令,CCS 会弹出一个观察窗口,用于

显示运行时所观察的变量值。在观察窗中选择“Watch1”标签,单击“Name”列的表达式图标

,输入要观察的变量,例如“y”,运行后就可以看到它的值,如图 6-1 所示。

图 6-1 观察窗口

5.使用 CCS 的断点和 profile 工具,观察选用不同优化选项(无、-O0、-O1、-O2、-O3)时的执行速度和代码长度。

具体实现的方法是:选择 CCS 主菜单“Project”下的“Built Options”命令,打开 Built Options窗口,如图 6-2 所示。在“Compiler”选项的“Basic”下,分别选择“Opt Level”中的“None、-O0、-O1、-O2、-O3”。每选择其中的一种,都要重新编译、汇编和连接,并且重新装载程序代

码,然后使用 CCS 的断点和 profile 中的剖析时钟,观察运行速度的变化情况。 选择 CCS 主菜单“View”下的“Mixed Source/ASM”,可以在 CCS 的编辑窗口中同时看到

C 程序所对应的汇编指令及机器码,进而查看在选用不同优化选项(无、-O0、-O1、-O2、-O3)时的代码长度变化情况。

DSP 本科实验教材

17

图 6-2 Built Options 窗口

表 6-1 选用不同优化选项时的代码长度和执行时间情况

使用的优化选项 代码长度(字) 执行时间(CPU时钟周期)

无 O0 O1 O2 O3

四、实验报告的要求

1.说明该工程中每个文件的作用和功能。回答下列问题: (1)在该工程中如果没有“rts.lib”文件,能否进行编译、汇编和连接? (2)在该工程中 c_int00 的作用是什么? (3)说明中断矢量处理程序 vectors.asm 和 C 语言主程序是怎样进行接口的? (4)当采用地址指针编程时,如果将全局指针改为局部指针,为什么会提高程序的执行速

度? (5)当不采用地址指针编程时,如果在 for 循环体中使用一个局部变量,为什么会提高程

序的执行速度? (6)比较采用地址指针编程和不采用地址指针编程,编译后的汇编程序有什么区别?执行

速度有无变化? 2.总结上机调试步骤,调试情况,调试中遇到的问题是如何解决的。 3.填写表 6-1。

DSP 本科实验教材

18

实验七 混合编程实验

一、目的

1.通过创建一个简单的信号处理应用工程,学习用 C 语言和汇编语言混合编程的方法,掌

握混合编程程序的基本框架和程序的组织。 2.学习使用 CCS 的探测点(Probe Point)、图表(Graph)和文件 I/O(File I/O)等调试工具。

二、内容

该实验开发并运行一个 C 语言和汇编语言混合编程的程序,指导学生如何建立混合编程的

工程,如何在 C 程序中调用汇编语言子程序。学习使用 CCS 的探测点(Probe Point)、图表(Graph)和文件 I/O(File I/O)等调试工具。

本实验的工程中含有下列三个函数: (1)主函数 main 在显示一条提示“volume example started”之后,进入无限循环,不断调用两个函数 dataIO

和 processing。 (2)processing 函数 对输入缓冲区的每个采样值乘以一个增益值“gain”,并将结果存放到输出缓冲区中。该函

数还调用汇编子程序 load.asm。load.asm 根据 processing 传递过来的参数 processingLoad 来消耗

指令周期,用以模拟复杂信号处理算法在时间上的消耗。 (3)dataIO 函数 不执行任何实质性操作而直接返回。实验者可以在该函数的位置上,通过 CCS 中的 Probe

Point(探针)工具,从 PC 机文件中读取数据到 inp_buffer 中,作为 processing 函数的输入参数。

三、实验步骤

1.将 C:\ti\tutorial\sim54xx\volume1 文件夹复制到 D:\自己命名的文件夹下。 2.进入 CCS,打开 volume1.pjt。 3.在工程视图中将所有“+”打开,如图 7-1 所示,可以看到此工程中含有以下文件:

(1)volume.c:C 主程序 (2)volume.h:头文件 (3)load.asm:一个汇编循环程序,被 C 程序调用。调用时带有一个参数(argument) (4)vectors.asm:在中断向量表中定义了一个复位入口点。 (5)volume.cmd:命令文件,将段定位到存储器。 (6)rts.lib:运行支持库,提供 DSP 的 C 运行支持。 (7)c5416sim.gel:GEL 文件,用来扩展 DSP 的功能。

4.查看 volume.c 源文件,分析主程序完成的功能。 5.添加 Probe Point,将 PC 数据文件与探测点关联。 探测点 Probe Point 是开发算法的一个非常有用的工具,它的主要功能如下: (1)将 PC 机文件中的数据传送到 DSP 目标板上的内存中,以供算法使用。 (2)将 DSP 目标板上的输出数据传送到 PC 机文件中,以供分析之用。 (3)更新窗口内容,实时反映数据的变化。

DSP 本科实验教材

19

本实验在 Simulator 环境下,使用探测点 Probe Point 将 PC 机上的数据文件 sine.dat 送往 DSP

目标程序作为测试数据,同时,使用断点在到达 Probe Point 时自动更新所有打开的窗口,这些

窗口包括输入/输出数据的图表等。 具体的实验步骤如下: (1)双击 Project 工具栏上的 Rebulid All 图标,重新生成程序。 (2)执行主菜单“File”中的“LoadProgram”命令,选择 Volume.out 并打开。 (3)在工程视图中双击 Volume.c 以在右边的编辑窗口中显示源代码。 (4)将光标放在 volume.c 程序中的主函数 dataIO()那一行上。 (5)在 Project 工具栏上双击“Probe Point”按钮,添加 Probe Point。 (6)执行主菜单命令“File”中的“File I/O”,出现 File I/O 对话框,如图 7-2 所示。在对

话框中选择输入/输出文件。

图 7-2 File I/O 窗口

(7)单击“File Input”栏,再单击“Add File”按钮。 (8)选择 sine.dat 文件,此文件与 volume.c 文件在同一目录中。 (9)单击“Open”按钮,将文件添加到 File I/O 列表中。此时将出现一个控制窗口,如图

7-3 所示。可以在运行程序时使用这个窗口来控制数据文件的开始、停止、前进、后退等操作。 (10)在 File I/O 对话框中的 Address 域填入 inp_buffer,在 Length 域填入 100,同时将 Wrap

Around 框选中(如图 7-2 所示)。其中:

DSP 本科实验教材

20

图 7-3 File I/O 控制窗口

Address 域指示的是从文件中读取的数据将要存放的地址。 inp_buffer 是在 volume.c 中定义的整型数组,其长度为 BUFFSIZE。 Length 域指示的是每次到达 Probe Point 时从数据文件中读取多少个样点。这里取为 100 是

因为 BUFFSZE=100,即每次取 100 个样值存放在输入缓冲中。如果 Length 超过 100 则可能导

致数据丢失。 选中 Wrap Around 表明读取数据的循环特性,每次读至文件结尾处将自动从文件头开始重

新读取数据。这样将从数据文件中读取一个连续(周期性)的数据流。 (11)单击 File I/O 对话框中的“Add Probe point”按钮,将出现 Break/Probe/Profile Points

对话框,选中 Probe Points 栏。 (12)在 Probe Point 列表中,高亮显示写有 volume.c line 61→No Connection 行,表明第 61

行已设置 Probe Point,但还没有与 PC 文件相关联。 (13)在 Connect 域,单击向下箭头并从列表中选 sine.dat。 (14)单击 Replace 按钮,Probe Point 列表指示 Probe Point 已经与 sine.dat 文件相关联。 (15)单击“OK”按钮,File I/O 对话框指示文件连至一个 Probe Point。 (16)单击“OK”按钮,关闭 File I/O 对话框。 6.关于 CCS 数据文件的格式 CCS 的文件 I/O 功能可以使用两类数据文件,一种是文本格式的文件,一般扩展名为.dat,

其中以文本形式存放十六进制数、整数、长整型数或浮点数据;另一种是二进制格式的文件,

扩展名为.out。 用任意的文本编辑器打开 sine.dat 文件,观察其中的文件格式。下面列出该文件的开始几列

数据: 1651 1 0 1 0 0x0000 0x000f 0x001e 0x002d 0x003a 0x0046 0x0050 …… 该文件的第一行指定格式,之后的每一行是一个采样数据。在第一行中以空格分为五个域,

其中 1651 是固定的数,第二个域是数据格式,1 表示十六进制数,2 表示整数,3 表示长整数,

4 表示浮点数。后面的域依次对应 DSP 存储器的起始地址、存储器页以及长度。 7.图形显示 CCS 提供很多方法将程序产生的数据画图显示出来,包括时域/频域波形显示,星座图、眼

图及图像显示。 下面使用频域/时域波形显示功能,观察一个时域波形。 (1)执行主菜单“View”中的命令“Graph”,选择“Time/Frequency”,弹出 Graph Property

对话框。

DSP 本科实验教材

21

(2)在 Graph Property 对话框中,更改图形的标题、起始地址、采集缓冲区的大小、显示

数据大小、DSP 数据类型、自动伸缩属性及最大 Y 值等。如图 7-4 所示。

图 7-4 更改图形属性 (3)单击“OK”按钮,将出现一个显示 inp_buffer 波形的图形窗口。 (4)在图形窗口中单击右键,从弹出菜单中选 Clear Display,清除已有的显示波形。 (5)再次执行主菜单“View”中的命令“Graph”,选择“Time/Frequency”。 (6)将 Graph Titl 地址栏改为 Input buffer。其他设置不变。 (7)单击”OK”按钮,出现一个显示 Input buffer 波形的图形窗口,同样单击右键从弹出菜

单中选 Clear Display,清除己有的显示波形。 8.程序和图形的动画显示 设置一个 Probe Point,它将临时中断程序运行,将 PC 机上数据传给目标,然后继续执行程序。

然而 Probe Point 将不会更新图形显示。因此,应该通过创建一个断点,使图形窗口自动更新。

使用 Animate 命令,使程序到达断点并更新窗口后能自动继续执行。 (1)在 volume.c 窗口,将光标放在调用 dataIO()行上。 (2)在 Project 工具栏上单击 Toggle Breakpoint 图标,此时该行有两种颜色显示,表明该行

上同时设有一个断点和一个 Probe Point。将断点和 Probe Point 设在同一行上可以使程序在只中

断一次的情况下执行两个操作:传输数据和更新图形显示。

(3)在 Debug 工具栏单击 Animate 按钮或按 Fl2 键。此命令将运行程序,碰到断点后临

时中断程序运行,更新窗口显示,然后继续执行程序。与 Run 不同的是,Animate 会继续执

行程序直到碰到下一个断点。只有人为干预时,程序才会停止运行。因此,可将 Animate 命令

理解为一个“运行+中断+继续”的操作。 (4)每次碰到 Probe Point 时,CCS 将从 sine.dat 文件中读取 100 个样值,并将它写至输入

缓冲 inp_buffer。由于 sine.dat 文件保存的是 40 个采样值的正弦波形数据,因此每个图形包括

2.5 个 sine 周期波形,如图 7-5 所示。 (5)通过同样的步骤可以看到 out_buffer 的输出波形。改变增益值 Gain,观察输出波形的

DSP 本科实验教材

22

变化情况。

图 7-5 图形显示

四、实验报告的要求

1.说明该工程中每个文件的作用和功能。回答下列问题: (1)在该工程中头文件“volume.h”的作用是什么? (2)写出 processing()函数在调用汇编子程序 load.asm 时遵循了 DSP 混合编程的哪些约

定? (3)如果要输入一个方波信号,应该怎样设计相应的数据文件(.dat)? 2.总结上机调试步骤,调试情况,调试中遇到的问题是如何解决的。 3.总结 CCS 所提供的探测点(Probe Point)、图表(Graph)、文件 I/O(File I/O)等调试工具的

使用方法。

实验八 FIR 滤波器的实现

一、目的

1.熟悉 FIR 滤波器的工作原理。 2.学习用 MATLAB 设计 FIR 滤波器的方法。 3.掌握 FIR 滤波器的汇编程序设计与实现 4.学习 CCS 的文件输入输出操作。了解在 CCS 的软件仿真环境(Simulator)下,怎样进行数

字信号处理算法的仿真调试。

二、内容

设计一个 FIR 低通滤波器,其设计要求如下: 截止频率: 1500Hz 阻带衰减: -50dB 以下 滤波器级数: 81

下面是设计中要说明的几个问题:

DSP 本科实验教材

23

1.本实验在实现 FIR 滤波器时采用了三种方法,分别是:基于循环缓存的 FIR 滤波器(fir1)、基于线性缓存的 FIR 滤波器(fir2)和系数对称的 FIR 滤波器(fir3)。

2.滤波器的系数在 Matlab 中求得,设计的依据是: (1)根据 FIR 低通的设计要求:截止频率 1500Hz、阻带衰减-50dB 以下、滤波器级数 81。 (2)采用 Q16 定标。 (3)采样频率为 8000Hz。 3.Matlab 中含有多个设计 FIR 滤波器的函数,包括:

fir1 基于窗函数的 FIR 滤波器设计——标准响应 fir2 基于窗函数的 FIR 滤波器设计——任意响应 fircls 约束最小二乘 FIR 滤波器设计——任意响应 fircls1 约束最小二乘 FIR 滤波器设计——低通与高通 firls 最小二乘 FIR 滤波器设计 firrcos 升余弦 FIR 滤波器设计 intfilt 内插 FIR 滤波器设计 remez Parks_McClellan 最优 FIR 滤波器设计 remezord Parks_McClellan 滤波器阶数选择

在本实验中采用的是 fir1 函数,求出的滤波器响应如图 8-1 所示。在项目文件夹中有相应

的求系数的 Matlab 程序,其数据存放在 fircoef.dat 文件中。在程序中将滤波器系数存放于.data段中。

图 8-1 FIR 滤波器的响应曲线

4.关于输入数据 输入数据是将三个离散正弦信号进行叠加组成。这三个正弦信号幅度都是 0.5,频率分别是

500Hz(处在通带),1550Hz(处在过渡带)和 3600Hz(处在截止带)。按照采样频率 8000Hz、1000 个采样点进行组合,产生的数据采用 Q15 定标,然后存放在 input.dat 文件中。

三、实验步骤 1.预习实验程序 实验八提供了四个有关程序:汇编主程序 test8.asm、中断矢量处理程序 vectors.asm、命令

文件 test9.cmd 及数据文件 input.dat(参见文件夹“test8”)。 读懂主程序 test8.asm,比较程序段 fir1、fir2 和 fir3 的不同点,了解循环缓存和线性缓存的

实现方法,理解指令 firs 的意义,即当滤波器的系数对称时,利用指令 firs 可减小一半的循环次

数,从而提高执行速度的特点。 2.编译项目,装载程序和数据。 3.在调试时,要了解程序中对 fir1、fir2 和 fir3 的调用过程,在适当的地方设置断点,以便

观察三种设计方法的执行结果、运行速度和代码长度等。

DSP 本科实验教材

24

4.在 ccs 中执行主菜单“View”中的命令“Graph”,选择“FFT Magnitude”,打开图形窗

口,观看输入信号频谱图,其设置如图 8-2 所示,输入信号的频谱图如图 8-3 所示。将 start Address一栏改为 output1、output2 或 output3,可观看输出信号的频谱图如图 8-4 所示。

图 8-2 图形窗口的设置

图 8-3 输入信号频谱图

图 8-4 输出信号频率图

DSP 本科实验教材

25

四、实验报告的要求

1.说明该工程中每个文件的作用和功能。回答下列问题: (1)在该工程中程序段 fir1、fir2 和 fir3 的不同点是什么? (2)分析循环缓存和线性缓存的实现方法。 (3)在 FIR 滤波器设计中,什么情况下可以使用指令 FIRS? 2.总结上机调试步骤,调试情况,调试中遇到的问题是如何解决的。

实验九 基于 DSP 的数字图像处理算法的实现

一、目的

1.通过创建一个简单的数字图像处理应用工程,学习用 C 语言编写数字图像处理的程序。 2.观察 DSP 进行图像处理的速度和效果,对 DSP 在图像处理方面的优势有更深刻的认识。 3.掌握 CCS 的文件装载功能和图形输出操作。

二、内容

1.对输入的灰度图像(Lena)进行二值化处理。 2.对灰度图像的亮度取反,相当于是原图像的底片。 3.对灰度图像的亮度进行调整。 4.求灰度图像的直方图。

三、实验步骤

1.在 CCS 环境下打开文件夹“test9”中的工程 test9.pjt。 2.经过编译,汇编和连接后生成 image.out 文件。装载.out 文件。 3.打开 image.c,阅读并分析主程序完成的功能。 (1)dataIO 函数不执行任何操作,仅用来在该处设置断点以装载数据或是观察处理结果。 (2)Binary 函数用来对输入灰度图像进行二值化处理;Brightinvert 函数用来对灰度图像的

亮度取反,相当于是原图像的底片;Dimming 函数用来对图像的亮度进行调整;Histogram 函数

用来求灰度图像的直方图。 4.在 while(1)循环的第一个 dataIO 函数处添加断点。程序执行到此断点后,选择主菜单

“file”下的“data”命令,在下拉菜单中选择“load”,在弹出的对话框中选择 lena.dat 文件。

此时会弹出一个装载设置的窗口,然后进行配置,如图 9-1 所示。

图 9-1 装载的配置

DSP 本科实验教材

26

5.现在已经把一幅 128×128 的 lena 图像输入到了 DSP 的数据存储器中。选择主菜单“view”

下的“graph”命令,在下拉菜单中选择“Image”,在弹出的窗口中设置,如图 9-2 所示。

图 9-2 观看输入图像的设置

6.点击“OK”即可看到一幅输入的 lena 图像。如图 9-3 所示。

图 9-3 输入的 lena 图像

7.在第二个 dataIO()处设置断点,程序运行到此处后,打开 graph 设置窗口,进行设置

如图 9-4 所示。点击“OK”即可看到图像二值化后的结果如图 9-5 所示。

图 9-5 二值化图像

DSP 本科实验教材

27

图 9-4 观察图像二值化的设置

8.在第三个 dataIO()函数处设置断点,程序运行到此处后,打开 graph 设置窗口,进行

设置同步骤 7。点击“OK”即可观察图像亮度取反后的结果如图 9-6 所示。

图 9-6 图像亮度取反后的结果

9.在第四个 dataIO()函数处设置断点,程序运行到此处后观察图像亮度的改变,设置同步

骤 7,处理后的结果如图 9-7 所示。

图 9-7 图像亮度的改变

10.在第五个 dataIO()函数处设置断点,观察灰度图像的直方图。其设置如图 9-8 所示。该

灰度图像的直方图如图 9-9 所示。

DSP 本科实验教材

28

图 9-8 观察灰度图像的直方图的设置

图 9-9 灰度图像的直方图

四、实验报告的要求

1. 说明该工程中每个程序的作用和功能。 2.总结上机调试步骤,调试情况,调试中遇到的问题是如何解决的。 3.总结 CCS 所提供的断点、图表(Graph)等调试工具的使用方法。

DSP 本科实验教材

29

第二部分 硬件(Emulator)实验

实验十 定时器

一、目的

1. 了解SEED-DTK-DBD型DSP实验箱及其SEED-DEC5416实验板卡的结构和工作原理。 2. 掌握用汇编语言如何进行DSP的初始化程序设计。 3. 熟悉TMS320C54x片内定时器的工作原理,掌握定时器的长时间间隔定时处理方法。 4. 熟悉如何编写中断服务程序。 5. 了解 CCS Emulator 硬件仿真开发环境,掌握 CCS 的工程结构以及编辑、汇编、连接及

开发调试的基本过程。

二、内容

1. 用TMS320C5416的片内定时器实现方波信号发生器,在引脚XF端输出周期为2S、占空

比为50%的方波信号。设CLKOUT为100MHz,通过中断方式完成编程。 在实验箱的SEED-DEC5416板卡上,TMS320C5416的XF引脚与LED指示灯D3连接。本实验,

检测的方法是:在方波信号的正半周,使D3点亮1s,并向I/O口(地址8002H)输入0FFH,点亮

该口上连接的8个LED指示灯;在方波信号的负半周使D3熄灭1s,并向8002H口输入0,熄灭该

口上的8个灯。 2. 编写程序,使用片内定时器定时,使引脚XF上的指示灯D3点亮2s,熄灭1s,循环重复。

三、实验背景知识介绍

1.片内定时器简介 TMS320C5416片内集成了一个可编程可预标定的定时器,其结构如图10-1所示。

图10-1 片内定时器结构图 片内定时器内部含有三个可设置的16位存贮器映像寄存器(MMR),分别为定时寄存器

TIM、周期寄存器PRD和定时器控制寄存器TCR。TIM地址为0024h,做减法计数,其初值由周

DSP 本科实验教材

30

期寄存器PRD进行装载,当计数器计满溢出时可向主机发出中断申请。PRD地址为0025h,用来

重装TIM的初值。TCR地址为0026h,它包含了定时器的控制与状态信息,以及预标定计数器PSC和预标定分频系数TDDR。

定时器的定时周期计算公式:定时周期=CLKOUT×(TDDR+1)×(PRD+1) 2.vecs.asm文件简介 vecs.asm是DSP的中断向量表文件,该文件一般采用汇编语言编写,其功能主要是将中断服

务程序的地址(中断向量)装载到存储器的合适区域。在文件中通常用汇编伪指令.sect来生成

一个表,该表包含了中断向量的地址和跳转指令。因为中断的标志符在汇编语言模块外部使用,

所以要用伪指令.ref 或.global对标志符进行声明。 3.SEED-DTK DBD型DSP实验箱简介 SEED-DTK(DSP Teaching Kit)是一套可以满足大学本科、研究生和教师科研工作的综合

实验设备。SEED-DTK DBD实验箱是北京合众达公司在总结以往产品的基础上,以独特的三DSP结构、强大的DSP主板功能、丰富的外围实验电路和精湛的产品工艺形成的高性能产品。

SEED-DTK实验箱的原理框图如图10-2所示。

图10-2 SEED-DTK实验箱的原理框图

SEED-DTK实验箱上配置了4块主要的板卡,分别是: (1)DSP主板-SEED-DEC5416:配置TMS320C5416 DSP,大部分DSP实验在此板上进行。 (2)人机接口板-SEED-MMI5402:配置TMS320C5402 DSP,它为整个实验箱提供人机接

口操作平台和信号发生器。 (3)专用实验板-SEED-DSK2812:配置TMS320C2812 DSP,其上可进行电机控制、SPI

串口通讯和CAN总线通讯等实验。 (4)I/O板-SEED-DTK_IO1:它配置有模拟信号输入输出连接器、交通信号灯、8个LED指

示灯及电源指示灯等,提供I/O口功能。

DSP 本科实验教材

31

关于SEED-DTK DBD型DSP实验箱的结构及其工作原理请读者参考《SEED-DTK DBD实验

手册》。 本实验在实验箱的DSP主板SEED-DEC5416上进行,关于SEED- DEC5416实验板卡的工作

原理请读者参考《SEED-DEC5416用户指南》。 4.SEED-DEC5416板卡的外接晶体频率为20MHz。本实验取CLKOUT为100MHz。

四、实验步骤

1. 将DSP仿真器与计算机连接好。 2. 本实验在实验箱的SEED-DEC5416板卡上进行。将DSP仿真器的JTAG插头与实验箱的

SEED-DEC5416板的J1相连接(注意:不要带电插拔JTAG插头,以免损坏DSP仿真器或实验箱

的板卡)。 3. 启动PC计算机。当计算机启动后,打开SEED-DTK DBD的电源。观察SEED-DTK-IO1

板卡的+5V、+3.3V、+15V、-15V的电源指示灯是否点亮;SEED_DEC5416板卡的D2以及

SEED-DSK2812板卡的D2是否点亮;若有不亮的,则应断开电源,检查实验箱。 4. 打开 CCS,进入 CCS 硬件操作环境,装入 vc5416-timer.pjt 工程文件,开始进行调试。 5.实验内容 1 的主程序是 vc5416-timer.asm(参见文件夹“VC5416_TIMER”)。实验内容 2

由学生自己编程。实验前要作好充分准备,包括读懂实验程序,分析程序中的原始数据和最终

结果,了解硬件调试步骤及调试方法等。 6.通过实验验证自己的分析正确否,总结实验中遇到的问题,根据实验报告的要求,认真

撰写实验报告。

五、实验报告的要求

1. 程序说明 说明主程序的结构和功能,对每条指令进行注释。 2. 调试说明 总结上机调试步骤和调试情况,说明调试中遇到的问题是如何解决的。 3. 分析和总结片内定时器的结构特点及编程中的要点,写出片内定时器初始化的步骤。 4.如果本实验通过查询方式进行,应该怎样编程?

实验十一 数字 I/O 口的应用

一、目的

1. 了解SEED-DTK DBD实验箱的板卡SEED-DTK_IO1的结构和工作过程。掌握DSP扩展数

字I/O口的方法。 2. 掌握数字I/O的访问指令及TMS320C54x的长时间间隔定时处理方法。 3. 进一步熟悉在汇编条件下如何组织段结构和编写程序。 4. 了解 CCS Emulator 硬件仿真开发环境,掌握 CCS 的工程结构以及编辑、汇编、连接及

开发调试的基本过程。

二、内容

DSP 本科实验教材

32

使用SEED-DTK DBD实验箱的SEED-DTK_IO1板卡作为硬件平台,采用TMS320C5416的片

内定时器进行时间定时,实现十字路口红绿灯控制系统的设计。设CLKOUT为100MHz,通过查

询或中断方式完成十字路口东西和南北方向红绿灯的循环控制编程。具体要求如下: 1.东西方向通行,南北方向禁止:先将4个黄灯D2、D5、D8、D11点亮1s后熄灭;再将2

个绿灯D1、D7及2个红灯D6、D12点亮5s后熄灭。 2.南北方向通行,东西方向禁止:先将4个黄灯D2、D5、D8、D11点亮1s后熄灭;再将2

个绿灯D4、D10及2个红灯D3、D9点亮5s后熄灭。

三、实验背景知识介绍

1.SEED-DTK_IO1板卡的结构 SEED-DTK_IO1板卡的结构如图11-1所示,它由下列7部分组成:

图11-1 SEED-DTK_IO1模板结构图

(1)64个宏单元的可编程CPLD,完成交通灯(12个)和I/O口(8个LED指示灯)实验。 (2)音频驱动电路,直接驱动8Ω无源音箱。 (3)MIC接口和Line In接口。 (4)电源工作指示灯。 (5)D/A输出测试端。 (6)立体声耳麦和音频线。 2.DSP系统中数字I/O的实现 TMS320C54x系列DSP芯片一般只提供少量的数字I/O资源,而在某些DSP应用系统中经常需

要进行大量的数字量输入与输出,因此,进行外部I/O口的扩展是非常必要的。 实现I/O口扩展的方法一般有两种:一种是采用诸如74LS273、74LS373、74LS244、74LS245

之类的集成电路,扩展数字I/O口;另一种是采用可编程阵列CPLD,在其内部做锁存或组合逻

辑,然后与DSP接口,从而组成数字I/O口。 实验箱的SEED-DTK_IO1板卡采用的是后者,其CPLD的电路图如图11-2所示。使用了

CY37064VPIO0芯片进行交通灯(12个)和I/O口(8个LED指示灯)的驱动,当相应的I/O口输

出为1时,点亮相应的LED指示灯,否则,熄灭相应的LED指示灯。

DSP 本科实验教材

33

图11-2 SEED-DTK_IO1板卡的CPLD电路图

3. 交通灯控制的连接关系 控制交通灯的I/O口地址为8000h(I/O空间)。其连接关系如图11-3及表11-1所示。

图11-3 交通灯控制示意图

表11-1 交通灯控制口8000h的连接关系表

LED灯 D12 D11 D10 D9 D8 D7 D6 D5 D4 D3 D2 D1

8000h的位 D011 D010 D09 D08 D07 D06 D05 D04 D03 D02 D01 D00

方向 北 东 南 西

灯颜色 红 黄 绿 红 黄 绿 红 黄 绿 红 黄 绿

4.SEED-DEC5416实验箱的外接晶体频率为20MHz。本实验取CLKOUT为100MHz。

DSP 本科实验教材

34

四、实验步骤

1. 将DSP仿真器与计算机连接好。 2. 本实验在实验箱的SEED-DEC5416板卡和SEED-DTK_IO1板卡上进行。将DSP仿真器的

JTAG插头与实验箱的SEED-DEC5416板的J1相连接(注意:不要带电插拔JTAG插头,以免损坏

DSP仿真器或实验箱的板卡)。 3. 启动PC计算机。当计算机启动后,打开SEED-DTK DBD的电源。观察SEED-DTK-IO1

板卡的+5V、+3.3V、+15V、-15V的电源指示灯是否点亮;SEED_DEC5416板卡的D2以及

SEED-DSK2812板卡的D2是否点亮;若有不亮的,则应断开电源,检查实验箱。 4. 打开CCS,进入CCS硬件操作环境。 5.本实验不提供实验程序,由学生在实验十的基础上,自己用汇编语言编程实现。 6. 实验前要作好充分准备,包括了解 SEED-DTK_IO1 模板的结构和工作过程,编写实验程

序,了解调试步骤及调试方法等。 7. 通过实验验证自己编写的程序正确否,总结实验中遇到的问题,根据实验报告的要求,

认真撰写实验报告。

五、实验报告的要求

1. 说明程序的结构和功能,对每条指令进行注释。 2. 总结上机调试步骤和调试情况,说明调试中遇到的问题是如何解决的。 3. 分析和总结 DSP 的 I/O 扩展方法和应用编程中的要点。

实验十二 同步串口与 A/D 转换

一、目的

1. 了解TMS320C54x片内同步串口McBSP的基本结构和工作原理,掌握McBSP的初始化设

置。 2. 了解实验箱的SEED-DTK5416模板的结构和工作过程。熟悉CODEC芯片TLV320AIC23B

做为A/D使用的工作原理。掌握CODEC的初始化设置。 3. 熟悉在混合编程条件下如何组织段结构和编写C语言程序及汇编程序。 4. 进一步了解 CCS Emulator 硬件仿真开发环境,掌握 CCS 的工程结构以及编辑、汇编、

连接及开发调试的基本过程。

二、内容

使用实验箱的SEED-DEC5416板卡作为硬件平台,采用TMS320C5416的片内McBSP与CODEC芯片TLV320AIC23B进行串行通讯,实现A/D转换。通过混合编程完成对输入正弦信号、

方波信号和三角波信号的A/D采样。

三、实验背景知识

DSP 本科实验教材

35

1.A/D转换实验硬件平台结构 同步串口与A/D实验在SEED-DTK DBD实验箱上进行,其硬件平台的结构如图12-1所示。

图12-1 同步串口与A/D转换实验硬件平台示意图

2.McBSP简介 多缓冲串行口McBSP(Multichannel Buffered SerialPort)是DSP的片上外设资源。它可以与其

它DSP、CODEC和带有SPI接口的器件进行连接。在TMS320VC5416上共有3个McBSP,分别为

McBSP0、McBSP1和McBSP2。每个McBSP的结构图如图12-2所示。C54x的McBSP具有下列功

能: (1)全双工通信。 (2)双缓冲的发送和三缓冲的接收,采用连续的数据流进行收发。 (3)接收和发送具有独立的时钟信号和帧同步信号。 (4)多达 128 个发送和接收通道。 (5)可直接与各种工业标准的编解码器、模拟接口芯片(AICs)以及其它串行 A/D 和 D/A 芯

片接口和通信。包括:T1/E1 帧调节器、与 MVIP 转换器兼容和适用于 ST-BUS 的器件、MVIP帧调节器、H.100 帧调节器、SCSA 帧调节器、IOM-2 兼容器件、AC-97 兼容器件(提供必需的

多相帧同步能力)、IIS 兼容器件、SPI 器件等。 (6)外部移位时钟发生器或内部频率可编程移位时钟。 (7)可选择多种数据位的大小,包括 8、12、16、20、24 和 32 位。 (8)具有 A 律、μ律数据压扩处理功能。 (9)进行 8 位数据传输时,可选择低位在前或高位在前。 (10)帧同步信号和时钟信号的极性及速率可编程。 (11)内部时钟和帧的产生可编程。 串行同步通信信号如下: (1)帧同步信号:FSR、FSX (2)位-时钟: CLKR、CLKX (3)串行数据流:DR、DX 串行同步通信协议如下: (1)串行数据流起始时刻称为帧同步事件。帧同步事件由位-时钟采样帧同步信号给出。

SEED-MMI5402

板卡

TMS320VC5416

TLV320AIC23B CODEC

SEED-DEC5416 板卡

由 D/A构成的信号 发生器

TMS320VC5402 100MIPS DSP

立体声或麦克风输入接口

控制口

放大 滤波

A/D 转换

数字音频接口

(数据口)

McBSP2

McBSP0

SEED-DTK_IO1 板卡

CPLD

DSP 本科实验教材

36

图12-2 McBSP的结构图

(2)串行数据流长度:串行传输的数据流位数达到设定的长度后,结束本次传输,等下一

个帧同步信号到达,再发起另一次串行传输。 (3)串行数据流传输速度:即每一个串行位的持续时间,由位-时钟决定。 (4)如何取得帧同步事件,何时采样串行数据位流或何时输出串行数据位流,是可以通过

McBSP的寄存器进行配置的。其中SPCR1x后面的寄存器是二次寻址的,其过程如下:首先向

SPSAx寄存器中写入要操作的寄存器子地址,然后再向SPSDx中写入数据,从而完成操作。 3. 系统控制寄存器SYSCNTL对McBSP接口的控制 SEED-DEC5416模板上有4个使用McBSP的场合:CODEC的控制口和数据口;扩展总线上

的两个供用户使用的McBSP口。它们通过多路复用的方式使用TMS320C5416片内的3个McBSP。多路复用的选择由系统控制寄存器SYSCNTL中的位McBSP0SEL、McBSP1SEL和McBSP2SEL控制。TMS320C5416片内的3个McBSP的使用和控制如图12-3所示。具体配置如下:

(1)McBSP0由位McBSP0SEL控制: 当McBSP0SEL=0时,McBSP0与CODEC的数据口连接; 当McBSP0SEL=1时,McBSP0与扩展总线连接,作为外部使用的McBSP1。

(2)McBSP1由位McBSP1SEL控制: 当McBSP1SEL=0时,McBSP1与扩展总线连接,作为外部使用的McBSP1; 当McBSP1SEL=1时,McBSP1与扩展总线连接,作为外部使用的McBSP2。

(3)McBSP2由位McBSP2SEL控制: 当McBSP2SEL=0时,McBSP2与CODEC的控制口连接; 当McBSP2SEL=1时,McBSP2与扩展总线连接,作为外部使用的McBSP2。

DSP 本科实验教材

37

图12-3 McBSP在SEED-DEC5416板卡上的配置情况

系统控制寄存器SYSCNTL由SEED-DTK_IO1板卡上的CPLD来实现,它位于I/O空间的

0001h,只写。其结构如图12-4所示。

图12-4 系统控制寄存器SYSCNTL的结构图

系统控制寄存器SYSCNTL其他各位的使用简介如下: (1)D00、D01 DBCNTL1,0: 扩展板控制位

0 扩展总线的DB_CNTL1,0线为0(默认状态) 1 扩展总线的DB_CNTL1,0线为1(默认状态)

(2)D02 WCEN: 看门狗使能位 0 看门狗禁止(默认状态) 1 看门狗使能

(3)D06 INT2SEL: 系统INT2方式的选择 0 若设为HPI为BOOT方式时,ITN2连接HINT(默认值) 1 INT2为USB中断与扩展板的INT2中断共享

4.TLV320AIC23B简介 TLV320AIC23B(以下简称AIC23)是TI公司推出的一款高性能的立体声音频Codec芯片。

AIC23的结构如图12-5所示。其内部配置有耳机输出放大器,支持MIC和LINE IN两种输入方式

(二选一),且对输入和输出都具有可编程增益调节。AIC23的模数转换(ADCs)和数模转换

(DACs)部件高度集成在芯片内部,采用了先进的Sigma-delta过采样技术,可以在8K到96K的频率范围内提供16bit、20bit、24bit和32bit的采样,ADC和DAC的输出信噪比分别可以达到90dB和100dB。同时,AIC23还具有很低的能耗,在回放模式下的功率仅为23mW,在省电模式下更

是小于15uW。

DSP 本科实验教材

38

图12-5 TLV320AIC23B的结构图

5. McBSP与AIC23的接口 AIC23与微处理器的接口有2个,一个是控制口,用于设置AIC23的工作参数;另一个是数

字音频接口,简称数据口,用于传输AIC23的A/D、D/A数据。在SEED-DEC5416板卡上,将C5416的McBSP0与AIC23的数据口接口,将McBSP2与AIC23的控制口接口。

(1)AIC23的数据口及其与McBSP0的接口 AIC23的数据口有下列5个引脚: 1)BCLK: 数字音频接口时钟信号(bit时钟) 2)LRCIN: 数字音频接口DAC的帧信号

DSP 本科实验教材

39

3)LRCOUT: 数字音频接口ADC的帧信号 4)DIN: 数字音频接口DAC的数据输入 5)DOUT: 数字音频接口ADC的数据输出 AIC23的数据口有下列4种工作方式,分别为: 1)Right justified 2)Left justified 3)IIS mode 4)DSP mode 在本实验中,AIC23的数据口采用DSP模式,主模式;McBSP0采用IIS,从模式。AIC23的

数据口可以与McBSP0进行无缝连接,其连接如图12-6所示。LRCIN和LRCOUT必须与McBSP的帧同步信号相连接。注意:由于AIC23工作于主模式,因此,McBSP0的接收时钟和AIC23的BCLK都由AIC23来提供。AIC23工作于DSP模式的时序图如图12-76所示,数据口在LRCIN或

LRCOUT的下降沿开始进行数据传送,第一个数据字为左声道数据,紧跟其后的是右声道的数

据字。输入字长由寄存器IWL来定。图12-7表示LRP = 1 (默认值 LRP = 0)。 McBSP02的初始化配置值如表12-1所示。

图12-6 AIC23的数据口与McBSP0的接口

图12-7 AIC23数据口的DSP模式时序图

(2)AIC23的控制口及其与McBSP2的接口 AIC23的控制口有4条引脚,均为输入引脚,它们的功能如下: 1)SDIN:串行配置数据输入 2)SCLK:串行位时钟输入

3)CS : 片选信号输入

4)MODE:串行接口输入模式,MODE=0,两线的IIC方式;MODE=1,3线的SPI方式。

CLKX CLKR

FSX

FSR DX

DR

VC5416 McBSP0

BCLK LRCIN LRCOUT DIN DOUT AIC23 数据口

DSP 本科实验教材

40

表12-1 McBSP0与AIC23数据口接口时的配置值

寄存器名称 配置值 功 能

SPCR1 4081H 使能发送,接收数据左对齐,用0填充DRR的低位

RCR1 0140H 接收单相帧,每相2个数,数据长度为16位

RCR2 0001H 接收单相帧,每次传输需要帧同步,接收1比特延迟

XCR1 0140H 发送单相帧,每相2个数,数据长度为16位

XCR2 0001H 发送单相帧,每次传输需要帧同步,发送1比特延迟

PCR 0003H

McBSP0为从模式,SFX及SFR为输入,由外部驱动,且极性为高有

效;CLKX及CLKR为输入,由外部驱动,CLKX上升沿对发送数据

采样,CLKR下降沿对接收数据采样

SRGR1 0034H 时钟分频数为34H,帧同步信号脉宽为1一个CLKG,McBSP0的波

特率为1.536MHz

SRGR2 0120H 采样率发生器时钟由CLKS引脚驱动,CLKS的上升沿产生CLKG和

FSG,帧周期为121

AIC23的控制口具有下列两种工作方式: 1)3线的SPI方式 2)两线的IIC方式 在本实验中,AIC23控制口采用SPI从模式,McBSP2采用SPI主模式。McBSP2与AIC23控制

口的连接如图12-8所示,引脚SDIN是AIC23控制口的串行数据输入端,SCLK是控制口的串行位

时钟输入,CS 锁存输入的控制字。DSP通过AIC23的控制口对它的内部寄存器进行配置,每个

控制字包含16位,以MSB(B15)开头,前7位B15~B9为AIC23的寄存器地址,后9位B8~B0为

要写入寄存器的内容。控制字数据位在SCLK的上升沿被锁存,在第16个上升时钟沿后的CS 上

升沿到来时将控制字锁存到AIC23中,AIC23控制口的时序如图12-9所示。McBSP2的初始化配

置值如表12-2所示。

图12-8 AIC23的控制口与McBSP2的接口

图12-9 AIC23控制口的SPI模式时序图

CLKX2 FSX2

DX2

VC5416 McBSP2

SCLK CS SDIN AIC23 控制口

DSP 本科实验教材

41

表12-2 McBSP2与AIC23控制口接口时的配置值

寄存器名称 配置值 功 能

SPCR1 1000H SPI时钟停止模式

SRGR1 0020H 确定分频数为20H, McBSP2的波特率为5MHz

SRGR2 2000H 确定时钟来源为内部CPU,帧同步为低有效

XCR1 0040H 单相帧,发送数据长度为16位

XCR2 0001H 发送数据延时1比特

PCR 0A0AH McBSP2为SPI主模式,SFX为输出,且极性为低有效,CLKX及CLKR下降沿采样

6. AIC23的寄存器配置 AIC23内含多个寄存器,用户可以通过这些寄存器来编程控制芯片的操作模式。在本实验中

AIC23的寄存器配置如表12-3所示。 表12-3 AIC23的寄存器配置

地址 需要初始化的寄存器 配置值(数据)

0000000 左声道音量控制寄存器 017H

0000001 右声道音量控制寄存器 017H

0000010 左声道耳机音量控制寄存器 07BH

0000011 右声道耳机音量控制寄存器 07BH

0000100 模拟音频路径控制寄存器 010H

0000101 数字音频路径控制寄存器 030H

0000110 省电方式控制寄存器 000H

0000111 数字音频接口格式寄存器 053H

0001000 采样率设置寄存器 023H

0001001 数字接口设置寄存器 001H

0001111 复位寄存器

四、实验程序功能与结构说明 1. 程序流程图 同步串口与A/D采样实验的流程图如图12-10所示。

图12-10 同步串口与A/D实验流程图

DSP 本科实验教材

42

2. 同步串口与A/D实验程序 在该实验中主要包含以下文件: (1)vc5416_ad.c: 实验主程序,通过CODEC进行AD采样等。 (2)vc5416_func.c: 包括系统初始化,配置CODEC,进行AD设置。 (3)vc5416ad_vector.asm 包含了VC5416的中断向量表及程序入口操作。 (4)dec5416.cmd: 声明了系统的存贮器配置与程序各段的连接关系。

五、实验步骤

1. 将DSP仿真器与计算机连接好。 2. 将DSP仿真器的JTAG插头与SEED-DEC5416板卡的J1相连接。 3. 启动计算机,当计算机启动后,打开SEED-DTK DBD的电源。观察SEED-DTK-IO1单元

的+5V、+3.3V、+15V、-15V的电源指示灯是否点亮;SEED_DEC5416的D2及SEED-DSK2812的D2是否点亮;若有不亮的,应断开电源,检查实验箱。

4. 打开CCS,进入CCS操作环境,装入vc5416_AD.pjt工程文件(参见文件夹“VC5416_AD”)。 5. 编译、链接生成vc5416_AD.out文件,装载程序vc5416_AD.out,开始进行调试。 6. 本实验需要设置实验箱信号源。通过液晶和按键,设置信号源。菜单路径为:“系统设

置”-“信号发生器设置”。在“信号发生器设置”这一菜单下,将“通道”设为“0”;“信

号类型”可根据需要任意选择;“信号频率”和“信号振幅”可在屏幕下方“有效输入”限定

的范围内任意输入,建议设为1000左右;“信号发生器开关”设为“开启”。此时便有正弦信

号输入到CODEC芯片。 7. 运行程序。可以观察收到的数据和显示图形,数据保存在ldata_buff数组中,图像显示即

为ldata_buff数组。如图12-11显示了采样频率为44KHz,采样长度为1024点时的采样结果。

图12-11 A/D采样结果

8. 修改信号源,观察输入不同信号源的执行结果。

六、实验报告的要求

1. 说明工程的结构和功能。 2. 总结上机调试步骤和调试情况,说明调试中遇到的问题是如何解决的。 3. 分析 DSP 的多缓冲串行口 McBSP 如何与音频 CODEC 接口。 4.总结混合编程的技术要点。

DSP 本科实验教材

43

实验十三 基于 DSP 的数字音频处理系统

一、目的

1. 了解TMS320C54x片内同步串口McBSP的基本结构和工作原理,了解同步串口的SPI工作

方式。 2. 了解CODEC芯片TLV320AIC23B的工作原理。了解音频信号的编码与解码过程。 3. 掌握DSP与CODEC(TLV320AIC23B)的接口、控制与数据传输的过程,了解数字音频处

理系统硬件平台的构建。 4. 了解通过宏函数实现对McBSP及CODEC的设置。熟悉在混合编程条件下如何编写C语言

程序及汇编程序。 5. 掌握FLASH的操作过程。

二、内容

使用SEED-DTK DBD实验箱的SEED-DEC5416板卡作为硬件平台,采用TMS320C5416的片

内McBSP与CODEC芯片TLV320AIC23B进行串行通讯,通过混合编程实现对音频信号的输入、

采样、存储与回放等功能。

三、实验背景知识

1.数字音频处理系统硬件平台的结构 数字音频处理系统实验在实验箱的SEED-DEC5416板卡上进行,其硬件平台的结构如图13-1

所示。

图13-1 数字音频处理系统硬件平台示意图

2. TLV320AIC23B的介绍 TLV320AIC23B(以下简称AIC23)是TI公司推出的一款高性能的立体声音频Codec芯片。

AIC23的结构如图12-5所示。其内部配置有耳机输出放大器,支持MIC和LINE IN两种输入方式

(二选一),且对输入和输出都具有可编程增益调节。AIC23的模数转换(ADCs)和数模转换

DSP 本科实验教材

44

(DACs)部件高度集成在芯片内部,采用了先进的Sigma-delta过采样技术,可以在8K到96K的频率范围内提供16bit、20bit、24bit和32bit的采样,ADC和DAC的输出信噪比分别可以达到90dB和100dB。同时,AIC23还具有很低的能耗,在回放模式下的功率仅为23mW,在省电模式下更

是小于15uW。 下面介绍一下AIC23在实验箱中的使用情况。

图13-2 TLV320AIC23B的结构图

(1)音频接口(数据口) 主要引脚为: 1)BCLK:数字音频接口时钟信号(bit时钟),AIC23工作在主模式,该时钟由AIC23产生。

DSP 本科实验教材

45

2)LRCIN:数字音频接口DAC方向的帧信号。 3)LRCOUT:数字音频接口ADC方向的帧信号。 4)DIN:数字音频接口DAC方向的数据输入。 5)DOUT:数字音频接口ADC方向的数据输出。 这部分可以和DSP的McBSP无缝连接,要注意的是:McBSP的接收时钟和AIC23B的BCLK

都由McBSP的发送时钟提供;当AIC23B做主设备时,McBSP的发送与接收时钟均由AIC23B来提供。 (2)麦克风输入接口

主要引脚为: 1)MICBIAS:提供麦克风偏压,通常是3/4 AVDD。 2)MICIN:麦克风输入,放大器默认是5倍增益。 (3)LINE IN 输入接口。 主要引脚为: 1)LLINEIN:左声道LINE IN 输入。 2)RLINEIN:右声道LINE IN 输入。 (4)耳机输出接口 主要引脚为: 1)LHPOUT:左声道耳机放大输出。 2)RHPOUT:右声道耳机放大输出。 3)LOUT:左声道输出。 4)ROUT:右声道输出。 LOUT和ROUT没有经过内部放大器,所以设计中常用LHPOUT和RHPOUT。 (5)配置接口(控制口) 主要引脚为: 1)SDIN:配置数据输入。 2)SCLK:配置时钟。 DSP通过该控制口来配置AIC23的内部寄存器,即DSP给AIC23写16bit的控制字,每个控制

字的前7bit为寄存器的地址,后9bit为寄存器的内容。具体方法和寄存器具体内容见实验程序。 (6)其他 主要引脚为: 1)MCLK:芯片时钟输入(12MHz)。 2)VMID:半压输入,通常由一个10U和一个0.1U电容并联接地。 3)MODE:芯片工作模式选择,Master CS-片选信号(配置时有效)。 4)CLKOUT:时钟输出,可以为MCLK或者MCLK/2(详见寄存器配置)。 (7)与AIC23配置接口的连接 DSP与AIC23的连接可以采用DSP模式或IIS模式,区别仅在于DSP的McBSP帧同步信号的宽

度。后者的帧同步信号宽度必须为一个字(16位)长,而前者的帧宽度可以为一个位长,比如

在字长16位(即左右声道的采样各为16位),帧长为32位的情况下,如果采用IIS,帧同步信号

宽度应为16位;而采用DSP Mode帧信号宽度1位即可。 3. 系统控制寄存器SYSCNTL对McBSP接口的控制 SEED-DEC5416模板上有4个使用McBSP的场合:CODEC的控制口和数据口;扩展总线上

的两个供用户使用的McBSP口。它们通过多路复用的方式使用TMS320C5416片内的3个McBSP。多路复用的选择由系统控制寄存器SYSCNTL中的位McBSP0SEL、McBSP1SEL和McBSP2SEL控制。TMS320C5416片内的3个McBSP的使用和控制如图13-3所示。具体配置如下:

DSP 本科实验教材

46

图13-3 McBSP在SEED-DEC5416模板上的配置情况

(1)McBSP0由位McBSP0SEL控制: 当McBSP0SEL=0时,McBSP0与CODEC的数据口连接。 当McBSP0SEL=1时,McBSP0与扩展总线连接,作为外部使用的McBSP1。

(2)McBSP1由位McBSP1SEL控制: 当McBSP1SEL=0时,McBSP1与扩展总线连接,作为外部使用的McBSP1。 当McBSP1SEL=1时,McBSP1与扩展总线连接,作为外部使用的McBSP2。

(3)McBSP2由位McBSP2SEL控制: 当McBSP2SEL=0时,McBSP2与CODEC的控制口连接。 当McBSP2SEL=1时,McBSP2与扩展总线连接,作为外部使用的McBSP2。

系统控制寄存器SYSCNTL由SEED-DTK_IO1板卡上的CPLD来实现,它位于I/O空间的

0001h,只写。其结构如图13-4所示。

图13-4 系统控制寄存器SYSCNTL的结构图

系统控制寄存器SYSCNTL其他各位的使用简介如下: (1)D00、D01 DBCNTL1,0: 扩展板控制位

0 扩展总线的DB_CNTL1,0线为0(默认状态) 1 扩展总线的DB_CNTL1,0线为1(默认状态)

(2)D02 WCEN: 看门狗使能位 0 看门狗禁止(默认状态) 1 看门狗使能

(3)D06 INT2SEL: 系统INT2方式的选择 0 若设为HPI为BOOT方式时,ITN连接HINT(默认值) 1 INT2为USB中断与扩展板的INT2中断共享

4. McBSP与AIC23的接口 AIC23与微处理器的接口有2个,一个是控制口,用于设置AIC23的工作参数;另一个是数

字音频接口,简称数据口,用于传输AIC23的A/D、D/A数据。在SEED-DEC5416板卡上,将C5416的McBSP0与AIC23的数据口接口,将McBSP2与AIC23的控制口接口。

DSP 本科实验教材

47

(1)AIC23的数据口及其与McBSP0的接口 AIC23的数据口有下列5个引脚: 1)BCLK: 数字音频接口时钟信号(bit时钟)。 2)LRCIN: 数字音频接口DAC的帧信号。 3)LRCOUT: 数字音频接口ADC的帧信号。 4)DIN: 数字音频接口DAC的数据输入。 5)DOUT: 数字音频接口ADC的数据输出。 AIC23的数据口有下列4种工作方式,分别为: 1)Right justified 2)Left justified 3)IIS mode 4)DSP mode 在本实验中,AIC23的数据口采用DSP模式,主模式;McBSP0采用IIS,从模式。AIC23的

数据口可以与McBSP0进行无缝连接,其连接如图13-5所示。LRCIN和LRCOUT必须与McBSP的帧同步信号相连接。注意:由于AIC23工作于主模式,因此,McBSP0的接收时钟和AIC23的BCLK都由AIC23来提供。AIC23工作于DSP模式的时序图如图13-6所示,数据口在LRCIN或

LRCOUT的下降沿开始进行数据传送,第一个数据字为左声道数据,紧跟其后的是右声道的数

据字。输入字长由寄存器IWL来定。图13-6表示LRP = 1 (默认值 LRP = 0)。 McBSP02的初始化配置值如表13-1所示。

图13-5 AIC23的数据口与McBSP0的接口

图13-6 AIC23数据口的DSP模式时序图

(2)AIC23的控制口及其与McBSP2的接口 AIC23的控制口有4条引脚,均为输入引脚,它们的功能如下: 1)SDIN:串行配置数据输入

CLKX CLKR

FSX

FSR DX

DR

VC5416 McBSP0

BCLK LRCIN LRCOUT DIN DOUT AIC23 数据口

DSP 本科实验教材

48

2)SCLK:串行位时钟输入

3)CS : 片选信号输入

4)MODE:串行接口输入模式,MODE=0,两线的IIC方式;MODE=1,3线的SPI方式。

表13-1 McBSP0与AIC23数据口接口时的配置值

寄存器名称 配置值 功 能

SPCR1 4081H 使能发送,接收数据左对齐,用0填充DRR的低位

RCR1 0140H 接收单相帧,每相2个数,数据长度为16位

RCR2 0001H 接收单相帧,每次传输需要帧同步,接收1比特延迟

XCR1 0140H 发送单相帧,每相2个数,数据长度为16位

XCR2 0001H 发送单相帧,每次传输需要帧同步,发送1比特延迟

PCR 0003H

McBSP0为从模式,SFX及SFR为输入,由外部驱动,且极性为高有

效;CLKX及CLKR为输入,由外部驱动,CLKX上升沿对发送数据

采样,CLKR下降沿对接收数据采样

SRGR1 0034H 时钟分频数为34H,帧同步信号脉宽为1一个CLKG,McBSP0的波

特率为1.536MHz

SRGR2 0120H 采样率发生器时钟由CLKS引脚驱动,CLKS的上升沿产生CLKG和

FSG,帧周期为121

AIC23的控制口具有下列两种工作方式: 1)3线的SPI方式 2)两线的IIC方式 在本实验中,AIC23控制口采用SPI从模式,McBSP2采用SPI主模式。McBSP2与AIC23控制

口的连接如图13-7所示,引脚SDIN是AIC23控制口的串行数据输入端,SCLK是控制口的串行位

时钟输入,CS 锁存输入的控制字。DSP通过AIC23的控制口对它的内部寄存器进行配置,每个

控制字包含16位,以MSB(B15)开头,前7位B15~B9为AIC23的寄存器地址,后9位B8~B0为

要写入寄存器的内容。控制字数据位在SCLK的上升沿被锁存,在第16个上升时钟沿后的CS 上

升沿到来时将控制字锁存到AIC23中,AIC23控制口的时序如图13-8所示。McBSP2的初始化配

置值如表13-2所示。

图13-7 AIC23的控制口与McBSP2的接口

CLKX2 FSX2

DX2

VC5416 McBSP2

SCLK CS SDIN AIC23 控制口

DSP 本科实验教材

49

图13-8 AIC23控制口的SPI模式时序图

表13-2 McBSP2与AIC23控制口接口时的配置值

寄存器名称 配置值 功 能

SPCR1 1000H SPI时钟停止模式

SRGR1 0020H 确定分频数为20H, McBSP2的波特率为5MHz

SRGR2 2000H 确定时钟来源为内部CPU,帧同步为低有效

XCR1 0040H 单相帧,发送数据长度为16位

XCR2 0001H 发送数据延时1比特

PCR 0A0AH McBSP2为SPI主模式,SFX为输出,且极性为低有效,CLKX及CLKR下降沿采样

5.AIC23的寄存器配置 AIC23内含多个寄存器,用户可以通过这些寄存器来编程控制芯片的操作模式。在本实验中

AIC23的寄存器配置如表13-3所示。 表13-3 AIC23的寄存器配置

地址 需要初始化的寄存器 配置值(数据)

0000000 左声道音量控制寄存器 017H

0000001 右声道音量控制寄存器 017H

0000010 左声道耳机音量控制寄存器 07BH

0000011 右声道耳机音量控制寄存器 07BH

0000100 模拟音频路径控制寄存器 010H

0000101 数字音频路径控制寄存器 030H

0000110 省电方式控制寄存器 000H

0000111 数字音频接口格式寄存器 053H

0001000 采样率设置寄存器 023H

0001001 数字接口设置寄存器 001H

0001111 复位寄存器

四、实验程序功能与结构说明

1. 数字音频处理系统程序 在该实验程序中主要包含以下文件: 1)audiorec.c:这是实验的主程序,包含了系统初始化,音频芯片初始化,对CODEC和FLASH

的操作程序等。 2)boot.asm:C环境的引导程序。 3)dec5416.c:对SEED-DEC5416各项资源的操作函数集,主要包含了对UART操作的各个

函数,对CODEC的各个控制函数以及对系统各项的初始化函数。 4)memory.asm:包含了对FLASH的各项操作及对程序空间MEMORY的操作。

DSP 本科实验教材

50

5)sysreg.asm: 包含了对DSP的各项控制,如中断的设置、系统时钟设置及对各寄存器的操

作。 6)uart.asm: 对异步串口的寄存器的读与写。 7)vector.asm: 包含VC5416的中断向量表。 8)dec5416.cmd: 声明了系统的存贮器配置与程序各段的链接关系。 2. 程序流程图 数字音频处理系统实验的流程图如图13-9所示。

图13-9 数字音频处理系统实验流程图

五、实验步骤

1. 将DSP仿真器与计算机连接好,插入MIC和耳机插头。 2. 将DSP仿真器的JTAG插头与SEED-DEC5416板卡的J1相连接。 3. 启动计算机,当计算机启动后,打开SEED-DTK DBD的电源。观察SEED-DTK-IO1单元

的+5V、+3.3V、+15V、-15V的电源指示灯是否点亮;SEED_DEC5416的D2及SEED-DSK2812的D2是否点亮;若有不亮的,应断开电源,检查实验箱。

4. 打开CCS,进入CCS操作环境,装入CCS-REV.pjt 工程文件后,添加dtk-boot.gel 文件。

DSP 本科实验教材

51

5. 打开audiorec.c文件,到第83、84行,可以修改TESTCOMMAND和CODECAGAIN的宏定

义。TESTCOMMAND是操作控制选项,可以选1、2、3。其中“1”为试听,“2”为音频存储,

“3”为音频回放。CODECAGAIN是音量控制选项,可以为48~127之间的任何数值,建议尽量

取值大些,否则声音过小。 6. 修改完宏定义后,编译、连接生成CCS-REV.out文件,装载程序CCS-REV.out。 7. 运行程序。若为试听状态,耳机里将实时发出MIC收到的声音;若为音频存储状态,程

序将会把MIC输入的音频信号,经采样后存储到FLASH中;若为音频回放状态,则将在耳机中

循环听到在音频存储状态下存储在FLASH中的音频信号。

六、实验报告的要求 1.画出数字音频处理系统的结构框图。 2.分析 DSP 的多缓冲串行口 McBSP 如何与音频 CODEC 接口,总结数字音频处理系统的

工作过程和技术要点。 3。总结上机调试步骤和调试情况,说明调试中遇到的问题是如何解决的。

DSP 本科实验教材

52

第三部分 部分实验程序参考清单

实验一参考程序

1.主程序 test1.asm

;************************************************************************; ; 实验一 集成开发环境 CCS 应用基础 ;************************************************************************ .title "example1.asm" .mmregs ;使能存储器映像寄存器 stack .usect "STACK",10h .def _c_int00 ;------------------------------------------------------------------------------ .text _c_int00: stm # stack+10h, SP ;设置堆栈指针 stm #0x0000, SWWSR ;所有存储器未加软件延迟 ;================================================ stm #0x70,AR2 st #0xff80,*AR2 ;================================================ ;观察控制位 SXM 的作用 ;当 SXM =0 时,进行无符号数的加载

rsbx SXM nop ld *AR2, A ;(A)=( ) ;------------------------ ;当 SXM =1 时,进行有符号数的加载

ssbx SXM nop ld *AR2, A ;(A)=( ) ;================================================ ;================================================ ;观察控制位 OVM 的作用 ;当 OVM=0 时,对溢出不进行处理

rsbx OVM ld #0x7fff, 16, B add #0x7fff, 16, B ;(B)=( ) ;------------------------ ;当 OVM=1 时,对溢出进行处理

ssbx OVM ld #0x7fff, 16, B

DSP 本科实验教材

53

add #0x7fff, 16, B ;(B)=( ) ;================================================ ;================================================ ;观察控制位 C16 的作用 ;当 C16=0 时,进行 32 位双精度数加法运算 ssbx OVM ld #0x0001, 16, A add #0x7fff, A dst A, *AR2 ld #0x0001, 16, A or #0xffff, A rsbx C16 nop dadd *AR2, A, B ;(B)=( ) ;------------------------ ;当 C16=1 时,进行两个独立的 16 位数加法运算

ssbx C16 nop dadd *AR2, A, B ;(B)=( ) ;================================================ ;================================================ ;观察控制位 FRCT 的作用 ;当 FRCT=0 时,对乘积不进行移位 ld #0x1234, 16, A rsbx FRCT nop mpya *AR2 ;(B)=( ) ;------------------------ ;当 FRCT=1 时,对乘积左移 1 位

ssbx FRCT nop mpya *AR2 ;(B)=( ) ;================================================ ;================================================ ;观察测试位 TC bitf *AR2, #0x8000 ;(TC)=( ) nop nop ;------------------------ bitf *AR2, #0x0001 ;(TC)=( ) nop nop ;================================================ ;================================================

DSP 本科实验教材

54

;观察标志位 C ssbx SXM ld #0x7fff, A ld #0x8000, B max A ;(C)=( ) nop nop ;------------------------ min B ;(C)=( ) nop nop ;================================================ ;================================================ ;观察标志位 OVA, OVB ssbx SXM rsbx OVA ld #0x7fff, 16, A add #0xffff, A ;(OVA)=( ) nop nop ;------------------------ add #0x7fff, 16, A ;(OVA)=( ) nop nop ;================================================ dead_loop: nop nop nop nop b dead_loop .end ;------------------------------------------------------------------------------

2.命令文件 test1.cmd

vectors.obj test1.obj -o test1.out -m test1.map MEMORY PAGE 0: EPROM: org=0xE000, len=0x100 VECS: org=0xFF80, len=0x80

DSP 本科实验教材

55

PAGE 1: SPRAM: org=0x0060, len=0x0020 DARAM:org=0x0080, len=0x100 SECTIONS .text :> EPROM PAGE 0 .data :> EPROM PAGE 0 .bss :> SPRAM PAGE 1 STACK :> DARAM PAGE 1 vectors :> VECS PAGE 0

3.中断矢量处理程序 vectors.asm

.ref _c_int00 .sect "vectors" int_RESET: b _c_int00 ;复位时跳转至_c_int00

nop nop

.space 124*16 ;没有其它中断应用,为它们留出空间 .end

实验二参考程序

1.主程序 test2.asm

;********************************************************************; 实验二 寻址方式 ;********************************************************************

.mmregs stack .usect "STACK",20 .bss Data_0, 8 .bss Data_1, 8 .bss x,8 .data table: .word 11,12,13,14 .word 8,6,4,2 .def _c_int00 ;----------------------------------------------------------------------------- .text _c_int00: stm #stack+20, SP stm #0x0000, SWWSR ;********************************

DSP 本科实验教材

56

; 立即寻址 ;******************************** ld #4, DP ;指令代码( ) ld #0x7850,A ;指令代码( ) rpt #4 add #0x100,4, A ;A=( ) ;**************************************************************** ; 绝对寻址 ;1.dmad 2. pmad 3.PA(PORT Addressing) 4.*( lk) Addressing ;**************************************************************** stl A, *(Data_0) ;第( )种方式 stm #0x0066, AR2 stm #Data_1, AR3 mvkd AR2, *AR3 ;第( )种方式 ld *(Data_1), B ;第( )种方式 mvpd table,*AR2 ;第( )种方式 ;********************************* ; 累加器寻址 ;********************************* rsbx sxm nop nop ld #table , A stm #Data_1, AR2 rpt #8-1 reada *AR2+ ;该段程序完成的功能是( ) ;******************************** ; 直接寻址 ;******************************** ;基于 DP 的直接寻址 rsbx CPL nop nop ld #Data_0,DP nop nop ld @Data_0,A ;源操作数的地址是( ) nop nop add @Data_1,A ;源操作数的地址是( ) nop nop nop ;基于 SP 的直接寻址

DSP 本科实验教材

57

ssbx CPL nop nop stm #Data_1,sp nop ld @0,A ;源操作数的地址是( ) nop nop add @2,A ;源操作数的地址是( ) nop nop add @3,A ;源操作数的地址是( ) nop nop ;******************************** ; 堆栈寻址 ;******************************** stm #stack+20, SP stm #Data_1,AR1 RPT #7 PSHD *AR1+ ;执行后 SP=( ) stm #x,AR2 RPT #7 POPM *AR2+ ;执行后 SP=( ) ;**************************************** ; 间接寻址 ;**************************************** stm #Data_1, AR2 stm #x, AR3 sub A sub B stm #6-1, BK stm #Data_0, AR2 stm #Data_1, AR3 stm #3, AR0 stm #8-1, BRC rptb loop-1 add AR2, A mac AR2+0%, *AR3+, B loop: stm #Data_1, AR3 mvmm AR3, AR2 mar *+AR3(3) ld *AR3, A ;源操作数的地址是( )

DSP 本科实验教材

58

ld *+AR2(5), B ;源操作数的地址是( ) ;************************************************ ; 存储器映像寄存器寻址 ;************************************************ stm #Data_0, AR6 mvmm AR6, AR7 ldm AR6, A stlm A,AR2 dead_loop: nop nop nop nop b dead_loop .end ;------------------------------------------------------------------------------

2.命令文件 test2.cmd

vectors.obj test2.obj -o test2.out -m test2.map MEMORY PAGE 0: EPROM: org=0xE000, len=0x500 VECS: org=0xFF80, len=0x80 PAGE 1: SPRAM: org=0x0060, len=0x0020 DARAM:org=0x0080, len=0x100 SECTIONS .text :> EPROM PAGE 0 .data :> EPROM PAGE 0 .bss :> SPRAM PAGE 1 STACK :> DARAM PAGE 1 vectors :> VECS PAGE 0

3.中断矢量处理程序 vectors.asm

与实验一的 vectors.asm 相同。此处不再赘述。

DSP 本科实验教材

59

实验三参考程序

1.主程序 test3.asm

;************************************************************************ ; 实验三 定点定标运算 ;************************************************************************ .mmregs ;enable memory mapped registers stack .usect "STACK",100h ;set stack section .bss x1,2 .bss y,2 .bss s1,2 .bss z,2 table1: .word 35*32768/100 ;0.35 的 Q15 定标 .word 9*32768/10 ;0.9 的 Q15 定标 .word 0 .word 0 table2: .word 762*4096/100 ;7.62 的 Q12 定标 .word 184*16384/100 ;1.84 的 Q14 定标 .def _c_int00 ;------------------------------------------------------------------------------ .text _c_int00: stm #stack+100h, SP ;set stack pointer stm #0x0000, SWWSR SSBX FRCT ;求 y=x1×x2=0.35×0.9=0.315 STM #x1,AR2 RPT #3 MVPD table1,*AR2+ STM #x1,AR4 STM #x1+1,AR5 MPY *AR4,*AR5,A STH A,y ;------------------------------------------------------------------------------ RSBX FRCT ;求 z=s1×s2=7.62×1.84=14.0208 STM #s1,AR2 RPT #1 MVPD table2,*AR2+ STM #s1,AR4 STM #s1+1,AR5 MPY *AR4,*AR5,A DST A,z NOP NOP

DSP 本科实验教材

60

.end ;------------------------------------------------------------------------------

2.命令文件 test3.cmd

vectors.obj test3.obj -o test3.out -m test3.map MEMORY PAGE 0: EPROM: org=0xE000, len=0x100 VECS: org=0xFF80, len=0x80 PAGE 1: DARAM:org=0x0060, len=0x20 SPRAM: org=0x0200, len=0x500 SECTIONS .text :> EPROM PAGE 0 .data :> EPROM PAGE 0 .bss :> DARAM PAGE 1 STACK :> SPRAM PAGE 1 vectors :> VECS PAGE 0

3.中断矢量处理程序 vectors.asm

与实验一的 vectors.asm 相同。此处不再赘述。

实验四参考程序

主程序 test4.asm

;************************************************************* ; 实验四 浮点运算实验 ;************************************************************* .mmregs stack .usect "STACK",100h .bss a1, 1 .bss a2, 1 .bss b1,1 .bss b2, 1 .bss c1,1 .bss c2,1

DSP 本科实验教材

61

.bss ep,1 .bss mp,1 .bss product,1 .bss temp,1 .data table: .word 4*32768/10 ;0.4 的 Q15 定标 .word -9*32768/10 ;-0.9 的 Q15 定标 .def _c_int00 ;------------------------------------------------------------- .text _c_int00: stm #stack+100h, SP stm #0x0000, SWWSR mvpd table,@a1 mvpd table+1,@a2 ld @a1,16,A exp A st T,@b1 norm A sth A,@c1 ld @a2,16,A exp A st T,@b2 norm A sth A,@c2 call mult endd:

b endd mult:

ssbx frct ssbx sxm ld @b1,A add @b2,A stl A,@ep ld @c1,T mpy @c2,A exp A st T,@temp norm A sth A,@mp ld @temp,A add @ep,A stl A,@ep

DSP 本科实验教材

62

neg A stl A,@temp ld @temp,T ld @mp,16,A norm A sth A,@product .end

实验五参考程序

主程序 test4.asm

;****************************************************************************** ; 实验五 汇编程序的优化 ;****************************************************************************** .mmregs stack .usect "STACK",10h .def _c_int00 ;------------------------------------------------------------------------------ .text _c_int00: stm # stack+10h, SP stm #0x0000, SWWSR ;========================================================================;;;编写程序,比较两数 X1 和 X2 的大小。若两者相等,则将其值存入 Y 单元。否则将大者存入 Y单元。 ;======================================================================== X1 .set 58 X2 .set 350 y .usect "Y",1 ;使用 CMPR 指令 P1: STM #X1,AR0 ;将 X1 送入 AR0 STM #X2,AR3 ;将 X2 送入 AR3 CMPR 0,AR3 ;比较两数相等否 BC d1,NTC ;不相等,跳转至 d1 BD d2 ;两者相等,将其值存入 Y NOP NOP d1: CMPR 1,AR3 ;比较 X2< X1? BC d2,TC ;X2< X1 时转入 d2 MVMD AR3,y ;将大者存入 Y BD P2 NOP NOP

DSP 本科实验教材

63

d2: MVMD AR0,y ;将大者存入 Y ;------------------------------------------------------------- ;使用 SUB 指令 P2: LD #X1,A ;将 X1 送入 A SUB #X2,A ;X1 - X2 BC d3,ALT ;X1< X2 时转入 d1 ST #X1,y ;将 X1 存入 Y BD P3 NOP NOP d3: ST #X2,y ;X2 >= X1 时,将 X2 存入 Y ;------------------------------------------------------------- ;使用 CMPS 指令 P3: LD #X1,16,A ;将 X1 送入 A(31~16) Add #X2,A ;将 X2 送入 A(15~0) CMPS A,y ;比较、选择和存储大者 ;======================================================= ;分别使用 BANZ(无延迟)或 BANZD(有延迟)指令,计算 y1 ;======================================================= .bss u,16 ;开辟存储空间 .bss v,16 .bss w,16 .bss y1,1 ;使用 BANZ 指令 P4: STM #u,AR3 ;赋地址指针 STM #v,AR4 STM #w,AR5 STM #y1,AR1 STM #15,AR2 ;赋循环次数 ST #0,*AR1 lp: MPY *AR3+,*AR4+,A ;ui×vi ADD *AR5+,A ;ui×vi+wi ADD *AR1,A STL A,*AR1 BANZ lp,*AR2- ;无延迟操作 ;------------------------------------------------------------- ;使用 BANZD 指令 P5: STM #u,AR3 ;赋地址指针 STM #v,AR4 STM #w,AR5 STM #y1,AR1 STM #15,AR2 ;赋循环次数 ST #0,*AR1

DSP 本科实验教材

64

lp1: MPY *AR3+,*AR4+,A ;ui×vi ADD *AR5+,A ;ui×vi+wi BANZD lp1,*ar2- ;有延迟操作, ADD *AR1,A STL A,*AR1 ;======================================================= ;分别使用 RPT 或 BANZ 指令组成循环程序,计算 S ;======================================================= .bss c,20 ;开辟存储空间 .bss S,1 ;使用 RPT 指令 P6: STM #c,AR2 LD #0,A RPT #19 MAC *AR2+,#40,A STL A,*(S) ;------------------------------------------------------------- ;使用 BANZ 指令 P7: STM #19,AR3 STM #c,AR2 LD #0,A lP2: MAC *AR2+,#40,A BANZ lP2,*AR3- STL A,*(S) ;======================================================= ;分别使用双操作数寻址或并行操作指令编程,计算 y2 ;======================================================= .bss g,20 ;开辟存储空间 .bss h,20 .bss y2,20 ;使用双操作数寻址 P8: STM #g,AR2 STM #h,AR3 STM #y2,AR5 STM #20,BRC RPTB lp3-1 ADD *AR2+,*AR3+,A STH A,*AR5+ lp3: NOP ;------------------------------------------------------------- ;使用并行操作指令 P9: STM #g,AR2

DSP 本科实验教材

65

STM #h,AR3 STM #y2,AR5 LD #0,ASM STM #2,AR0 STM #0,BK STM #18,BRC ADD *AR2+,*AR3+,A STH A,ASM,*AR5+ RPTB P10-1 ADD *AR2+,*AR3+,A MAR *AR2+ ST A,*AR5+ ||LD *AR2-,B ADD *AR2+0%,*AR3+,A ST A,*AR5+ ||ADD *AR3+,A STH A,ASM,*AR5+ ;------------------------------------------------------------- P10: NOP NOP NOP NOP B P10 .end ;------------------------------------------------------------------------------

DSP 本科实验教材

66

第四部分、参考资料

一、 C54xCPU 的存储器映像寄存器及其地址

地址 符号 寄存器名称 地址 符号 寄存器名称

00H IMR 中断屏蔽寄存器 10H AR0 辅助寄存器 0

01H IFR 中断标志寄存器 11H AR1 辅助寄存器 1

02H 保留 ( 用于测试 ) 12H AR2 辅助寄存器 2

03H 保留 ( 用于测试 ) 13H AR3 辅助寄存器 3

04H 保留 ( 用于测试 ) 14H AR4 辅助寄存器 4

05H 保留 ( 用于测试 ) 15H AR5 辅助寄存器 5

06H ST0 状态寄存器 0 16H AR6 辅助寄存器 6

07H ST1 状态寄存器 1 17H AR7 辅助寄存器 7

08H AL 累加器 A 低字(15~0 位) 18H SP 堆栈指针

09H AH 累加器 A 高字(31~16 位) 19H BK 循环缓冲区长度寄存器

0AH AG 累加器 A 保护位(39~32 位) 1AH BRC 块重复计数器

0BH BL 累加器 B 低字(15~0 位) 1BH RSA 块重复起始地址寄存器

0CH BH 累加器 B 高字(31~16 位) 1CH REA 块重复结束地址寄存器

0DH BG 累加器 B 保护位(39~32 位) 1DH PMST 处理器模式状态寄存器

0EH T 暂存寄存器 1EH XPC 程序计数器扩展寄存器

0FH TRN 状态转移寄存器 1FH 保留

二、C54xCPU 的状态和控制寄存器 ST0、ST1

1.状态寄存器 ST0

ARP TC C OVA OVB DP

15—13 12 11 10 9 8—0 OVA/B:累加器 A/B 的溢出标志。

用来反映 A/B 是否产生溢出。 C:进位标志位。 用来保存 ALU 加减运算时所产生的进/借位。 TC:测试/控制标志。 用来保存 ALU 测试操作的结果。 ARP:辅助寄存器指针。

用来选择使用单操作数间接寻址时的辅助寄存器 AR0~AR7。 DP:数据存储器页指针。

用来与指令中提供的 7 位地址结合形成 1 个 16 位数据存储器的地址。

DSP 本科实验教材

67

2.状态寄存器 ST1

BRAF CPL XF HM INTM 0 OVM SXM C16 FRCT CMPT ASM

15 14 13 12 11 10 9 8 7 6 5 4—0 BRAF:块重复操作标志位。 用来指示当前是否在执行块重复操作。 BRAF=0 表示当前不进行重复块操作; BRAF=1 表示当前正在进行块重复操作 CPL:直接寻址编辑方式标志位; 用来指示直接寻址选用何种指针。 CPL=0 选用数据页指针 DP 的直接寻址; CPL=1 选用堆栈指针 SP 的直接寻址。 XF:外部 XF 引脚状态控制位。 用来控制 XF 通用外部输出引脚的状态。 执行 SSBX XF=1 XF 通用输出引脚为 1; 执行 RSBX XF=0 XF 通用输出引脚为 0。 HM:保持方式位;响应 HOLD 信号时,指示

CPU 是否继续执行内部操作。 HM=0 CPU 从内部程序存储器取指,继续执行内部操作。 HM=1 CPU 停止内部操作。 INTM:中断方式控制位; 用于屏蔽或开放所有可屏蔽中断。 INTM=0 开放全部可屏蔽中断; INTM=1 禁止所有可屏蔽中断。 OVM:溢出方式控制位; 用来确定累加器溢出时,对累加器的加载方式。 OVM=0 将运算的溢出结果直接加载到累加器中; OVM=1 当正溢出时,将 007FFFFFFFH 加载累加器;负溢出时,将 FF80000000H 加

载累加器 SXM:符号位扩展方式控制位;用来确定数据

在运算之前是否需要符号位扩展。 SXM=0 数据进入 ALU 之前禁止符号位扩展; SXM=1 数据进入 ALU 之前进行符号位扩展。

C16:双 16 位/双精度算术运算方式控制位; 用来决定 ALU 的算术运算方式。

C16=0 ALU 工作在双精度算术运算方式; C16=1 ALU 工作在双 16 位算术运算方式 FRCT:小数方式控制位;

用来确定乘法器的运算方式。 FRCT=1 乘法器的输出左移一位,消除多余的符号位。 CMPT:间接寻址辅助寄存器修正方式控制位;

用来决定 ARP 是否进行修正。 CMPT=0 在进行间接寻址单操作数时,不修正 ARP; CMPT=1 在进行间接寻址单操作数时,修正 ARP。

DSP 本科实验教材

68

ASM:累加器移位方式控制位。 为某些具有移位操作的指令设定一个从-16~15 范围内的移位值。

三、TMS320C5416DSP 的存储区映像

Page 0 Program (程序存储区) Microprocessor Mode (微处理器模式)MP/MC=1 0000—007Fh OVLY=1 Reserved (保留) OVLY=0 External (外部存储区) 0080—7FFFh OVLY=1 DARAM (0—3 页,一页 8K) OVLY=0 External (外部存储区) 8000—FF7Fh External (外部存储区) FF80—FFFFh Interrupts (External 外部中断) Microcomputer Mode (微计算机模式)MP/MC=0 0000—007Fh OVLY=1 Reserved (保留) OVLY=0 External (外部存储区) 0080—7FFFh OVLY=1 DARAM (0—3 页,一页 8K) OVLY=0 External (外部存储区) 8000—BFFFh External (外部存储区) C000—FEFFh On-Chip ROM (4Kx16-bit 片上 ROM) FF00—FF7Fh Reserved (保留) FF80—FFFFh Interrupts (On-Chip 片上中断) DATA (数据存储区) 0000—005Fh Memory—Mapped Registers (存储器影射寄存器) 0060—007Fh Scratch—Pad RAM (可擦写区域) 0080—7FFFh DARAM (0—3 页 32Kx16-bit) 8000—FFFFh DROM=1 DARAM (4—7 页) DROM=0 External (外部区域) Address ranges for On-Chip DARAM in data memory are: (片上 DARAM 的数据存储区中的地址范围:)

DARAM0:0080—1FFFh ; DARAM1:2000—3FFFh DARAM2:4000—5FFFh ; DARAM3:6000—7FFFh DARAM4:8000—9FFFh ; DARAM5:A000—BFFFh DARAM6:C000—DFFFh ; DARAM7:E000—FFFFh

DSP 本科实验教材

69

四、C54xCPU 的处理器模式状态寄存器 PMST

IPTR MP/MC OVLY AVIS DROM CLKOFF SMUL SST

15—7 6 5 4 3 2 1 0 IPTR:中断向量指针----用来指示中断向量所驻留的 128 字程序存储器的位置。 MP/MC:CPU 工作方式选择位----用来确定是否允许使用片内程序存储器 ROM。 OVLY:RAM 重复占位标志----用来决定片内双寻址数据 RAM 是否映射到程序空间。 AVIS:地址可见控制位----用来决定是否可以从器件地址引脚线看到内部程序空间地址线。 DROM:数据 ROM 映射选择位-----用来决定片内 ROM 是否可以映射到数据存储空间。 CLKOFF:时钟输出选择位----用来决定时钟输出引脚 CLKOUT 是否有信号输出。 SMUL:乘法饱和方式位----用来决定乘法结果是否需要进行饱和处理。 SST:存储饱和位----用来决定累加器中的数据在存储到存储器之前,是否需要饱和处理。

五、C54x 的片内定时器控制寄存器 TCR

位 15 ~ 12 11 10 9 ~ 6 5 4 3 ~ 0

TCR 0026h

保留 Soft Free PSC TRB (1) TSS (1) TDDR

TDDR:定时器分频系数,用来对 CLKOUT 进行分频,以改变定时周期。 最大预定标值为 16,最小预定标值为 1。 当 PSC 减到 0 后,以 TDDR 中的数加载 PSC。 TSS: 定时器停止状态位,用于停止或启动定时器 复位时,TSS 位清 0,定时器立即定时。 TSS=0,定时器启动工作; TSS=1,定时器停止工作。 TRB: 定时器重新加载位,用来复位片内定时器。 当 TRB 置 1 时,以 PRD 中的数加载 TIM,以及以 TDDR 中的值加载 PSC。TRB 总是

读成 0。 PSC: 定时器预定标计数器,其标定范围为 1~16。当 PSC 减到 0 后,TDDR 位域中的数加载

到 PSC, TIM 减 1。 Free、Soft:软件调试控制位。Free 和 Soft 位结合使用,用来控制调试程序断点操作情况下的

定时器工作状态

Soft Free 定时器状态

0 0 定时器立即停止工作

1 0 当计数器减至 0 时停止工作

X 1 定时器继续工作

保留: 读成 0。 定时器的定时时间为: 定时周期 = CLKOUT×(TDDR+1)×(PRD+1)

DSP 本科实验教材

70

六、TMS320C5416的中断矢量表

NAME DECIMAL HEX PRIORITY FUNCTION

RS, SINTR 0 00 1 Reset (hardware and software reset)

NMI, SINT16 4 04 2 Nonmaskable interrupt

SINT17 8 08 — Software interrupt #17

SINT18 12 0C — Software interrupt #18

SINT19 16 10 — Software interrupt #19

SINT20 20 14 — Software interrupt #20

SINT21 24 18 — Software interrupt #21

SINT22 28 1C — Software interrupt #22

SINT23 32 20 — Software interrupt #23

SINT24 36 24 — Software interrupt #24

SINT25 40 28 — Software interrupt #25

SINT26 44 2C — Software interrupt #26

SINT27 48 30 — Software interrupt #27

SINT28 52 34 — Software interrupt #28

SINT29 56 38 — Software interrupt #29

SINT30 60 3C — Software interrupt #30

INT0, SINT0 64 40 3 External user interrupt #0

INT1, SINT1 68 44 4 External user interrupt #1

INT2, SINT2 72 48 5 External user interrupt #2

TINT, SINT3 76 4C 6 Timer interrupt

RINT0, SINT4 80 50 7 McBSP #0 receive interrupt (default)

XINT0, SINT5 84 54 8 McBSP #0 transmit interrupt (default)

RINT2, SINT6 88 58 9 McBSP #2 receive interrupt (default)

XINT2, SINT7 92 5C 10 McBSP #2 transmit interrupt (default)

INT3, SINT8 96 60 11 External user interrupt #3

HINT, SINT9 100 64 12 HPI interrupt

RINT1, SINT10 104 68 13 McBSP #1 receive interrupt (default)

XINT1, SINT11 108 6C 14 McBSP #1 transmit interrupt (default)

DMAC4,SINT12 112 70 15 DMA channel 4 (default)

DMAC5,SINT13 116 74 16 DMA channel 5 (default)

Reserved 120–127 78–7F — Reserved

The bit layout of the interrupt flag register (IFR) and the interrupt mask register (IMR) is shown in

15–14 13 12 11 10 9 8 7 6 5 4 3 2 1 0

Resvd DMAC5 DMAC4 XINT1 RINT1 HINT INT3 XINT2 RINT2 XINT0 RINT0 TINT INT2 INT1

INT0

IFR and IMR

DSP 本科实验教材

71

参考文献

1.张卫宁主编,栗华、马昕副主编,DSP 原理与应用教程.北京:科学出版社,2008 2.邹彦主编,唐冬,宁志刚副主编,DSP 原理与应用.北京:电子工业出版社,2005 3.彭启棕,管庆等编著,DSP 集成开发环境-CCS 及 DSP/BIOS 的原理与应用.北京:电子工业

出版社,2005 4.张雄伟等编著, DSP 集成开发与应用实例. 北京:电子工业出版社,2002. 5.上海交大数字信号处理实验指导书,上海,2005 6.北京合众达公司,SEED-DTK DBD实验手册,北京,2005 7.北京合众达公司,SEED-DEC5416用户指南,北京,2005 8. 张卫宁,栗华,汇编程序优化方法的探讨,电气电子教学学报,第31卷第6期,2009.12 9.Texas Instruments Incorporated.TMS320C54x DSP Reference Set Volume 1: CPU and Peripherals(SPRU131).2001

10.Texas Instruments Incorporated. TMS320C54x DSP Reference Set Volume 2: Mnemonic Instruction Set(SPRU172). 2001

11.Texas Instruments Incorporated. TMS320C54x DSP Reference Set Volume 4: Applications Guide (SPRU173). 2001

12.Texas Instruments Incorporated.TMS320C54x DSP Reference Set Volume 5: Enhanced Peripherals(SPRU302). 2001~2005

13.Texas Instruments Incorporated.TMS320C54x Assembly Language Tools User’s Guide(SPRU102). 2002

14.Texas Instruments Incorporated.TMS320C54x Optimizing C/C++ Compiler User’s Guide(SPRU103G). 2002

15.Taxas Instruments Incorporated. TMS320C54x Manuals:Code Composer Studio Getting Started Guide.2000

16,Taxas Instruments Incorporated. Code Composer Studio User’s Guide (SPRU328).2000 17.Texas Instruments Incorporated.TMS320C54x Optimizing C/C++ Compiler User’s Guide(SPRU103G). 2002