实验三 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
合集下载

DSP基本算法源程序(汇编语言)

DSP基本算法源程序(汇编语言)

DSP基本算法源程序(汇编语言)DSP基本算法源程序Example1实验程序:****************************************** 计算y=mx+b ******************************************.title "example1.asm".mmregsSTACK .usect "STACK",10H ;堆栈的设置.bss m,1 ;为变量分配4个字的存储空间.bss x,1.bss b,1.bss y,1.def start.datatable: .word 3,15,20 ;m,x,b.textstart:STM #0,SWWSR ;插入0个等待状态STM #STACK+10H,SP ;设置堆栈指针STM #m,AR1 ;AR1指向mRPT #2 ;把下一条指令重复执行3遍MVPD table,*AR1+ ;把程序存储器中的数据转移到数据存储器CALL SUend: B endSU: LD *(m),TMPY *(x),AADD *(b),ASTL A,*(y)RET.end/*vectors.asm*/.title "vectors.asm".ref start.sect ".vectors"B start.end/*example1.cmd*/vectors.objexample1.obj-o example1.out-m example1.map-estartMEMORY{PAGE 0:EPROM:org=00090H len=0F70H VECS: org=00080H len=0010H PAGE 1:SPRAM:org=1000H len=1000H DARAM:org=2000H len=2000H }SECTIONS{.text :>EPROM PAGE 0.data :>EPROM PAGE 0.bss :>SPRAM PAGE 1STK :>DARAM PAGE 1.vectors:>VECS PAGE 0}Example2实验程序:****************************************** 计算y=x1*a1+x2*a2 ******************************************.title "example2.asm".mmregsSTACK .usect "STACK",10H ;堆栈的设置.bss x1,1 ;为变量分配5个字的存储空间.bss x2,1.bss a1,1.bss a2,1.bss y,1.def start.datatable: .word 3,5,15,20 ;x1,x2,a1,a2.textstart:STM #0,SWWSR ;插入0个等待状态STM #STACK+10H,SP ;设置堆栈指针STM #x1,AR1 ;AR1指向x1RPT #3 ;移动4个数据MVPD table,*AR1+ ;把数据从数据存储器存入程序存储器CALL SUMend: B endSUM: LD *(x1),TMPY *(a1),BLD *(x2),TMAC *(a2),BSTL B,*(y)STH B,*(y+1)RET .end/*vectors.asm*/.title "vectors.asm" .ref start.sect ".vectors"B start.end/*example2.cmd*/vectors.objexample2.obj -o example2.out-m example2.map-estart MEMORY {PAGE 0:EPROM:org=0090H len=0F70HVECS: org=0080H len=0010HPAGE 1:SPRAM:org=1000H len=1000HDARAM:org=2000H len=2000H}SECTIONS{.text :>EPROM PAGE 0.data :>EPROM PAGE 0.bss :>SPRAM PAGE 1STACK :>DARAM PAGE 1.vectors:>VECS PAGE 0 }example3实验程序:******************************************** ** 计算 * ********************************************.title "example3.asm".mmregs STACK .usect "STACK",10H ;堆栈的设置.bss a,4;为变量分配9个字的存储空间41i i i y a x ==∑.bss x,4.bss y,1.def start.datatable: .word 1,5,3,4 ;a1,a2,a3,a4.word 8,6,7,2 ;x1,x2,x3,x4.textstart:STM #0,SWWSR ;插入0个等待状态STM #STACK+10H,SP ;设置堆栈指针STM #a,AR1RPT #7MVPD table,*AR1+CALL SUMend: B endSUM: STM #a,AR3STM #x,AR4RPTZ A,#3MAC *AR3+,*AR4+,ASTL A,*(y)RET。

DSP汇编语言程序设计

DSP汇编语言程序设计

