dsp课程设计材料修改版_第1页
dsp课程设计材料修改版_第2页
dsp课程设计材料修改版_第3页
dsp课程设计材料修改版_第4页
dsp课程设计材料修改版_第5页
已阅读5页,还剩6页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、实验一 CCS(Code Composer Studio 2.0)安装与认识一、实验目的 1掌握 Code Composer Studio 2.0 的安装和配置。 2了解 Code Composer Studio 2.0 软件的操作环境和基本功能。3. 了解 CCS环境下软件工程的建立,编译、日案件调试运行的基本方法。二、实验设备要求安装CCS2(Code Composer Studio 2)的PC机。三、实验步骤2、配置ccs软件我们做的实验是使用c5416模拟仿真,所以配置时选择C5416 Device Simuliator驱动程序,其图如下(启动setup ccs)图2-9 确认选择c5

2、416 Device Simulator图2-10 关闭配置窗口3、创建新的工程(截图略)4、编辑源文件源文件需要两种:一种是实现功能的源程序,一种是连接的命令文件5、编译源文件,产生公共目标文件 .title "for test ADD,SUB,MPY. program . " .mmregs .global _c_int00 VAL1 .set 012h ; 18VAL2 .set 034h ; 52VAL3 .set 04000h ; 0.5VAL4 .set 02000h ; 0.25(fraction) & 8192 (integer)VAL5 .set

3、04ab8h ; 0.58374VAL6 .set 0ffeeh ; -18VAL7 .set 0b548h ; -0.58374 .bss temp,1 ; address of 0x080 .bss temp1,1 ; address of 0x081 .bss temp2,1 ; address of 0x082 .bss temp3,1 ; address of 0x083 .bss temp4,1 ; address of 0x084 .bss temp5,1 ; address of 0x085 .bss temp6,1 ; address of 0x086 .bss temp7,

4、1 ; address of 0x087;result register .bss add_result,1 ; address of 0x088 .bss sub_result,1 ; address of 0x089 .bss mpy_i_h,1 ; address of 0x08a .bss mpy_i_l,1 ; address of 0x08b .bss mpy_f,1 ; address of 0x08c .bss quot_i,1 ; address of 0x08d .bss remain_i,1 ; address of 0x08e .bss quot_f,1 ; addre

5、ss of 0x08f .text _c_int00: ld #temp,DP ; load DP of temp1 st #VAL1,temp1 st #VAL2,temp2 ; init temp1 & temp2 ,18+52=70(0x46);- test ADD - ld temp1,a ; load temp1 -> a add temp2,a ; a+temp2 -> a stl a,add_result ; save a(low 16 bits) -> add_result nop ; set breakpoint st #VAL6,temp3 st

6、#VAL1,temp4 ; init temp3 & temp4,(-18)-18=-36(0x0ffdc);- test SUB - stm #temp3,ar2 ; address of temp3 -> ar2 stm #temp4,ar3 ; address of temp4 -> ar3 sub *ar2+,*ar3,b ; (temp3<<16)-(temp4<<16) -> b,ar2+ sth b,sub_result ; result in sub_result nop ; set breakpoint st #VAL1,te

7、mp1 st #VAL2,temp2 ; init temp1 & temp2,18*52=936(0x3a8);- test MPY (integer) - rsbx FRCT ; prepare for integer mpy ld temp1,T ; temp1 -> T mpy temp2,a ; temp1*temp2 -> A (result is 32 bit) sth a,mpy_i_h ; the high 16bit in mpy_i_h stl a,mpy_i_l ; the low 16bit in mpy_i_l nop ; set breakpo

8、int st #VAL3,temp3 st #VAL7,temp4 ; init temp3 & temp4,0.5*(-0.58374)=-0.29187(0x0daa4);- test MPY (fraction) - ssbx FRCT ; prepare for fraction mpy ld temp3,16,a ; load temp3 into A (high 16 bits) mpya temp4 ; temp3*temp4 -> B, and temp4 -> T sth b,mpy_f ; result in mpy_f nop ; set breakp

