当前位置:
文档之家› 实验三 DSP汇编语言基本程序设计1
实验三 DSP汇编语言基本程序设计1
}
实验要求:
[1]在空格中填入注释
[2]运行该程序,观察数值结果:
a=0x0CCC 0x1999 0xD99A0x3333;x=0x6666 0x4CCC 0xCCCD 0xE667;y=0x1EB7。(16进制表示)
a=3276 6553 -9830 13107;x=26214 19660 -13107 -6553;y=7863。(10进制表示)
zhi=0x0657 0x4FFB。(十六进制表示)
4.并行运算
并行运算是同时利用D总线和E总线进行运算。其中D总线用来执行加载或算术运算,E总线用来存放先前的结果。包括:并行加载和乘法指令,并行加载和乘法指令,并行存储和乘法指令,并行存储和加/减法指令四种。其中:并行存储和加载指令如下:
ST src,Ymem
.mmregs
STACK .usect "STACK",30H
.bss x,20
.bss y,20
.data
table:.word 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20
.def aa
.text
aa: STM #x,AR1
RPT #19
MVPD table,*AR1+;将程序存储空间中标号为”table”的地址里的数据存入AR1所指向的数据存储空间,且地址AR1加1--------属于绝对寻址
;源程序ch3p1.asm
.mmregs
STACK .usect "STACK",10H
.bss a,4
.bss x,4
.bss y,1
.def aa
.data
table:.word 1*32768/10
.word 2*32768/10
.word -3*32768/10
.word 4*32768/10
{
PAGE 0:
EPROM :org=04000H len=0100H
PAGE 1:
SPRAM :org=0060H len=0020H
DARAM :org=0080H len=0100H
}
SECTIONS
{
.data :>EPROM PAGE 0
.bss :>SPRAM PAGE 1
STACK :>DARAM PAGE 1
(2)示例
采用线性缓冲区实现低通滤波器,阶数n=40,通带截止频率ωp=0.35π,阻带截止频率
ωs=0.4π。设:输入X=[07FFFH, 0,…,0] (有39个0),实际上,X=07FFFHδ(n)。
滤波系数见(p184)的”b”。
存储单元分配:
1)X ---40个单元,存放输入数据。
2)XN---40个单元,为x(n),x(n-1),…,x(n-39)[会更新的]。
STM #d,AR2
LD #0,ASM;(ASM)=0
LD *AR5+,16,A;(A)=(AR5)<<16,操作数左移16位,装入A,AR5地址+1
ADD *AR5+,16,A;(A)=(AR5)+(A)<<16,把左移16位的操作数加到A,AR5地址+1
ST A,*AR5;(AR5)=(A)>>(16-ASM)
[1]在空格中填入注释。
[2]运行该程序,观察数值结果:
x=0x0123 0x1027 0x114A;d=0x1020 0x0345 0x1365。(十六进制表示)
实验四FIR滤波器设计的DSP实现
一、实验目的
1.掌握用线性缓冲区实现FIR滤波器的DSP程序设计。
2.掌握用p3.asm
.mmregs
STACK .usect "STACK",10H
.bss xhi,2,1,1;为xhi分配两个连续的存储单元
.bss yhi,2,1,1
.bss zhi,2,1,1
.def aa
.data
table:.long16782345H,1020D34AH;分配长字节16782345H、1020D34AH
四、实验内容
1.线性缓冲区实现FIR滤波器
(1)实现步骤(设N=8)
新指令:
1)MACD---乘法—累加--延时。
语句: MACD Smem,pmad,src
功能:src=src+Smem*pmad,T=Smem,
(Smem+1)=Smem
2)MAR---修改辅助寄存器ARx
例:MAR *AR5+0; AR5=AR5+AR0
.data
table:;输入数据
.word 07FFFH
.word 0,0,0,0,0,0,0,0,0,0
.word 0,0,0,0,0,0,0,0,0,0
.word 0,0,0,0,0,0,0,0,0,0
.word 0,0,0,0,0,0,0,0,0
COEF: .word -7*32768/10000,3*32768/10000;滤波系数
.word 14*32768/10000,10*32768/10000
.word -16*32768/10000,-38*32768/10000
.word -8*32768/10000,64*32768/10000
.word 81*32768/10000,-30*32768/10000
.text
aa: STM #STACK+10H,SP
STM #xhi,AR1
RPT #3
MVPD table,*AR1+
DLD @xhi,A;(A)=(xhi)
DADD @yhi,A;(A)=(yhi)+(A)
DST A,@zhi;(zhi)=(A)
end: B end
.end
链接命令文件ch3p3.cmd与ch3p1.cmd相同。
2) ADD Smem,16,src ;src=src+Smem<<16,把左移16位的操作数加到src。
已知: x=[0123H,1027H,0],d=[1020H,0345H,0],
用并行运算指令编程计算:x[3]=x[1]+x[2],d[3]=d[1]+d[2]。
;源程序ch3p4.asm
.mmregs
STM #x,AR2
STM #y,AR3
RPT #19
MVDD *AR2+,*AR3+;(AR3)=(AR2),AR2、AR3地址+1
end B end
.end
;链接命令文件:ch3p2.cmd
-e aa
-m map.map
MEMORY
{
PAGE 0:
EPROM :org=04000H len=01F800H
||LD Xmem,dst
功能:Ymem=src>>(16-ASM) ;ASM---累加器移位方式,“>>”为右移
dst=Xmem<<16;“<<”为左移
注:并行运算时,存储的是前面的运算结果,存储之后再进行加载或算术运算,这些指令都工作在累加器的高位。
另外:
1) LD Smem,16,dst ;dst=Smem<<16,操作数左移16位,装入dst。
将y除以32768,则最终结果:y=0.24
[3]选View----Registers---CPU Registers,
观察寄存器结果:A=001EB72E16;AR1=0068。
2.数据块传送
在数字信号处理算法(如FFT)中,经常需要将数据存储器中的一批数据传送到数据存储器的另一个地址空间中,为此可用以下指令:
.word 8*32768/10
.word 6*32768/10
.word -4*32768/10
.word -2*32768/10
.text
aa:SSBX FRCT
STM #a,AR1
RPT #7
MVPD table,*AR1+;将程序存储空间中标号为”table”的地址里的数据存入AR1所指向的数据存储空间,且地址AR1加1--------属于绝对寻址
实验三DSP汇编语言基本程序设计(二)
一、实验目的
1.掌握小数运算和数据块传送指令及程序设计方法。
2.熟悉长字运算和并行运算指令及程序设计方法。
二、实验环境
1.奔腾IV计算机
2.Code Composer Studio (CCS)软件
三、实验内容
1.小数运算
C54x’采用2的补码表示小数,一个十进制小数乘以32768,再将其十进制整数部分转换成十六进制数,即可得到该十进制小数的2的补码表示。
3.能设计用FIR滤波器对音频信号进行滤波的DSP程序。
二、实验环境
1.奔腾IV计算机
2.Code Composer Studio (CCS)软件
三、实验原理
FIR滤波器的差分方程为:y(n)=
其中,bi----滤波器系数;x(n)---滤波器在n时刻的输入;y(n)--- n时刻的输出。
FIR滤波器的基本算法是一种乘法—累加运算,即不断地输入样本x(n),经z-1延时后,再进行乘法-累加,最后输出滤波结果y(n)。
STM #x,AR2;(AR2)=x
STM #a,AR3
RPTZ A,#3
MAC *AR2+,*AR3+,A;(A)=(A)+(AR2)*(AR3),AR2、AR3地址+1
STH A,@y;(y)=(A)
end: B end
.end
;链接命令文件:ch3p1.cmd