若B为… 绝对 外部 可重新定位 绝对 可重新定位 外部 绝对 可重新定位 外部
则A+B为… 绝对 外部 可重新定位 可重新定位 非法 非法 外部 非法 非法
则A−B为… 绝对 非法 非法 可重新定位 绝对 非法 外部 非法 非法
4.1.3 TMS320C54x伪指令 TMS320C54x伪指令给程序提供数据、控制汇编过程。具体
或星号(*)。
[标号][:] 空格 [助记符] 空格 [操作数] 空格 [;注释]
要点 建议
可以是助记符指令、汇编指令、宏 指令和宏调用命令。
1.助记符指令,一般用大写; 2.汇编命令和宏命令,以句号“.” 开始,且为通常用小写。
[标号][:] 空格 [助记符] 空格 [操作数] 空格 [;注释]
要点
以.asm为扩展名 每一行由4个部分组成
格式
[标号][:] 空格 [助记符] 空格 [操作数] 空格 [;注释]
[ ]中的 内容为可 选择部分
供本程序的其它部分或其它程序调 用。标号是任选项,标号后面可以
加也可以不加冒号“:”。
要点
1.标号必须从第1列写起, 2.标号最多可达32个字符,可以是A~Z,a~z,0~ 9,_,以及$,但标号的第1个字符不能是数字。 3.引用标号时,标号的大小写必须一致。 4.标号的值就是段程序计数器SPC的值。 5.如果不用标号,则第一个字母必须为空格、分号
.align [size in bits] 该指令使段程序计数器SPC对准1~128字的边界, 保证该指令后面的代码从一个字或页的边界开始。不 同的操作数代表了不同的含义: “1”表示让SPC对准字边界; “2”表示让SPC对准长字/偶地址边界; “128”表示让SPC对准页边界。 当 .align不带操作数时,其缺省值为128,即对准页边界。

DSP实验基本汇编程序设计

DSP实验基本汇编程序设计

实验二基本算术运算实验一、实验目的:1:通过本实验,熟悉指令系统,初步掌握汇编语言程序设计的基本方法;2.熟悉CCS5000开发环境;3了解DSP54XX的数据格式,4:了解DSP的汇编语言实现算术乘除运算5掌握TMS320C54xxDSP程序空间及数据空间的分配;6.掌握COFF格式文件及配置文件。

二、实验原理DSP 中数据的格式有多种,包括16 位有符号数、16 位无符号数、32 位无符号数、32 位有符号数、32 位浮点数、32 位IEEE 浮点数等各种形式。

由于数据所设置的小数点位置的不同,即使同一类型的数据也会出现不同的数值。

这一点是程序设计中尤其需要注意的地方。

如果采用C 语言编写程序,CCS 会自动去管理各种数据;但如果采用汇编语言编写程序,对于各种数据的管理将显得尤其麻烦,然而在许多DSP 的应用场合,采用纯汇编编写程序是必须的,所以对于DSP 中数据各种格式的情况最好还是需要了解。

DSP中定点数据表示方法:DSP 表示整数时,有两种格式,有符号数和无符号数,如果作为有符号数表示时,其最高位表示符号,最高位为0 表示其为正数,为1 表示其为负数,最低位表示1,次低位表示2 的1 次方,次高位表示2 的14 次方。

无符号数表示时,最高位仍然作为数值位计算。

例如,有符号数所能够表示的最大的正数为07FFFH,等于32767(10 进制),而0FFFFH表示最大的负数-1;无符号数不能表示负数,其所能够表示的最大的数为0FFFFH,等于十进制数的65535。

DSP表示小数时,其符号和上面整数的表示一样,但是必须注意如何安排小数点的位置,原则上小数点的位置根据程序员的爱好可以安排在任何位置,为了便于数据处理一般安排在最高位后(以下我们仅以小数点在最高位的形式进行讨论),则最高位表示符号位,这样次高位表示0.5,然后是0.25,依次减少一半。

例如:4000H表示小数0.5,1000H表示小数0.25,而0001H表示16位定点DSP表示的最小的小数(有符号)0.000030517578125。

DSP实验报告五:汇编语言程序设计(1)——定点数除法实验

DSP实验报告五:汇编语言程序设计(1)——定点数除法实验

实验五:汇编语言程序设计(1)——定点数除法实验一、实验目的:1.熟悉 C54x 指令系统,掌握常用汇编指令,学习设计程序和算法的技巧。

2.学习用减法和移位指令实现除法运算。