9、oint st #VAL2,temp1 st #VAL6,temp2 ; init temp1 & temp2,52/-18= -2(0xfffe) mod 16(0x10);- test DIV (integer) - ld temp1,T ; load temp1 -> T mpy temp2,A ; temp1*temp2 -> A ld temp2,B ; load temp2 -> B (low 16 bits) abs B ; |B| -> B stl B,temp2 ; save B low 16 bits -> temp2 ld temp1

10、,B ; load temp1 -> B (low 16 bits) abs B ; |B| -> B rpt #15 ; repeat SUBC 16 times subc temp2,b ; use SUBC done div bcd idiv_end,agt ; delay jump, run the following two instruction,then ; if A>0,then jump to label idiv_end,end div stl B,quot_i ; save low 16 bits of B -> quot_i -> quot

11、ient sth B,remain_i ; save high 16 bits of B -> remain_i -> remainder xor B ; if result if negative, then 0 -> B sub quot_i,B ; put minus to quotient stl B,quot_i ; save low 16 bits of B -> quot_i -> quotientidiv_end: nop ; set breakpoint st #VAL3,temp1 st #VAL5,temp2 ; init temp1 &am

12、p; temp2,0.5/0.58374=0.8565457(0x6da3);- test DIV (fraction) - ld temp1,T ; load temp1 -> T mpy temp2,A ; temp1*temp2 -> A ld temp2,B ; load temp2 -> B (low 16 bits) abs B ; |B| -> B stl B,temp2 ; save B low 16 bits -> temp2 ld temp1,16,B ; load temp1 -> B (high 16 bits) abs B ; |B

13、| -> B rpt #15 ; repeat SUBC 16 times subc temp2,b ; use SUBC done div and #0ffffh,B ; 0 -> high 16 bits of B bcd fdiv_end,agt ; delay jump, run the following two instruction,then ; if A>0,then jump to label fdiv_end,end div stl B,-1,quot_f ; right shift 1 bit then save to quot_f -> quot

14、ient xor B ; if result is negative, then 0 -> B sub quot_f,B ; put minus to quotient stl B,quot_f ; save low 16 bits of B -> quot_f -> quotientfdiv_end: nop ; set breakpointend: b end .end/* DES5402PP Example CMD !*/MEMORY PAGE 0: IPROG: origin = 0x2080, len = 0x1F80 VECT: origin = 0x2000,

15、len = 0x80 EPROG: origin = 0x38000, len = 0x8000 PAGE 1: USERREGS: origin = 0x60, len = 0x1c BIOSREGS: origin = 0x7c, len = 0x4 IDATA: origin = 0x80, len = 0x1F80 EDATA: origin = 0x4000, len = 0x4000SECTIONS .vectors: > VECT PAGE 0 .sysregs: > BIOSREGS PAGE 1 .trcinit: > IPROG PAGE 0 .gblin

16、it: > IPROG PAGE 0 .bios: > IPROG PAGE 0 frt: > IPROG PAGE 0 .text: > IPROG PAGE 0 .cinit: > IPROG PAGE 0 .pinit: > IPROG PAGE 0 .sysinit: > IPROG PAGE 0 .bss: > IDATA PAGE 1 .far: > IDATA PAGE 1 .const: > IDATA PAGE 1 .switch: > IDATA PAGE 1 .sysmem: > IDATA PAGE

17、 1 .cio: > IDATA PAGE 1 .MEM$obj: > IDATA PAGE 1 .sysheap: > IDATA PAGE 1源程序需要编译/汇编/链接,产生目标代码。可以在Project选择Rebuile All菜单,也可以选择快捷工具栏的对应工具图标计入编译-汇编-连接过程,编译完毕将产生公共目标文件,其后缀名为.OUT的文件,将.OUT文件载入dsp器件即可进行调试和运行。6、调试和运行由于我们没有开发板调试,所以我们是在PC机上模拟运行调试。利用File菜单的下一级菜单Load Program,将前面产生目标程序调入调试器运行,调试可包括设置断点,

