《DSP原理第四章》由会员分享,可在线阅读,更多相关《DSP原理第四章(48页珍藏版)》请在金锄头文库上搜索。
1、DSPDSP原理原理- -第四章第四章第四章第四章 C54x应用程序开发及仿真应用程序开发及仿真 知识框架知识框架 DSP应用系统开发方法及过程应用系统开发方法及过程C54x汇编程序的编写规范汇编程序的编写规范 (4.1)C54x编辑、汇编、链接过程编辑、汇编、链接过程 (4.3 - 4.5)C54x汇编程序的结构汇编程序的结构 (4.2)软件仿真器软件仿真器Simulator(4.6)汇编语言程序设计汇编语言程序设计(4.7 部分)部分)Company Logo第四章第四章 C54x应用程序开发及仿真应用程序开发及仿真 4.0 DSP应用系统开发方法及过程应用系统开发方法及过程 数字信号处理
2、的两层工作:数字信号处理的两层工作: 算法研究算法研究 - - 如何以最小的运算量和存储空间达成既定任务如何以最小的运算量和存储空间达成既定任务 系统实现系统实现 - - 除除I/OI/O部分外,最核心的是算法的软硬件实现部分外,最核心的是算法的软硬件实现 除乘加运算外,卷积、除乘加运算外,卷积、FFT等基本算法各有其特殊要求。等基本算法各有其特殊要求。例如例如FFT采用采用C语言时,倒序运算的时间开销占语言时,倒序运算的时间开销占1525%。 近年来,半导体成本大大降低,近年来,半导体成本大大降低,TI的的5代芯片价格低于代芯片价格低于10美元,与单片机相当。美元,与单片机相当。Compan
3、y Logo第四章第四章 C54x应用程序开发及仿真应用程序开发及仿真 数字信号处理系统的设计过程数字信号处理系统的设计过程 系统要求的描述系统要求的描述信号分析信号分析信号处理算法设计信号处理算法设计资源分析资源分析硬件结构分析与设计硬件结构分析与设计软件设计与调试软件设计与调试系统集成与测试系统集成与测试根据商业、科研对系统的要求,提出根据商业、科研对系统的要求,提出一组系统级的技术指标和说明书,形一组系统级的技术指标和说明书,形成一些列技术文档,作为开发依据。成一些列技术文档,作为开发依据。信号维数、频率、带宽、电平范围、信号维数、频率、带宽、电平范围、信噪比信噪比SNRSNR、数据吞吐
4、率、实时性等、数据吞吐率、实时性等MatlabMatlab下算法的仿真正确、最简化、下算法的仿真正确、最简化、运算复杂度最小、最适合硬件实现运算复杂度最小、最适合硬件实现对所需的数据吞吐率、存储空间和对所需的数据吞吐率、存储空间和I/OI/O带宽做合理分配带宽做合理分配 包括对包括对DSPDSP芯片的选择、对资源芯片的选择、对资源的配置、各模块设计等;系统的软硬的配置、各模块设计等;系统的软硬件成本也是一个重要因素。件成本也是一个重要因素。 要求设计者对要求设计者对DSPDSP、FPGAFPGA等都有等都有很好的了解。很好的了解。 包括对系统软件和信号处理软件包括对系统软件和信号处理软件的设计
5、。的设计。 系统软件大多由系统软件大多由VCVC等高级语言编等高级语言编写,信号处理软件最好用汇编编写。写,信号处理软件最好用汇编编写。 需要开发环境的支持。需要开发环境的支持。Company Logo第四章第四章 C54x应用程序开发及仿真应用程序开发及仿真 TMS320C54x的软件开发过程的软件开发过程Company Logo第四章第四章 C54x应用程序开发及仿真应用程序开发及仿真 TMS320C54x提供两种汇编语言:提供两种汇编语言: C语言语言 汇编语言汇编语言 汇编代码可以是汇编代码可以是.txt和和.doc文件。文件。 TMS320C54x提供两种开发环境:提供两种开发环境:
6、 非集成开发环境非集成开发环境Simulator 集成开发环境集成开发环境CCSCompany Logo第四章第四章 C54x应用程序开发及仿真应用程序开发及仿真 4.1 C54x汇编程序的编写规范汇编程序的编写规范 DSP汇编语言源程序包括:汇编语言源程序包括: 指令指令 - LD- LD、MVDKMVDK、MACMAC 伪指令伪指令 - .text .data .bss .end- .text .data .bss .end等等 不生成代码,但对汇编和链接有指示性作用不生成代码,但对汇编和链接有指示性作用 宏命令宏命令 - - 具有独立特殊功能,有开发者定义具有独立特殊功能,有开发者定义
7、汇编句法格式:汇编句法格式:n 标号标号: 助记符助记符 操作数操作数 ;注释;注释 Company Logo第四章第四章 C54x应用程序开发及仿真应用程序开发及仿真 1. 标号标号 STACK LOOPS end2. 助记符助记符 指令用大写:指令用大写:MAC ADD 伪指令和宏指令用小写:伪指令和宏指令用小写:.bss .data3. 操作数操作数 MAC *AR1, *AR2, A, B4. 注释注释 约定俗成:头部用约定俗成:头部用 * ,行末用,行末用 ; Company Logo第四章第四章 C54x应用程序开发及仿真应用程序开发及仿真 C54x的伪指令的伪指令 伪指令的具体功
8、能有:伪指令的具体功能有: 将代码和数据汇编进指定的段将代码和数据汇编进指定的段 为未初始化的变量在存储器中保留空间为未初始化的变量在存储器中保留空间 控制清单文件是否产生控制清单文件是否产生 初始化存储器初始化存储器 汇编条件代码块汇编条件代码块 定义全局变量定义全局变量 为汇编器指定从中可以获得宏的库为汇编器指定从中可以获得宏的库 考察符号调试信息考察符号调试信息Company Logo第四章第四章 C54x应用程序开发及仿真应用程序开发及仿真 常用汇编伪指令常用汇编伪指令Company Logo第四章第四章 C54x应用程序开发及仿真应用程序开发及仿真 段定义伪指令段定义伪指令 汇编器通
9、过汇编器通过5条伪指令识别各功能部分:条伪指令识别各功能部分: (1)未初始化段未初始化段 - 预留空间预留空间 .bss 定义变量区、数组等定义变量区、数组等 .bss x, 4 ; 为为x开辟开辟4个单元的数据空间个单元的数据空间 .usect 定义堆栈区定义堆栈区 STACK .usect “STACK”, 10H 开辟开辟16个字单元作为堆栈区,段名个字单元作为堆栈区,段名STACK Company Logo第四章第四章 C54x应用程序开发及仿真应用程序开发及仿真 (2)已初始化段已初始化段 - 分配指令和数据分配指令和数据 .text 其后紧跟程序中的指令正文,汇编后生成可执其后紧
10、跟程序中的指令正文,汇编后生成可执 行代码,存于程序存储器区中。行代码,存于程序存储器区中。 . data 其后紧跟已初始化数据,有其后紧跟已初始化数据,有int和和word两种;两种; . sect 自定义代码和数据段;自定义代码和数据段;Company Logo第四章第四章 C54x应用程序开发及仿真应用程序开发及仿真 Company Logo第四章第四章 C54x应用程序开发及仿真应用程序开发及仿真 Company Logo第四章第四章 C54x应用程序开发及仿真应用程序开发及仿真 Company Logo第四章第四章 C54x应用程序开发及仿真应用程序开发及仿真 C54x的宏指令的宏指
11、令 自定义的一段独立特殊功能代码:自定义的一段独立特殊功能代码: add3 a, d, g, k add3 .macro x1, x2, x3, sum3 LD x1, A ; x1 A ADD x2, A ; A = x1+x2 ADD x3, A ; A = x1+x2+x3 STL A, sum3 ; .endmCompany Logo第四章第四章 C54x应用程序开发及仿真应用程序开发及仿真 4.3 C54x汇编程序的编辑、汇编与链接汇编程序的编辑、汇编与链接 汇编器汇编器汇编器汇编器调试程序调试程序调试程序调试程序链接器链接器链接器链接器文本编辑器文本编辑器文本编辑器文本编辑器.as
12、m源文件源文件.obj目标文件目标文件.out输出文件输出文件. cmd链接命链接命令文件令文件. lst列表文件列表文件. map存储器存储器映像文件映像文件十六进制十六进制十六进制十六进制转换程序转换程序转换程序转换程序HEX500HEX500- - o- - m- - lCompany Logo第四章第四章 C54x应用程序开发及仿真应用程序开发及仿真 段汇编器段汇编器 常用的汇编命令:常用的汇编命令: asm500 %1 s 1 x 调用汇编器命令调用汇编器命令调用汇编器命令调用汇编器命令 源文件名源文件名源文件名源文件名 将程序所有定义的符号放将程序所有定义的符号放将程序所有定义的符
13、号放将程序所有定义的符号放在目标文件的符号表中在目标文件的符号表中在目标文件的符号表中在目标文件的符号表中 生成一个生成一个生成一个生成一个列表文件列表文件列表文件列表文件. . . .lstlstlstlst 生成一个生成一个生成一个生成一个交叉汇编表交叉汇编表交叉汇编表交叉汇编表 Company Logo第四章第四章 C54x应用程序开发及仿真应用程序开发及仿真 lnk500 ?.cmd 链接器链接器 COFF - 公共目标文件格式公共目标文件格式 Common Object File Format COFF采用代码段和数据段的形式,以便于模块化的编程,使编采用代码段和数据段的形式,以便于
14、模块化的编程,使编程和管理更加方便。程和管理更加方便。 连续占有存储空间的代码块或数据块简称为段,是连续占有存储空间的代码块或数据块简称为段,是COFF文件中文件中最重要的概念。最重要的概念。汇编器和链接器提供一些伪指令来建立和管理各种各汇编器和链接器提供一些伪指令来建立和管理各种各样的段。样的段。 COFF文件的三种格式:文件的三种格式: COFF0、 COFF1、 COFF2。Company Logo第四章第四章 C54x应用程序开发及仿真应用程序开发及仿真 所有所有COFF文件都包括三种形式的段:文件都包括三种形式的段: .text 文本段(指令代码)文本段(指令代码) .data 已初
15、始化数据段已初始化数据段 .bss (为未初始化变量)保留空间段(为未初始化变量)保留空间段 段与目标存储器的对应关系段与目标存储器的对应关系 汇编器的任务汇编器的任务:在汇编过程中,根据汇编命令用适当的段:在汇编过程中,根据汇编命令用适当的段将各部分程序代码和数据连在一起,构成目标文件。将各部分程序代码和数据连在一起,构成目标文件。 链接器的任务链接器的任务:分配存储单元,即将目标文件中的段重新:分配存储单元,即将目标文件中的段重新定位到目标系统的存储器中,这一过程称为定位或分配定位到目标系统的存储器中,这一过程称为定位或分配。Company Logo第四章第四章 C54x应用程序开发及仿真
16、应用程序开发及仿真 图图4-2 目标文件中的段与目标存储器的关系目标文件中的段与目标存储器的关系 编程时,段没有绝对的定位,每个段都默认从编程时,段没有绝对的定位,每个段都默认从0 0地址开始。地址开始。 汇编器按汇编器按5条命令划分汇编程序的各部分条命令划分汇编程序的各部分: .bss .usect .text .data .sectCompany Logo第四章第四章 C54x应用程序开发及仿真应用程序开发及仿真 SPCSPC对段的处理对段的处理 汇编器为每个段都安排了一个单独的程序计数器称之为段程序计汇编器为每个段都安排了一个单独的程序计数器称之为段程序计汇编器为每个段都安排了一个单独的
17、程序计数器称之为段程序计汇编器为每个段都安排了一个单独的程序计数器称之为段程序计数器数器数器数器SPCSPCSPCSPC。 SPCSPCSPCSPC表示在程序代码或数据段内当前的地址。开始时汇编器将每表示在程序代码或数据段内当前的地址。开始时汇编器将每表示在程序代码或数据段内当前的地址。开始时汇编器将每表示在程序代码或数据段内当前的地址。开始时汇编器将每个个个个SPCSPCSPCSPC置置置置0 0 0 0。 (1 1 1 1)第一次遇见新段时,)第一次遇见新段时,)第一次遇见新段时,)第一次遇见新段时,SPCSPCSPCSPC置为置为置为置为0 0 0 0; (2 2 2 2)紧随的同类型程
18、序代码或数据加到段内时,增加相应的)紧随的同类型程序代码或数据加到段内时,增加相应的)紧随的同类型程序代码或数据加到段内时,增加相应的)紧随的同类型程序代码或数据加到段内时,增加相应的SPCSPCSPCSPC值;值;值;值; (3 3 3 3)相隔的同类型程序代码或数据合并计数,相应的)相隔的同类型程序代码或数据合并计数,相应的)相隔的同类型程序代码或数据合并计数,相应的)相隔的同类型程序代码或数据合并计数,相应的SPCSPCSPCSPC就在先就在先就在先就在先前的数值上继续增加。前的数值上继续增加。前的数值上继续增加。前的数值上继续增加。 链接器在链接时要对每个段进行重新定位。链接器在链接时
19、要对每个段进行重新定位。链接器在链接时要对每个段进行重新定位。链接器在链接时要对每个段进行重新定位。 Company Logo第四章第四章 C54x应用程序开发及仿真应用程序开发及仿真 2 2 * *3 3 * * 汇编一个初始化表到汇编一个初始化表到. .datadata段段 * *4 4 *5 5 00000000 .data6 6 00000000 00440044 coeff .word 044h,055h,066h 0001 0001 00550055 0002 0002 006600667 7 * *8 8 * * 在在. .bssbss段中为变量保留空间段中为变量保留空间 * *
20、9 9 * *1010 0000 0000 .bss buffer,81111 * *1212 * * 仍然在仍然在. .data data 段中段中 * *1313 * *1414 0003 0003 04560456 prt .word 0456hCompany Logo第四章第四章 C54x应用程序开发及仿真应用程序开发及仿真 1515 * *1616 * * 汇编代码到汇编代码到. .texttext段段 * *1717 * *1818 00000000 .text1919 00000000 100d 100d add: LD 0Dh,A2020 00010001 f010f010 a
21、loop: SUB #1, A 00020002 00010001 2121 00030003 f842f842 BC aloop,AGEQ 00040004 00010001 2222 *2323 * * 汇编另一个初始化表到汇编另一个初始化表到. . . .data data 段段 * * 24 24 * *2525 00040004 .data 2626 00040004 00cc00cc ivals .word 0CCh,0DDh,0EEh 0005 0005 00dd00dd 00060006 00ee00ee2727 * *2828 * * 为更多的变量定义另一个段为更多的变量定义
22、另一个段 * *2929 * *3030 00000000 var2 .usect “newvars”,2 31 31 00010001 inbuf .usect “newvars”,8 Company Logo第四章第四章 C54x应用程序开发及仿真应用程序开发及仿真 3232 * *3333 * * 汇编更多代码到汇编更多代码到. . . .texttext段段 * *3434 * *3535 00050005 .text 3636 00050005 110a110a mpy: LD 0Ah,B 37 37 00060006 f166f166 mloop MPY #0Ah,B 000700
23、07 000a000a 3838 00080008 f868 f868 BC mloop,BNOV 00090009 00060006 3939 * *4040 * * 为中断向量为中断向量. . . .vectorsvectors定义一个自定义段定义一个自定义段 * * 4141 * *4242 00000000 .sect “vectors” 43 43 00000000 00440044 .word 044h,088h 00010001 00880088 源程序源程序的行号的行号 段程序段程序计数器计数器目标目标代码代码汇编语言汇编语言源程序源程序Company Logo第四章第四章 C
24、54x应用程序开发及仿真应用程序开发及仿真 生生成成的的目目标标代代码码无意义的行不计无意义的行不计入目标代码,如入目标代码,如第第2 24 4行行Company Logo第四章第四章 C54x应用程序开发及仿真应用程序开发及仿真 链接器链接器 功能:对程序定位(功能:对程序定位(到存储器中到存储器中),是一种相对的定位方式),是一种相对的定位方式 程序的三种定位方式:程序的三种定位方式: 单片机单片机 - - 编译时定位(手工配置硬件资源)编译时定位(手工配置硬件资源) DSP - DSP - 链接时定位(软硬件开发可分离)链接时定位(软硬件开发可分离) PCPC机机 - - 加载时定位(依
25、赖操作系统)加载时定位(依赖操作系统) MEMORYMEMORYMEMORYMEMORY伪指令伪指令伪指令伪指令 用来用来用来用来划分划分划分划分目标系统的存储器配置目标系统的存储器配置目标系统的存储器配置目标系统的存储器配置空间空间空间空间,包,包,包,包括对存储器各部分命名,以及规定它们的起始地址和长度。括对存储器各部分命名,以及规定它们的起始地址和长度。括对存储器各部分命名,以及规定它们的起始地址和长度。括对存储器各部分命名,以及规定它们的起始地址和长度。 SECTIONSSECTIONSSECTIONSSECTIONS伪指令伪指令伪指令伪指令 用来指定链接器将输入段组合成输出段方用来指
26、定链接器将输入段组合成输出段方用来指定链接器将输入段组合成输出段方用来指定链接器将输入段组合成输出段方式,式,式,式,分配各段进入空间分配各段进入空间分配各段进入空间分配各段进入空间。 Company Logo第四章第四章 C54x应用程序开发及仿真应用程序开发及仿真 默默认认的的存存储储器器分分配配Company Logo第四章第四章 C54x应用程序开发及仿真应用程序开发及仿真 File1.obj.text1.data1.bss1table_1 (初始化的命名段)u_vars1 (未初始化的命名段)File2.obj.text2.data2.bss2table_2 (初始化的命名段)u_v
27、ars2 (未初始化的命名段)FFT(初始化的命名段)程序存储器程序存储器数据存储器数据存储器.text.text. .text1text1. .text2text2.data.data. .data1data1. .data2data2 .bss .bss. .bss1bss1. .bss2bss2tabletabletable_1table_1table_2table_2u_vars1u_vars1u_vars1u_vars1u_vars2u_vars2FFTFFTFFTFFT没有使用没有使用没有使用没有使用没有配置没有配置没有配置没有配置没有配置没有配置没有配置没有配置没有使用没有使用没
28、有使用没有使用Company Logo第四章第四章 C54x应用程序开发及仿真应用程序开发及仿真 【例】【例】【例】【例】 链接器命令文件举例。链接器命令文件举例。链接器命令文件举例。链接器命令文件举例。 a.obj b.obj /* a.obj b.obj /* 输入文件名输入文件名 */ */ -o prog.out /* -o prog.out /*指定输出文件的选项指定输出文件的选项*/*/ - -m prog.map /*m prog.map /*指定指定mapmap文件的选项文件的选项*/ */ MEMORYMEMORY /*MEMORY /*MEMORY 伪指令伪指令*/ */
29、PAGE 0 PAGE 0: ROM ROM:origin=1000h, length=0100horigin=1000h, length=0100h PAGE 1 PAGE 1: RAM RAM:origin=0100h, length=0100h origin=0100h, length=0100h SECTIONSSECTIONS /*SECTIONS /*SECTIONS伪指令伪指令*/ */ . .text : ROM text : ROM . .data : ROM data : ROM . .bss : RAM bss : RAM Company Logo第四章第四章 C54x应
30、用程序开发及仿真应用程序开发及仿真 Company Logo第四章第四章 C54x应用程序开发及仿真应用程序开发及仿真 Company Logo第四章第四章 C54x应用程序开发及仿真应用程序开发及仿真 4.4 C54x汇编程序的基本结构汇编程序的基本结构 顺序结构顺序结构分支结构分支结构 循环结构循环结构 子程序结构子程序结构Company Logo第四章第四章 C54x应用程序开发及仿真应用程序开发及仿真 4.4.1 4.4.1 顺序结构顺序结构 例例1 z = (x+y) - w * * ex41.asm z = (x+y) * - w * * .title “ex41.asm” .mm
31、regs STACK .usect “STACK”, 10H .bss x, 1 .bss y, 1 .bss w, 1 .bss z, 1 .def start 注释文档注释文档正式标题声明正式标题声明使用使用MMRMMR寄存器寄存器开辟开辟1616个单个单元格的堆栈元格的堆栈x0060Hy0061Hw0062Hz0063HCompany Logo第四章第四章 C54x应用程序开发及仿真应用程序开发及仿真 .data table: .word 6, 7, 9 .text start: STM #0, SWWSR ; 零等待状态零等待状态 STM #STACK+10H, SP; STM #x,
32、 AR1 RPT #2 MVPD table, *AR1+ LD x, A ADD y, A LD A, 3 SUB w, A初始化赋值(在程序空间):初始化赋值(在程序空间): x 6 , y 7, w 9 x 6 , y 7, w 9SP SP 栈底栈底0060 0060 AR1AR1重复重复3 3次数据传送:次数据传送: 6 6 x, 7 y 9 9 (x + y)3 - w (x + y)0Company Logo第四章第四章 C54x应用程序开发及仿真应用程序开发及仿真 4.4.3 4.4.3 循环结构循环结构 例例3 .title “ex43.asm” .mmregs STACK
33、.usect “STACK”, 10H .bss a, 4 .bss x, 4 .def start .data table: .word 1, 2, 3, 4 .word 8, 6, 9, 7Company Logo第四章第四章 C54x应用程序开发及仿真应用程序开发及仿真 .text start: STM #0, SWWSR ; STM #STACK+10H, SP; STM #a, AR1 RPT #7 ; 降低时间开销降低时间开销 MVPD table, *AR1+ STM #a, AR1 STM #x, AR2 STM #2, AR3 LD *AR1+, T MPY *AR2+, A
34、 loop1: LD *AR1+, T MPY *AR2+, B MAX A BANZ loop1, *AR3-(AR3)!=0(AR3)=0Company Logo第四章第四章 C54x应用程序开发及仿真应用程序开发及仿真 STL A, z end: B end .end 注意:注意:循环体的设计,尤其是找出循环规律,设计循循环体的设计,尤其是找出循环规律,设计循环控制条件是循环程序设计的关键。环控制条件是循环程序设计的关键。Company Logo第四章第四章 C54x应用程序开发及仿真应用程序开发及仿真 4.4.4 4.4.4 子程序结构子程序结构 例例4 .title “ex44.as
35、m” .mmregs STACK .usect “STACK”, 10H .bss x, 4 .bss a, 4 .bss y, 1 .def start .data table: .word 1*32768/10; ? .word 2*32768/10Company Logo第四章第四章 C54x应用程序开发及仿真应用程序开发及仿真 .word -3*32768/10 .word 4*32768/10 .word 8*32768/10 .word 6*32768/10 .word -4*32768/10 .word -2*32768/10 .text start: STM #0, SWWSR
36、 SSBX FRCT STM #STACK+10H, SP STM #x, AR1 RPT #7 MVPD table, *AR1+Company Logo第四章第四章 C54x应用程序开发及仿真应用程序开发及仿真 CALL SUM end: B end SUM: STM #x, AR2 STM #a, AR3 RPTZ A, #3 MAC *AR2+, *AR3+, A STH A, y RET .end调调用用返返回回结结束束Company Logo第四章第四章 C54x应用程序开发及仿真应用程序开发及仿真 4.5 软件仿真器软件仿真器Simulator Simulator是一种很方便的软
37、件调试工具,利用它调试是一种很方便的软件调试工具,利用它调试程序最为简单,并且不需要目标硬件,在程序最为简单,并且不需要目标硬件,在PC机上运行即可。机上运行即可。 编制批处理文件编制批处理文件Als.bat,进入仿真环境,它包括:,进入仿真环境,它包括: asm500.exe lnk500.exe sim54x.exeCompany Logo第四章第四章 C54x应用程序开发及仿真应用程序开发及仿真 DisassembleDisassemble窗口:窗口: 显示源程序显示源程序 以及存储器地址以及存储器地址CPUCPU窗口:窗口: 显示显示CPUCPU中累加器中累加器A/BA/B的内容的内容
38、 以及以及CPUCPU寄存器(寄存器(MMRMMR)的内容)的内容CommandCommand窗口:窗口: 手动键入各种仿真命令手动键入各种仿真命令MemoryMemory窗口:窗口: 检查或修改存储器中的内检查或修改存储器中的内容容Company Logo第四章第四章 C54x应用程序开发及仿真应用程序开发及仿真 一些仿真命令:一些仿真命令: 1 1)进入:)进入:SIM54XWSIM54XW 2 2)退出:)退出:QUIT QUIT 3 3)加载:)加载:load load .out 4 4)运行:)运行:run run 5 5)步进:)步进:step step 6 6)复位:)复位:reset reset restart restart 7 7)退出:)退出:ESCESC键键 8 8)检查程序时间开销:?)检查程序时间开销:?CLKCLK 9 9)清除过往命令:)清除过往命令:CLS CLS Company Logo