二、实验仪器:安装 CCS3.1(CodeComposerStudioV3.1)的 PC 机。

三、实验内容:编写一个 16 位的定点除法子程序。

四、实验步骤:1.以Simulator的方式启动CCSv3.1。

2.在D:\Lab05_Divisio建立工程,工程名为“div”。

3.新建div.asm,编辑内容如下:4.新建div.cmd,编辑内容如下:5.汇编/编译与连接执行Project→Rebuild All 编译链接.如果未对汇编语言修改编译连接环境(参见实验 2),编译时将出现如下错误:warning:entry point symbol _c_int0 undefined出错原因:缺省时CCS设置项目程序为 C 语言编译,因此当我们编译汇编程序时,要对项目作适当配置。

发现错误要及时修改,修改方法与实验 2 相似:执行Project→Build Options…打开编译选项;在linker 属性页上单击,把Autoinit Model栏选择为 No Autoinitialization;按“确定”保存对配置的修改。

6. 装载程序准备运行调试(1)执行 File→Load Program 装载程序,装载完程序后,CCS把指针指向程序区 0000 处。

为了执行我们的程序代码,需要修改 DSP 的 PC 值;执行ViewÆCPU RegistersÆCPU Registers 打开寄存器窗口;双击窗口中的 PC 标号,CC 弹出修改对话框供修改寄存器;在对话框中输入”start“,程序将处于我们的程序入口点上。

(2)在div.asm窗口中NUMERA变量名上双击鼠标左键,再单击鼠标右键,选择“Add to Watch Window”,在观察窗口中出现 NUMERA 变量,请将窗口中变量名(Name)由“NUMERA”改成“(int*)NUMERA”;“Radix”由“hex”改成“dec”,结果如下:(3)重复(1)的操作,加入 DENOM、QUOT 和 ARIT 四个变量。

DSP汇编

DSP汇编

DSP汇编实验一新手上路]初学者编写的第一个程序通常是控制XF引脚的变化,然后用示波器测量XF脚波形或观察与相接的LED。

这个程序也常常用来测度一下DSP能否正常工作。

实验1.1最简单的程序:控制XF引脚周期性变化实验目的:通过简单的程序了解DSP程序的结构,熟悉CCS开发环境。

**最简单的程序:TestXF1.asm*循环对XF位置1和清0,用示波器可以在XF脚检测到电平高低周期性变化*常用于检测DSP是否工作。

*.mmregs;预定义的寄存器.def CodeStart;定义程序入口标记.text;程序区CodeStart:;程序入口SSBX XF;XF置1 RPT#999;重复执行1000次空指令产生延时NOP RSBX XF;XF清0 RPT#999;重复执行1000次空指令产生延时NOP BCodeStart;跳转到程序开头循环执行.end NOP指令执行时间为一个时钟周期,设DSP工作频率是50MHz,可以估算出XF引脚电平的变化频率约为:50M/2000=25kHz在没有示波器的情况下,就要将程序1.1稍作改进,增加延时,用一个延时子程序将XF脚电平变化频率降到肉眼可分辨的程度,就可以用LED来显示电平的变化,程序如下:实验1.2子程序调用实验目的:学习子程序的调用**TestXF2.asm*对TestXF1.asm稍作改进,用延时子程序设置较长的延时,*可以用试验板上的LED看到XF引脚电平的变化*.mmregs;预定义的寄存器.def CodeStart;定义程序入口标记.text;程序区CodeStart:;程序入口SSBX XF;XF置1 CALL Delay;调用延时程序RSBX XF;XF清0 CALL Delay;调用延时程序B CodeStart;跳转到程序开头循环执行**延时子程序:Delay*用两级减一计数器来延时。

调整AR1和AR2的大小LED闪烁的频率不同*Delay:STM#999,AR1;循环次数1000 LOOP1:STM#4999,AR2;循环次数5000 LOOP2:BANZ LOOP2,*AR2-;如果AR2不等于0,AR2减1,再判断BANZ LOOP1,*AR1-;如果AR1不等于0,AR1减1,跳转到LOOP1 RET.end**注意这种延时方法并不精确,需要精确定时必须用定时器。