18、单步或者连续运行,查看错误等,调入程序如图图3-10 调入程序调试7、查看结果调试无误的程序后,通过View菜单可以打开CPU寄存器观察窗口,存储器观察窗口、反汇编窗口、变量观察窗口等,用于观察程序运行时CPU寄存器的变化,存储器的变化,加入到变量观察窗口的变量的变化等。图3-14 打开观察窗口实验二 汇编语言程序和CMD(链接控制)文件认识一、 实验目的 1学习用汇编语言编制程序;2. 了解汇编语言程序下CCS使用它们时在设置上与C语言程序时的区别。 2学习编制命令文件控制代码的连接。 3学会建立和改变 map 文件,以及利用它观察 DSP 内存使用情况的方法。 4熟悉使用软件仿真方式调试程

19、序。二、实验设备和要求1、安装CCS2(Code Composer Studio 2)的PC机。2、编译和修改源文件或命令文件,查看它们之间的联系。三、实验原理(一)汇编语言程序连接器的设置 汇编语言程序除了程序中必须使用汇编语句之外,其编译选项的设置与 C 语言编制的程序也稍有不同。其区别为: 汇编语言程序在执行时直接从用户指定入口开始,常见的入口标号为“start” ,而 C 语言程序在执行时,先要调用 C 标准库中的初始化程序(入口标号为“_c_init00”),完成设置之后,才转入用户的主程序 main()运行;为了支持 C 初始化代码的连接,C 程序在编译时要包含 C 语言库和与之相

20、配的头文件,这需要用户将库添加到工程中。 由于 Code Composer Studio的代码链接器默认支持 C 语言,在编制汇编语言程序时,需要设置链接参数,选择非自动初始化,注明汇编程序的入口地址。设置方法:在Project菜单下点击第二级菜单Build Options1、 进入Build设置界面;2、 点击图3-16的Links,进入连接参数设置;3、 在Autoinit Mode下拉选择框中选择;No Autoinitialization (非自动初始化)选项;4、 在Code Entry Point (-e)框中填入汇编语言程序指定的入口点标号start。设置完后的截图如下:(二)命

21、令文件的作用命令文件(文件名后缀为 cmd)为链接程序提供程序和数据在具体 DSP 硬件中的位置分配信息。通过编制命令文件,我们可以将某些特定的数据或程序按照我们的意图放置在 DSP 所管理的内存中。命令文件也为链接程序提供了 DSP 外扩存储器的描述。它由MEMARY和SECTIONS两段组成。MEMORYPAGE 0 .PAGE 1.SECTIONS.text .(1)MEMARY部分MEMORY是用来指定芯片的ROM和RAM的大小和划分出几个区间.其中 PAGE 0 对应ROM; PAGE 1对应RAM;还可以有PAGE2PAGE255。 PAGE 里包含的区间名字与其后面的参数,确定了

22、该区间的起始地址和长度.例如:VECT : o=80h,l=80h段名称为VECT,o=80H表示起始地址为80H,l=80H表示该段程度为80H个字。类似,PRAM : o=100h,l=1f00h段名为PRAM,开始地址100H,段长度1f00H个字。它的一般的格式为:PAGEx : name(attr) : origin =开始地址值,length = 长度值origin可以简写为 org 或 olength可以简写为 len 或 l属性 attr是可选的,可以不要。(2)SECTIONS部分用来指定源程序中,某一个段名(例如.text)以下,另一个段名以上的程序(属于PAGE0)或数据

23、(属于PAGE1)的存放位置。位置由“>”符号后的存储器分段名指定。例如 .text : > PRAM PAGE 0.data : > PRAM PAGE 0表明源程序的 .text 段存放在 PAGE0 (程序存储区)的PRAM区域,,data段同样存放在PAGE0 (程序存储区)的PRAM区域,跟在.text后面存放。.const : > DRAM PAGE 1.bss : > DRAM PAGE 1表示 源程序中定义的 .const 段存放在PAGE1(数据存储器)DRAM段,.bss跟在.const后面存放。.cmd文件是用伪指令编写的,上面只介绍了最基本

