您的当前位置:首页正文

dsp实验3:编写一个以C 语言为基础的DSP 程序

来源:华佗健康网
苏州职业大学实训报告

科目:DSP应用技术 实训项目:编写一个以C 语言为基础的DSP 程序 班级: 学号: 姓名: 一、实验目的: 1.学习用汇编语言编制程序;了解汇编语言程序与C 语言程序的区别和在设置上的不同。 2.了解TMS320C28x 汇编语言程序结果和一些简单的汇编语句用法。 3.学习在CCS 环境中调试汇编代码。 二、实验设备: PC 兼容机一台,操作系统为Windows2000(或Windows98,WindowsXP,以下默认为 Windows2000),安装Code Composer Studio 3.3 软件。 三、实验原理: 1. 汇编语言程序 汇编语言程序除了程序中必须使用汇编语句之外,其编译选项的设置与C 语言编制的 程序也稍有不同。其区别为: (1)汇编语言程序在执行时直接从用户指定入口开始,常见的入口标号为“start”,而C 语 言程序在执行时,先要调用C 标准库中的初始化程序(入口标号为“_c_init00”),完成 设置之后,才转入用户的主程序main()运行。 (2)由于CCS 的代码链接器默认支持C 语言,在编制汇编语言程序时,需要设置链接参数, 选择非自动初始化,注明汇编程序的入口地址。 2.程序设计要求 程序框图: 四、实验步骤: 1.实验准备:设置软件仿真模式 2.建立新的工程文件 (1)双击桌面上图标, 启动 Code Composer Studio 3.3。 (2)进行以下设置: 1 / 4

图3.1建立TASM.pjt 3.设置工程文件: 图 3.2设置工程文件 4.编辑输入源程序 (1)汇编语言程序 图 3.3新建源文件 先新建源程序窗口: -输入源程序: .global start start: MOV @AR1,#9000 ;给ar1 寄存器赋值 LOOP: ADDB SP,#3 ;此时sp 指针为403h 地址 MOV *-SP[1],#10 ;把立即数10 放到402 地址上 MOV *-SP[2],#1 ;把立即数1 放到401 地址上 MOV AL,*-SP[2] ;把401 地址上数据读出放到AL 寄存器中 ADD AL,*-SP[1] ;把401 和402 地址中数据做加法运算,把结果放到AL 寄 存器中 MOV *-SP[3],AL ;把AL 中值放到400h 地址中 nop ;空指令 nop SUBB SP,#3 ;设置sp 指针为400h 地址 BANZ LOOP,AR1-- ;有条件跳转,只要ar1 中的值不为0 .end 注意:在输入汇编语言源程序时,除了标号以外的程序行必须以一个空格或退格字符开 2 / 4

始。 -保存源程序为TASM.asm。 (2)连接命令文件 -如同第(1)步操作,建立空的源程序窗口。 -输入连接命令文件内容: -stack 400h -heap 100 MEMORY {PAGE 0 : PROG(R) : origin = 0x80000, length = 0x10000 PAGE 0 : BOOT(R) : origin = 0x3FF000, length = 0xFC0 PAGE 0 : RESET(R) : origin = 0x3FFFC0, length = 0x2 PAGE 0 : VECTORS(R) : origin = 0x3FFFC2, length = 0x3E PAGE 1 : M0RAM(RW) : origin = 0x000000, length = 0x400 PAGE 1 : M1RAM(RW) : origin = 0x000400, length = 0x400 PAGE 1 : L0L1RAM(RW) : origin = 0x008000, length = 0x2000 PAGE 1 : H0RAM(RW) : origin = 0x3F8000, length = 0x2000} SECTIONS {/* 22-bit program sections */ .reset : > RESET, PAGE = 0 vectors : > VECTORS, PAGE = 0 .pinit : > PROG, PAGE = 0 .cinit : > PROG, PAGE = 0 .text : > PROG, PAGE = 0 /* 16-Bit data sections */ .const : > L0L1RAM, PAGE = 1 .bss : > L0L1RAM, PAGE = 1 .stack : > M1RAM, PAGE = 1 .sysmem : > M0RAM, PAGE = 1 /* 32-bit data sections */ .ebss : > H0RAM, PAGE = 1 .econst : > H0RAM, PAGE = 1 .esysmem : > H0RAM, PAGE = 1} -将文件存为C:\\ICETEK\\F2812\\DSP281x_examples\\lab0103-Asm\\TASM.cmd (3)将上述编译的源程序加入工程TASM.pjt 注意:默认新建工程为c 语言的环境,由于本实验的主程序为汇编语言,所以我们要 把它设置为汇编模式才能正常工作。 5.编译源文件、下载可执行程序 (1)选择菜单Project->Rebuild All。 (2)执行File Load Program,在随后打开的对话框中选择刚刚建立的 C:\\ICETEK\\F2812\\DSP281x_examples\\lab0103-Asm\\debug\\TASM.out 文件。完成后,系统 自动打开TASM.asm 源程序窗口,并在其中指示程序的入口地址为标号“start”后的语 句。 6.打开观察窗口 (1)选择菜单View->Disassembly。注意程序运行指针停留的位置。 (2)开启CPU 寄存器观察窗口:单击菜单View->Registers-> core。请看PC 指针取值与当前 程序运行地址对应。此处为0x80000。 (3)单击菜单View->Registers->Pseudo。请看AL 寄存器,此时应为0。如果AL 寄存器的值 不为0,请点击Debug->Reset Cpu, 对2812 芯片进行复位。 (4)开启内存观察窗口: 选择“View”菜单中“Memory…”项,在“Memroy Window Options”窗口中的“Adress” 项中输入 0x400,单击“OK”完成设置。 7.观察程序运行结果 (1)单步运行1 次(按F10 快捷键即可),在观察窗中观察到AR1 寄存器被赋值0x9000。 (2)再单步运行3 次,将看到内存窗口中0x402 被赋值0x10,0x401 地址被赋值0x1。 (3)再单步运行3 次,可观察0x400 地址中的值变为0xb,此数据就是把0x402 和0x401 3 / 4

地 址中数据相加得到的。 可以修改下面两句语句的立即数值,重新编译,然后单步运行观察结果。 MOV *-SP[1],#10 ;把立即数10 放到402 地址上 MOV *-SP[2],#1 ;把立即数1 放到401 地址上 8.对照观察map 文件和cmd 文件的内容 (1)选择菜单File->Open…,将找到 C:\\ICETEK\\F2812\\DSP281x_examples\\lab0103-Asm\\Debug 目录,将文件类型改为 “Memory Map Files”,选择TASM.map 文件、打开。 (2)打开TASM.cmd 文件。 ()程序的入口地址:map 文件中“ENTRY POINT SYMBOL”中说明了程序入口地址(start)。 (4)内存使用情况: -map 文件中“MEMORY CONFIGURATION”标明了程序占用RAM 的使用情况,共占 用fH 个存储单元。比较一下,这比用C 编制的程序占用的要小得多。 -观察map 文件中的“SECTION ALLOCATION MAP”段,可以看出TASM.obj 的入口 地址为80000H,这也是程序的入口地址。 9.退出CCS 五、实验结果: 汇编语言程序可以从指定位置开始运行,但汇编程序需要完成对运行环境的初始化工作。 实验中的程序有堆栈操作,所以初始化堆栈指针,这在编制大型应用程序中是必须要的功能。 六、实验总结:

4 / 4

因篇幅问题不能全部显示,请点此查看更多更全内容