实验三汇编语言程序设计1数字信号处理器DSP原理及应用教学课件

实验三汇编语言程序设计1数字信号处理器DSP原理及应用教学课件

实验三汇编语言程序设计(1)一.实验目的:1.熟悉TMS320C54x软件开发过程(小数乘法、加法、乘加结果是否溢出的处理):2.熟悉CCS的调试手段(运行时间、单步运行确定程序的流程和指令作用)和参考资料来理解程序指令功能。

3.由已有资料修改程序二.实验内容1.熟悉书上第5章例17所示的“64位加法和减法运算”,具体工程建立和调试过程如本实验附录所示:步骤(3)、步骤(7)和步骤(8)提到的问题;2.完成书节例19程序的验证,并说明结果;3.完成书节例13、14程序的验证,验证书上所述结论。

三.实验步骤(1)打开“Setup CCS 2 ('C5000)”,配置为“C54xx Simulator”,并保存配置;(2)进入CCS,建立工程,并建立""和""文件(源代码如下),将两文件添加到工程中:1)源代码:.title "".mmregsSTACK .usect "STACK", 10h.bss w3,2,1,2.bss w1,2,1,2.bss x3,2,1,2.bss x1,2,1,2.bss y3,2,1,2.bss y1,2,1,2.bss z3,2,1,2.bss z1,2,1,2.def main.datatable: .long 54210AB2h.long 0A10B1984h.long 0A20C8747h.long 0B50C8743h.long 98410AB8h.long 475624F1h.textmain: STM #w3,AR1RPT #11MVPD table,*AR1+ ;初始化w、x、yLD #0,A ;累加器A清零LD #0,B ;累加器B清零DLD @w1,A ;累加器A装载w低32位,即w1、w0DADD @x1,A ;加上x1、x0,即A=w1w0+x1x0DLD @w3,B ;累加器B装载w高32位,即w3、w2STM #x3,AR3 ;令AR3指向x3ADDC *AR3(1),B ;累加器B加上x2及低32位的进位,即B=w3w2+x2+CADD @x3,16,B ;累加器B加上(x3左移16位),即B=w3w2+x3x2+C,至此求出了w+xDSUB @y1,A ;累加器A减去y1y0,产生借位C',即A=w1w0+x1x0-y1y0DST A,@z1 ;将低32位结果存储,即z1z0=w1w0+x1x0-y1y0STM #y3,AR3 ;令AR3指向y3SUBB *AR3(1),B ;累加器B减去y2及低32位的借位,即B=w3w2+x3x2+C-y2-C'SUB @y3,16,B ;累加器B减去(y3左移16位),即B=w3w2+x3x2+C-y3y2-C',至此求出了w+x-yDST B,@z3 ;将高32位结果存储,即z3z2=w3w2+x3x2+C-y3y2-C'done: B done ;进行死循环2)源代码:-e mainMEMORY{PAGE 0 :EPROM: org=0E000h, len=100hVECS: org=0FF80h, len=04hPAGE 1 :SPRAM: org=0060h, len=20hDARAM: org=0080h, len=100h}SECTIONS{.text :>EPROM PAGE 0.data :>EPROM PAGE 0.bss :>SPRAM PAGE 1STACK :>DARAM PAGE 1.vectors :>VECS PAGE 0}(3)按图1中的“Rebuild All”编译工程,如图2所示的编译结果可以看出存在一警告,消除这一警告可以通过选择工程的“Build Options”调出如图3所示的对话框,按照图3所示将Autoinit Model改为“No Autoinitialization”,重新编译链接,从编译结果可以看出警告不存在了,尝试解释这一问题:图1图2图3(4)执行Debug->Reset CPU,然后执行File->Load Program,在随后打开的对话框中选择刚刚建立的文件;(5)执行View->Memory,在打开的对话框中将Address改为“w3”;执行View->Registers ->CPU Registers,在随后打开的对话框中将Address改为“w3”;设置完成后应有如图4所示的结果:在Memory窗口中所有变量为0,因此时还没有赋值;在CPU Registers窗口中红色字体表示CPU重启后对这些寄存器做了改变;图4(6)按F10将程序运行到LD #0, A处,结果如图5所示,注意运行过程中查看Memory窗口的变化,可以发现运行完MVPD table, *AR1+指令后w、x、y得到了初始化,同时Memory 窗口对应处变红;可以用表格表示为表1图5表13 2 1 1w 54210AB2A10B1984x A20C8747B50C8743y 98410AB8475624F1(7)按照步骤(6)的方法继续运行,结合程序注释、Memory窗口和CPU Registers窗口内容变化来理解程序,尝试用表格画出累加器A、B在整个程序运行过程中的变化情况;(8)修改table数值,尝试其他数据来理解程序。

dsp实验报告

dsp实验报告Dsp实验报告班级:电信08-1学号:80811121姓名:黄伟实验⼀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机。

三、实验步骤1、安装ccs软件打开CCS软件安装⽬录(CCS 开发软件),所有的开发软件都放在这个⽬录下。

请选择 CCS 5000.EXE ⽂件,双击CCS5000进⾏安装,如图2-1,2-2,2-3,2-5,2-6所⽰。

图2-1 CCS安装⽂件夹图2-3图2-4图 2-5 CS5000 软件安装⽰意图3图 2-4 CS5000 软件安装⽰意图3图 2-3 CCS5000 软件安装⽰意图2图 2-2 5000 软件安装⽰意图 1安装完毕CCS5000,再安装升级补丁C5000-2.20.00-FULL-to-C5000-2.21.00-FULL.exe ,2、配置ccs 软件我们做的实验是使⽤c5416模拟仿真,所以配置时选择C5416 Device Simuliator 驱动程序,其图如下(启动setup ccs )图2-9确认选择c5416 Device Simulator图2-6 开发软件图标3、创建新的⼯程(截图略)4、编辑源⽂件源⽂件需要两种:⼀种是实现功能的源程序,⼀种是连接的命令⽂件(1)C 语⾔源程序volume.c#include "volume.h"int inp_buffer[BUF_SIZE]; /* BUF_SIZE 的定义见volume.h */ int out_buffer[BUF_SIZE];int *input; int *output;int volume = 1;struct PARMS str = { 2934,9432,213,9432,&str };/***************************************************************************//* */ /* NAME: read_signals() *//* *//* FUNCTION: read input signal. */ /* *//* PARAMETERS: none. */ /* */图2-10 关闭配置窗⼝/* RETURN VALUE: TRUE. */ /**//************************************************************************** */int read_signals(int *input){/* read reference signal *//* read input signal */r eturn(TRUE);}/************************************************************************** *//**//* NAME: write_buffer() */ /**//* FUNCTION: write to the output buffer. Use the volume variable */ /* to control the volume. */ /**//* PARAMETERS: input , output, num. *//**//* RETURN VALUE: TRUE. *//**//************************************************************************** */ int write_buffer(int *input,int *output,int count){w hile( count--){*output++ = (*input++) * volume;}r eturn(TRUE);}/************************************************************************** */ /**//* NAME: main() *//**//* FUNCTION: Volume Control: Read input buffer *//* multiply by volume coeficient and write to *//* output buffer.*//*/* PARAMETERS: none. *//**//* RETURN VALUE: none. */ /**//************************************************************************** */ main(){i nt num = BUF_SIZE;while(TRUE) /* loop forever */{input = &inp_buffer[0];output = &out_buffer[0];/* read input signals from PC file */read_signals(input);/* write to output buffer */write_buffer(input, output, num);}}(2)命令⽂件和命令⽂件volume.cmdMEMORY{PAGE 0:VECT : o=80h,l=80hPRAM : o=100h,l=1f00hPAGE 1:DRAM : o=2000h,l=1000h}SECTIONS{.text : {}> PRAM PAGE 0.data : {}> PRAM PAGE 0.cinit : {}> PRAM PAGE 0.switch : {}> PRAM PAGE 0.const : {}> DRAM PAGE 1.bss : {}> DRAM PAGE 1.stack : {}> DRAM PAGE 1.vectors: {}> VECT PAGE 0}5、编译源⽂件,产⽣公共⽬标⽂件源程序需要编译/汇编/链接,产⽣⽬标代码。

DSP控制器汇编语言程序设计(精)

DSP 控制器汇编语言程序设计摘要:在当今的数字化时代背景下,DSP 控制器在数字信号处理中起着重要的作用。

本论文概括介绍了TMS320C6XDSP 的硬件结构,并对TMS320C6XDSP 的汇编语言指令系统做了重点说明。

在具备以上知识的基础上,详细介绍了基于DSP 的高速数据采集和IIR 数字滤波器在DSP 上的实现,通过这两个应用实例了解DSP 汇编语言程序开发的方法。

关键字: TMS320C6X DSP 汇编语言 IIR数字滤波器高速数据采集Abstract :In digitized time ,DSP plays an important role in the digital signal processing. This paper summarily describes the hardware structure of theTMS320C6XDSP,and It introduced in detail the assembly language introductions.On the basis of having all above knowledge, a high speed data acquisition system based on DSP and using DSP to IIR Digital filter design was introduced,in order to understand the DSP assembly language program development method.Keyword: TMS320C6X DSP the assembly language IIR Digital filter designa high speed data acquisition system前言数字信号处理是一种将现实世界中的连续信号转换为计算机能够处理的信息的过程。

汇编语言实验三简单程序的编写与调试

实验三简单程序的编写与调试一&实验目的1.进一步熟悉DEBUG命令;2.熟悉汇编指令的功能及应用;3.掌握简单的汇编语言程序编写与调试。

二&实验环境微型计算机一台DOS或WINDOWS操作系统,MASM开发套件。

三&实验要求1.熟练掌握常用DEBUG命令;2.熟练掌握数据传送指令、比较指令、转移指令和循环指令并能够进行简单程序设计;3.用DEBUG的有关命令调试简单程序。

四&实验内容1、比较AX、BX、CX中带符号数的大小,将最大的数放在AX中。

试编写此程序段。

2、已知存储器中有一个首地址为ARRAY的8个字的数组,现要求数组中的每个数加1(不考虑溢出),试编写完成此功能的程序段。

3、将存储器中从DS:1000H单元开始的10个字节的数据累加求和。

4、使用DEBUG对上述编写的程序进行调试。

五&实验步骤1、比较AX、BX、CX中带符号数的大小,将最大的数放在AX中。

试编写此程序段。

1)程序:cmp ax,bxjge next0xchg ax,bxnext0: cmp ax,cxjge next1xchg ax,cxnext1: …2)使用DEBUG调试:使用r reg命令在ax、bx、cx中预置三个大小不同的数。