24、的伪指令,还有很多其它伪指令,用到时查相关手册。(三)内存映射map文件作用通常我们设计、开发的 DSP 程序在调试好后,要固化到系统的 ROM 中。为了更精确地使用 ROM 空间,我们就需要知道程序的大小和位置,通过建立目标程序的 map 文件,可以了解 DSP 代码的确切信息。当需要更改程序和数据的大小和位置时,就要适当修改 cmd 文件和源程序,再重新生成 map 文件来观察结果。在集成环境中的LINKS设置页面,可以选择是否生成.map文件,当给出.map文件名时,将生成对应的.map文件。一、 实验步骤1、 启动ccs软件2、 新建工程,新建一个UseCMD工程,设置工程文件,在bu

25、ilt option 菜单下设置linker,将Autoinit Model项设置成“No Autoinitialization” “Code Entry Point”项中输入“start” 。 单击确定。3、 编译调试文件,新建UseCMD.asm文件和UseCMD.cmd文件,保存;单击菜单“Project” 、 “Rebuild All”;没有错误则执行 File /Load Program ,在随后打开的对话框中选择刚刚建立的 UseCMD.out 文件。完成后,系统自动打开源程序文件 UseCMD.asm。 4、 打开观察窗口如下(1) 开启 CPU寄存器观察窗口:单击菜单“View

26、” 、 “CPU Registers” 、 “CPU Registers” 。 (2) 在内存观察窗口中观察变量的值:选择“View”菜单中“Memory”项,在“Memroy Window Options”窗口中的“Adress”项中输入 x,单击“OK”完成设置;在随后显示的“Memory”窗口中单击鼠标右键,选择“Float In Main Window”项。这时,代表程序运行位置的黄色光标条停在 start 标号下面语句上,程序将从此开始执行。 (1) 单步执行程序(按 F10 键)2 次,可观察到 CPU寄存器窗口中 DP和 ST0 的值有变化。 (2) 单步运行 2 次,在变量窗口

27、中观察到变量 x、y被赋值。 (3) 单步执行到 xh 标号后面的语句,观察 ACC 寄存器和变量 z 值的变化。 其截图如下5、 观察map文件和cmd文件(1) 选择菜单“File” 、 “Open” ,将找到 C:2407EDULabLab02-UseCMD 目录,将文件类型改为“Memory Map Files” ,选择刚刚生成的 UseCMD.map 文件、打开。 (2) 展开工程管理窗中的 UseCMD.pjt,双击其中的 UseCMD.cmd 文件。(3) 程序的入口地址:cmd 文件的 SECTION中指定.text 段放到程序区(PAGE 0)的 PRAM中,在 MEMORY

28、 中指定 PRAM 从内存地址 100h 开始,长度为 1f00h;再看 map 文件中“ENTRY POINT SYMBOL”中说明了“start”标号的地址为十六进制 0000100,两者相符。 (4) 内存的占用情况:通过观察 map 文件中的“MEMORY CONFIGURATION”段可以了解内存的使用情况,可以看到,程序所占用的长度为十六进制 b,即11个字长,而数据区因开设了 3 个变量,所以占用了 3 个字的地址空间 6、改变内存分配 修改 cmd 文件中的 PRAM : o=100h,l=1f00h 改为 PRAM : o=200h,l=1e00h 重新编译工程,观察 map

29、 文件中有何变化。实验小结通过实验可以发现,修改 cmd 文件可以安排程序和数据在 DSP 内存资源中的分配和位置;map 文件中描述了程序和数据所占用的实际尺寸和地址。 实验程序中计算变量的取值之和,由于取值较小,所以结果仍为 16 位数,程序中仅考虑保存acc 的低 16位作为结果。但如果计算中有进位等问题就需要考虑保存 acc 的高16 位结果了。 实验三 汇编语言程序设计-数据存取实验一、 实验目的 1了解内部存储器空间的分配及指令寻址方式。 2学习利用CCS修改、填充 DSP 内存单元的方法。 3学习操作TMS320C5xxx 内存空间的指令。二、实验设备要求安装CCS2(Code

30、Composer Studio 2)的PC机。三、实验原理1TMS320VC54x DSP 内部存储器资源介绍: (1) 总线C54x 片内有8 条16 位主总线:4 条程序/数据总线和 4 条地址总线,功能如下: -程序总线(PB);传送取自程序存储器的指令代码和立即操作数。 程序地址总线(PAB);传送程序存储区的地址信号 2条数据读总线(CB,DB);用于读内部数据存储器 1条数据存储器写总线(EB):用于向片内数据存储器写数据 3个数据存储器地址总线(PAB、CAB、DAB、EAB):与CB,DB,EB数据总线对应,用于传送相应的地址信息。(2)存储器 C5416的总存储空间为 192

