DSP原理与应用实验指导书Word文档格式.docx
- 文档编号:19590782
- 上传时间:2023-01-08
- 格式:DOCX
- 页数:66
- 大小:1.30MB
DSP原理与应用实验指导书Word文档格式.docx
《DSP原理与应用实验指导书Word文档格式.docx》由会员分享,可在线阅读,更多相关《DSP原理与应用实验指导书Word文档格式.docx(66页珍藏版)》请在冰豆网上搜索。
自定义未初始化段STACK及大小(10H个字),最左边的STACK是标号
.bssx,5;
声明数组x,5个字
.bssy,1;
声明变量y,1个字
.defstart;
声明本文件中的标号start能被别的文件(程序)引用
.data;
伪指令,指示下面的代码为数据段,通常包含初始化的数据(常数)。
table:
.word10,20,3,4,5;
声明5个16位整数类型的常数。
table是标号。
.text;
伪指令,指示下面的代码为文本段,通常包含可执行的代码。
start:
STM#0,SWWSR;
SWWSR=0,插入0个等待状态。
start是标号。
STM#STACK+10H,sp;
sp=#STACK+10H,设置堆栈指针指向堆栈段的底部
STM#x,AR1;
AR1=#x或AR1指向数组x
RPT#4;
下一条指令重复执行4+1=5次
MVPDtable,*AR1+;
数据传送。
程序存储器中的table数据表→AR1+指向的数据存储器
LD#0,A;
累加器A清零
CALLSUM;
调用求和子程序SUM
end:
Bend;
无条件转移到标号end所在地方执行程序
SUM:
;
标号,指示求和子程序SUM从这里开始
STM#x,AR3;
AR3指向数组x
STM#4,AR2;
AR2=4
loop:
ADD*AR3+,A;
*AR3+A→A,然后AR3=AR3+1。
loop是标号。
BANZloop,*AR2-;
如果AR2的值不为0,AR2=AR2-1,跳转到loop处执行;
否则执行下一条指令
STLA,*(y);
y=AL
RET;
子程序返回
.end;
指示汇编结束
7)编写链接命令文件。
在工程管理器中双击example2.pjt工程中的example2.cmd,将出现example2.cmd文本编辑窗口。
在该文本编辑窗口中输入或复制文件内容。
vectors.obj/*声明要链接的文件---中断向量表文件的目标文件*/
example2.obj/*声明要链接的文件---主程序文件的目标文件*/
-oexample2.out/*声明链接产生的可执行文件名称,默认为a.out*/
-mexample2.map/*声明链接产生的存储器映射文件*/
-estart/*声明主程序入口*/
MEMORY/*关键字加一对{},存储器配置*/
{
PAGE0:
/*程序存储区*/
EPROM:
org=0090Hlen=0F70H/*定义EPROM区,起始地址0090H,长度0F70H*/
VECS:
org=0080Hlen=0010H/*定义VECS区,起始地址0080H,长度0010H*/
PAGE1:
/*数据存储区*/
SPRAM:
org=1000Hlen=1000H/*定义SPRAM区,起始地址1000H,长度1000H*/
DARAM:
org=2000Hlen=2000H/*定义DARAM区,起始地址2000H,长度2000H*/
}
SECTIONS/*关键字加一对{},定位段*/
.text:
>
EPROMPAGE0/*将.text段映射或定位到PAGE0的EPROM区*/
.data:
.bss:
SPRAMPAGE1/*将.text段映射或定位到PAGE1的SPRAM区*/
STACK:
DARAMPAGE1/*将.text段映射或定位到PAGE1的DARAM区*/
.vectors:
VECSPAGE0/*将.vectors段映射或定位到PAGE0的VECS区*/
8.编写中断向量表文件。
在工程管理器中双击example2.pjt工程中的vectors.asm,将出现vectors.asm文本编辑窗口。
.title"
vectors.asm"
.refstart;
声明要引用其他程序中定义的标号start
.sect"
.vectors"
定义初始化的段名.vectors,这一种伪指令声明的段与.data和.text功能一致
Bstart;
无条件转移到标号start所在的地方执行程序
.end
9.对工程中的文件进行编译和链接。
点击菜单Project-RebuildAll,对工程中的所有文件进行编译、链接。
工程中的文件如果编译链接成功,会生成example2.out文件;
如果不成功,会出现出错信息,这时应按照提示的出错信息对文件进行修改,然后再RebuildAll。
10.装载可执行文件。
要让程序代码在DSP内部运行必需将生成的*.out文件装载到DSP内部。
点击菜单File-LoadPrograme,选择并双击刚才生成的example2.out文件将程序装载到DSP的内部存储器中。
11.运行程序,查看并记录相关结果。
点击菜单Debug-Run运行程序。
①查看数据的保存情况。
点击菜单View-Memory,会出现图1-6(a)所示的“MemoryWindowOptions”对话框,按图1-6(a)设置Address=0x1000(为什么?
),Page=Data。
点击OK按钮,观察出现的如图1-6(b)所示的“Memory”对话框,这个对话框显示的是变量在数据存储器中的地址(是如何确定的?
)与值。
图1-6(a)(b)
②查看程序的保存情况。
点击菜单View-Memory,按图1-7(a)设置Address=0x0090(为什么?
),Page=Program。
点击OK按钮,观察出现的如图1-7(b)所示的“Memory”对话框,这个对话框显示的是可执行程序在程序存储器中的地址(是如何确定的?
)与指令代码。
图1-7(a)(b)
③查看寄存器的状况。
第一步:
点击菜单View-Registers-CPURegisters。
基本界面如图1-8。
图1-8
第二步:
点击菜单File-LoadProgram。
第三步:
点击菜单Debug-StepInto或按F8,观察程序在单步运行时,CPURegisters的变化。
④查看指令代码。
装载并运行程序,点击菜单View-Disassembly,查看并记录指令及其对应的指令代码并进行理解。
图1-9
12.改变程序中x1~x5的值(自定),重新执行9~11①。
记录x1~x5、y的值并验算。
13.修改example2.cmd(自定),重新执行9~11②。
记录程序、数据、标号、中断矢量的地址空间。
二、实验习题---见实验步骤11、12、13的要求。
实验二算术运算与数据操作的汇编语言程序设计实验
一、实验内容与步骤(2、3、4、5、7选做,6、8必做)
1、运行CCS。
2、编写程序,计算y=x1+x2+…+x10(xi的值自己定义)。
3、编写程序,计算z=x+y-w、y=mx+bx、y=x1×
a2-x2×
a2(自变量的值自己定义)。
4、编写程序,计算y=a1x1+a2x2+…+a40x40(aixi的值自己定义)。
5、编写程序,用长字运算指令实现Z32=X32+Y32,用并行运算指令实现z=x+y和f=e+d。
6、编制程序,计算y=a1x1+a2x2+…+a10x10,其中数据均为小数(aixi的值自己定义)。
7、分别编写程序,计算(-0.24)÷
0.48和1024÷
128。
8、编写浮点乘法程序,计算x1×
x2×
x3=0.2×
(-0.4)×
0.25。
上述每个实验内容基本操作步骤与要求同实验一的步骤3~11①。
二、实验习题---编写浮点乘法程序,用调用子程序的方法计算x1×
x3×
x4=0.2×
(-0.4)×
0.25×
0.66。
三、参考程序
1)用单操作数指令计算y=(a1*x1+a2*x2+·
·
a19*x19+a20*x20)
.title"
sy21.asm"
.mmregs
STACK.usect"
30H
.bssa,20
.bssx,20
.bssy,2
.data
.word1,2,3,4,5,6,7,8,9,10,11
.word12,13,14,15,16,17,18,19,20
.word21,22,23,24,25,26,27,28
.word29,30,1,2,3,4,5,6,7,8,9,10
.defstart
.text
STM#a,AR1
RPT#39
MVPDtable,*AR1+
LD#0,B
STM#a,AR2
STM#x,AR3
STM#19,BRC
RPTBdone-1
LD*AR2+,T;
单操作数指令
MPY*AR3+,A;
ADDA,B
done:
STHB,*(y)
STLB,*(y+1)
Bend
.end
2)用"
长字运算"
实现32位加法运算Z=X+Y
sy22.asm"
10H
.bssxhi,2,1,1
.bssyhi,2,1,1
.bsszhi,2,1,1
.long16782345H,10200345H
STM#0,SWWSR
STM#STACK+10H,SP
STM#xhi,AR1
RPT#3
DLD*(xhi),A
DADD*(yhi),A
DSTA,*(zhi)
.end
3)用并行指令计算z=x+y,f=e+d
sy23.asm"
.bssx,3
.bssd,3
.word0123H,1027H,0,1020H,0345H,0
STM#x,AR1
RPT#5
STM#x,AR5
STM#d,AR2
LD#0,ASM
LD*AR5+,16,A
ADD*AR5+,16,A
STA,*AR5;
并行指令
||LD*AR2+,B
ADD*AR2+,16,B
STHB,*AR2
4)小数运算。
计算y=a1*x1+a2*x2+a3*x3+a4*x410组
*********a1=0.1,a2=0.2,a3=-0.3,a4=0.4,x1=0.8,x2=0.6,x3=-0.4,x4=-0.2****************
sy24.asm"
.bssa,4
.bssx,4
.bssy,1
.word1*32768/10;
0.1
.word2*32768/10;
0.2
.word-3*32768/10;
-0.3
.word4*32768/10;
0.4
.word8*32768/10;
0.8
.word6*32768/10;
0.6
.word-4*32768/10;
-0.4
.word-2*32768/10;
-0.2
SSBXFRCT
RPT#7
STM#x,AR2
STM#a,AR3
RPTZA,#3
MAC*AR2+,*AR3+,A
STHA,*(y)
5)除法运算。
|被除数|<
|除数|,商为小数。
计算0.4÷
(-0.8)的值。
.title"
sy25.asm"
.bssnum,1;
分子
.bssden,1;
分母
.bssquot,1;
商
.word4*32768/10;
-128
.word-8*32768/10;
1024
LD#0020H,DP;
设置数据页指针,使DP指向第31页(1000H处)
STM#num,AR1
RPT#1
传送2个数据至分子、分母
LD@den,16,A;
将分母移到累加器A(31~16)
MPYA@num;
(num)*(A(31~16))->
B,获取商的符号
;
(在累加器B中)
ABSA;
分母取绝对值
STHA,@den;
分母取绝对值存回原处
LD@num,16,A;
将分子移到累加器A(32~16)
分子取绝对值
RPT#14;
15次减法循环,完成除法
SUBC@den,A
XC1,BLT;
如果B<
0(商为负数),则需要变号
NEGA
STLA,@quot;
保存商
6)除法运算。
|被除数|>
=|除数|,商为整数。
计算16384÷
512的值。
.title"
sy26.asm"
.mmregs
STACK.usect"
.bssnum,1;
.bssden,1;
.bssquot,1;
.data
.word66*32768/100;
16384
.word-33*32768/100;
512
.defstart
.text
LD#0020H,DP;
指定数据页指针
STM#num,AR1
RPT#1
MVPDtable,*AR1+;
LD@den,16,A;
MPYA@num;
;
ABSA;
STHA,@den;
LD@num,A;
ABSA;
RPT#15;
16次减法循环,完成除法
SUBC@den,A
XC1,BLT;
NEGA
STLA,@quot;
.end
7)浮点运算。
计算x1*x2=0.3*(-0.8)
***x1:
被乘数,m2:
乘数的尾数,x2:
乘数,ep:
乘积的指数,e1:
被乘数的指数******************
***mp:
乘积的尾数,m1:
被乘数的尾数,product:
乘积,e2:
乘数的指数,temp:
暂存单元***
sy27.asm"
100
.bssx1,1
.bssx2,1
.bsse1,1
.bssm1,1
.bsse2,1
.bssm2,1
.bssep,1
.bssmp,1
.bssproduct,1
.bsstemp,1
.word3*32768/10;
0.3
.word-8*32768/10;
-0.8
.text
STM#STACK+100,SP;
设置堆栈指针
LD#x1,DP;
设置DP指针
MVPDtable,@x1;
将x1和x2传送到数据存储器
MVPDtable+1,@x2
LD@x1,16,A;
将x1规格化为浮点数
EXPA
STT,@e1;
保存x1的指数
NORMA
STHA,@m1;
保存x1的尾数
LD@x2,16,A;
将x2规格化为浮点数
STT,@e2;
保存x2的指数
NORMA
STHA,@m2;
保存x2的尾数
CALLMULT;
调用浮点乘法子程序
Bend
MULT:
SSBXFRCT
SSBXSXM
LD@e1,A;
指数相加
ADD@e2,A
STLA,@ep;
乘积指数->
ep
LD@m1,T;
尾数相乘
MPY@m2,A;
乘积尾数在累加器A中
EXPA;
对尾数乘积规格化
STT,@temp;
规格化时产生的指数->
temp
STHA,@mp;
保存乘积尾数在mp中
LD@temp,A;
修正乘积指数
ADD@ep,A;
(ep)+(temp)->
保存乘积指数在ep中
NEGA;
将浮点乘积转换成定点数
STLA,@temp;
乘积指数反号,并且加载到T寄存器
LD@temp,T;
再将尾数按T移位
LD@mp,16,A
STHA,@product;
保存定点乘积
RET
.end
8)链接配置文件参照实验一中的example2.cmd,但要作简单修改。
中断向量表文件参照实验一中的vectors.asm,可不作修改。
实验三信号发生器设计
一、实验原理
采用查找表的方法产生周期信号。
在DSP的内部RAM中放上一个周期的正弦波数据表,通过程序按一定时间间隔将表中的数据写到D/A端口,在D/A输出端就可以得到周期性的正弦波信号。
更改查找表的数据,就可以在D/A输出端得到不同的周期信号。
二、实验内容与步骤
2、采用查找表的方式产生正弦波、方波、三角波等常见波形。
1)在CCS环境下新建DA工程和五个文件main.asm、c54init.asm、C54.inc、memory.cmd、vectors.asm。
2)分别编辑五个文件并将他们添加到DA工程中。
参考程序如下。
①主程序main.asm
.mmregs
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- DSP 原理 应用 实验 指导书