使用a命令输入汇编源程序,注意在符号地址输入时,应输入其对应的数值地址。

使用t命令单步执行,再使用r命令可观察到程序全部执行后,ax中内容为最大数。

2、已知存储器中有一个首地址为ARRAY的8个字的数组,现要求数组中的每个数加1(不考虑溢出),试编写完成此功能的程序段。

1)程序:mov cx,8lea bx,arrayrotate: inc word ptr [bx]add bx,2loop rotate2)使用DEBUG调试:使用e命令从某一内存单元开始预置一个8个字的数组。

使用a命令输入汇编源程序,注意在符号地址输入时,应输入其对应的数值地址。

DSP实验汇编语言程序_2016

DSP实验汇编语言程序参考答案EDA实验室编写西安文理学院实验一数据存储实验源程序(exp01_memory.asm文件):.title "exp01_memory.asm".mmregssize .set 16stack: .usect "STK", sizeSTM #stack+size, SP.bss DATA_1, 8.bss DATA_2, 8.def _c_int00.text_c_int00: STM #DATA_1,AR1RPT #7ST #0xAAAA, *AR1+**************以上指令将0xAAAAh写入01000h开始的单元。

*STM #DATA_1, AR1STM #DATA_2, AR2STM #7,BRCRPTB NEXT-1LD *AR1+, ASTL A, *AR2+NOPNOPNEXT B NEXT ———————————————————————————————————————命令文件(exp01_memory.cmd文件)debug\exp01_memory.obj-o exp01_memory.out-m exp01_memory.mapMEMORY{PAGE 0 :ROM: org=0200h, len=100h PAGE 1 :RAM: org=1000h, len=100h }SECTIONS{.text : > ROM.bss : > RAMSTK : > RAM}源程序(exp02_io.asm文件):.title "exp02_io.asm".mmregs.def _c_int00PA .set 0x0200.bss input_data,1.text_c_int00: STM #0FFA0h,PMSTSTM #input_data,AR1 loop: PORTR PA, *AR1PORTW *AR1, PAB loop.end命令文件(exp02_io.cmd文件)debug\exp02_io.obj-o exp02_io.out-m exp02_io.mapMEMORY{PAGE 0 : PARAM: org=0180h, len=0100hPAGE 1 : DARAM: org=80h, len=0100h }SECTIONS{.text :> PARAM.bss :> DARAM}源程序1(exp03_timer.asm)************************************************************ * 利用定时器延迟发光二极管循环显示 * ************************************************************ .title "exp03_timer.asm".mmregs.def _c_int00.def t1_counter,counter,send_datasize .set 50stack .usect "STK", size.bss send_data,8t1_counter .usect "vars",1counter: .usect "vars",1.datatable .word 007Fh.word 00BFh.word 00DFh.word 00EFh.word 00F7h.word 00FBh.word 00FDh.word 00FEh.text_c_int00: STM #stack+size,SPSTM #07FA0h,PMST***************************************************STM #send_data,AR2RPT #7MVPD table,*AR2+****************************************************ST #80,*(t1_counter)ST #0, *(counter)****************************************************STM #0000H, SWWSRSTM #0010H, TCRSTM #30D3H, PRDSTM #0C2FH, TCRSTM #0008H, IFRSTM #0008H, IMRRSBX INTM*****************************************************end: B end.end源程序2 (int_19.asm).title "int_19".mmregs.def int_revPA .set 0x0200.ref send_data,t1_counter,counter**************************************************************** .textint_rev: RSBX CPLADDM #-1, *(t1_counter)CMPM *(t1_counter), #0BC still_wait, NTCST #80, *(t1_counter)**************************************************************** LD #send_data,AADD *(counter),ASTLM A,AR1PORTW *AR1, PAADDM #1, *(counter)CMPM *(counter), #8BC still_wait, NTCST #0, *(counter)still_wait: RETE.end源程序3 (exp03_v.asm).title "exp03_v.asm".ref int_rev.sect ".vectors"B int_rev.end命令文件(exp03_timer.cmd)debug\exp03_timer.objdebug\exp03_v.objdebug\int_19.obj-o exp03_timer.out-m exp03_timer.mapMEMORY{PAGE 0 : PAROM: org=0180h, len=0100hVECS: org=7FCCh, len=04PAGE 1 : DARAM: org=80h, len=0200h }SECTIONS{.text :> PAROM.data :> PAROM.bss :> DARAMvars :> DARAMSTK :> DARAM.vectors :> VECS}教材例3-1 y=a1*x1+a2*x2+a3*x3+a4*x4 源程序:example.asm.title "example.asm".mmregsSTACK .usect ".STACK",10h.bss a,4.bss x,4.bss y,1.def _c_int00.datatable: .word 1,2,3,4.word 8,6,4,2.text_c_int00: STM #0,SWWSRSTM #00A0h,PMSTLD #a,DPSTM #STACK+10h,SPSTM #a,AR1RPT #7MVPD table,*AR1+CALL SUMend: B end.sect ".text:_sum" SUM: STM #a,AR3STM #x,AR4RPTZ A,#3MAC *AR3+,*AR4+,ASTL A,@yRET.end命令文件:example.cmddebug\example.objdebug\examp_v.obj-o example.out-m example.mapMEMORY{PAGE 0 : EPROM : org=0E000h,len=100hVECS : org=0FF80h,len=04h PAGE 1 : SPRAM : org=0060h, len=20hDARAM : org=0080h, len=100h }SECTIONS{.text : > EPROM.data : > EPROM.bss : > SPRAM.STACK : > DARAM.vectors : > VECS}。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
相关文档
最新文档