31、K 字,分成 3 个可独立选择的空间:程序存储空间(64K 字) ,数据存储空间(64K字) ,输入/输出(I/O)空间(64K字) 。 程序区: 0000-007Fh: OVLY位= 1,保留空间 OVLY位=0,片外扩展存储器 0080-7FFFh: OVLY位= 1,片上DARAM0-3 OVLY位=0,片外扩展存储器 8000-BFFFh: 片外扩展存储器 C000-FEFFh: MP/MC位=0 片上ROM,4Kx16位 MP/MC 位=1片外扩展存储器 FF00-FF7Fh: MP/MC位=0,保留空间 MP/MC 位=1,片外扩展存储器 FF80-FFFFh: MP/MC位=0,

32、片上中断向量表 MP/MC 位=1,片外扩展中断向量表 数据区: 0000-005Fh: 寄存器映射地址 0060-007Fh: 暂存器 SPRAM 0080-7FFFh: 片上 DARAM0-3,32Kx16 位 8000-FFFFh: DROM位=1,片上DARAM4-7 DROM 位=0,片外扩展存储器 I/O区: 0000-FFFFh: 片外扩展区 扩展程序存储器空间: 扩展程序存储器空间采用分页扩展方法,使程序空间可扩展到 8192K字。 2MS320C54x 数据寻址方式 C54x 共有7种有效的寻址方式: (1)立即寻址:主要用于初始化。 例如:LD #10,A ;将立即数 10

33、 传送至累加器 A (2)绝对寻址:利用 16 位地址寻址存储单元。 例如:STL A,*(y) ;将累加器的低 16 位存放到变量与 y所在的存储单元中 (3)累加器寻址:把累加器的内容作为地址。 例如:READA x ;按累加器 A作为地址读程序存储器,并存入变量 x 所在的数据存储器单元 (4)直接寻址:利用数据页指针或堆栈指针寻址。 例如:LD x,A ;(DP+x的低 7 位地址)ÆA (5)间接寻址:利用辅助寄存器作为地址指针。 例如:LD *AR1,A ;( (AR1) )ÆA (6)存储器映象寄存器寻址:快速寻址存储器映象器存器。 例如:LDM ST1,B

34、;(ST1)ÆB (7)堆栈寻址:压入/弹出数据存储器和 MMR(存储器映象寄存器) 。 例如:PSHM AG ;(SP)-1ÆSP, (AG)ÆTOS四、实验步骤(1)建立工程参照实验1,实验2的方法建立工程。该实验的示例源程序及.cmd文件存放在Lab03-Memory文件夹下。(2)添加汇编语言源文件和.cmd文件,方法与实验2相同。(3)设置连接器:本实验所用程序是汇编语言程序,故参照实验2的设置方法设置。(4)生成输出文件:参照实验1和实验2的方法。(5)装入程序运行:执行 File / Load Program ,在随后打开的对话框中选择刚刚建立的 .

35、out 文件(在该实验所选择文件夹下的Debug子文件夹下)。五、实验结果(1)显示程序:选择菜单“View”的“Memory”项;在“Title”中输入 PROG,在“Address”项中输入 0x1000,选择“Page”项为“Program” ;单击“OK”按钮; “PROG” 窗口中显示了从地址1000H开始的程序存储器内容。根据 cmd 文件中的设置,下载后的机器代码的入口应从 1000H处存放。 (2)修改程序区存储单元 程序区单元的内容由 CCS的下载功能填充,但也能用手动方式修改;双击“PROG”窗口地址“0x1000:”后的第一个数,显示“Edit Memory”窗口,在“Data”中输入 0x1234,单击“Done”按钮,观察“PROG”窗口中相应地址的数据被修改。 (3)观察修改数据区 显示片内数据存储区 DARAM0:选择菜单“View”的“Memory”项;在“Title

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论