内容:DSP实验报告 2 班级:通信工程02—3班 姓名: 学号:40226101 1
DSP 实验报告 2 一.题目:
试编一个程序,计算y= Σaixi,并找出3项乘积aixi (i=1,23)中的最小值,放入MIN单元中。 二.实验目的:
1. 了解DSP的结构 2. 掌握DSP的基本指令 三.实验步骤:
1. 建立一个工程:
2. 新建源文件,输入汇编程序(*.asm),.cmd文件,vectors文件。 3. 将.asm文件,.cmd文件,vectors文件添加至工程中。 4. 加断点编译。
5. 下载*.out文件到软件仿真版(File---Load Program) 6. 复位CPU运行。
四.分析:
(1)文件“vectors.asm”
.title \ ; 源程序名为“vectors.asm” .ref start
.sect \ ; 定义向量表,紧跟其后的是复位向量和中断向量,名为vectors B start ; 跳转到 start 处 .end ; 结束汇编命令
(2)文件“example2.asm” .title \ ; 源程序名为“example2.asm”
.mmregs ; 将TMS320各寄存器名定义为全局符号,这样就可以直接引用寄存器(符号) STACK .usect \ ; 堆栈的设置
.bss a,3 ; 为变量分配7个字的存储空间 .bss x,3 .bss y,1
.bss max,1 .def start .def _c_int00 .data
table: .word 1,5,3 ; a1,a2,a3 .word 8,6,7 ; x1,x2,x3
.text ; 表示下面是汇编源程序正文(可执行程序代码) _c_int00: B start
start: STM #0,SWWSR ; adds no wait states STM #STACK+10H,SP ; 置堆栈指针
STM #a,AR1 ; AR1 point a
RPT #7 ; 下一句重复8次
MVPD table,*AR1+ ; from data memory into data memory CALL SUM ; call SUM subroutine CALL MAX ; call MAX subroutine end: B end
SUM: STM #a,AR3 ; AR3 point a STM #x,AR4 ; AR4 point x
RPTZ A,#3 ; 重复执行下一句 MAC *AR3+,*AR4+,A ; 循环累加到A中 STL A,@y RET
MAX: STM #a,AR1 ; AR1 point a STM #x,AR2 ; AR4 point x
内容:DSP实验报告 2 班级:通信工程02—3班 姓名: 学号:40226101 2
STM #2,AR3 ; AR3 置入2
LD *AR1+,T
MPY *AR2+,A ; 第一个乘积在累加器A中 loop: LD *AR1+,T
MPY *AR2+,B ; 其他乘积在累加器B中
MAX A ; 累加器A和B比较,选大的存在A中 BANZ loop,*AR3- ; 循环修正 STL A,@max RET .end
(3) 文件“example2.cmd” MEMORY {
PAGE 0:
EPROM: org=0E000H len=0100H VECS: org=0FF80H len=0004H PAGE 1:
SPRAM: org=0060H len=0020H VECS: org=0080H len=0100H }
SECTIONS {
.text :> EPROM PAGE 0 .data :> EPROM PAGE 0 .bss :>SPRAM PAGE 1
STACK :> SPRAM PAGE 1 .vectors :> VECS PAGE 0 }
查看结果,有:
五.知识总结
.title 紧跟其后的是用双引号括起的源程序名
.end 结束汇编命令,汇编程序将忽略此后的任何源语句,所以它应是程序的最后语句 .def 在此模块中定义,可为别的模块引用
.ref 在当前模块中使用,但在别的模块中定义的符号。
.mmregs 将TMS320各寄存器名定义为全局符号,这样就可以直接引用寄存器(符号) .sect 建立包含代码和数据的自定义段 .text 紧跟其后的是汇编语言程序正文
六.心得体会
通过动手练习DSP汇编,检验了DSP中的指令的运用。
通信工程02—3班
4 0 2 2 6 1 0 1