DSP汇编编程及应用举例._第1页
DSP汇编编程及应用举例._第2页
已阅读5页,还剩4页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、1.DSP 汇编语言程序的编写(1)汇编语言源程序以.asm 为其扩展名。(2)汇编语言源程序的每一行都可以由4 个部分组成,句法如下:标号:助记符操作数;注释其中可用空格或 TAB 键隔开标号一一供本程序的其他部分或其他程序调用。标号是任选项,标号后面可以加也可以不加冒号“:”。标号必须从第一列写起, 标号最多可达到 32 个字符(AZ , az , 09 , _ , 以及$),但第 1个字符不能以数字开头。引用标号时,标号的大小写必须一致。标号的值就是 SPC (段程序计数器)的值。如果不用标号,则第一个字符必须为空格、分号或星号(*)。助记符一一助记符指令、汇编指令、宏指令和宏调用。作为

2、助记符指令,一般用大写;汇编命令和宏指令,以英文句号“.”开始,且为小写。 汇编命令可以形成常数和变量,当用它 控制汇编和连接过程时,可以不占用存储空间。指令和汇编命令都不能写在第1 列。操作数一一指令中的操作数或汇编命令中定义的内容。操作数之间必须用逗号“,”分开。有的指令操作无操作数,如 NOP、RESET。注释一一注释从分号“;”开始,可以放在指令或汇编命令的后面,也可以放在单独的一行 或数行。注释是任选项。如果注释从第1 列开始,也可以用“ *”表示注释。(3)常用的汇编命令如表所示。汇编命令作用举例.title紧随其后的是汇编语言程序正文.title“ example.asm”.en

3、d结束汇编命令放在汇编语言程序的最后.text紧随其后的是汇编语言程序正文经汇编后,紧随.text后的是可执行程序代码.data紧随其后的是已初始化数据有两种数据形式:.i nt 和. 用来设置一个或多个16 位无符号整型量常数.word.word 用来设置一个或多个 16 位符 号整型量常数table: .word 1,2,3,4.word 6,8,4,2表示在程序存储器标号为table 开始的 8 个单兀中存放初始化数据 1, 2, 3, 4, 6, 8, 4, 2.bss.bss 为未初始化变量保留存储空间.bss x,4表示在数据存储器中空出4个存储单兀存放变量

4、 x1 , x2 , x3 和 x4.sect建立包含代码和数据的自定义段.sectvectors疋义向量表,紧随其后的是复位向量和中断向量,名为vectors.usect为未初始化变量保留存储空间的自定义段STACK .usect“STACK ,10h在数据存储器中留出 16 个单元作为堆栈区,名为 STACK(4)汇编语言程序中的数据形式如表所示形式举例二进制1110001b 或 1111001B八进制226q 或 572Q十进制1234 或+ 1234 或1234 (缺省型)十八进制0A40h 或 0A40H 或 0 xA40浮点数1.654e 23 (仅 C 语言程序中能用,汇编程序中

5、不能用)字符D字符串this is a stri ng2.程序2. 1 程序一编程目的:了解 DSP 的输入和输出方法程序功能:求乘积之和y=a1*x1+a2*x2+a3*x3+a4*x4.title mpy_add.asm.mmregs;将存储映像寄存器导入列表STACK.usectSTACK,10h;给堆栈段分配空间.bss a,4;将 9 个字空间分配给各个变量.bss x,4.bss y,1PA0.set 0;将端口 PA0 全部置 0.def start;疋义标号 start.data;定义数据代码段table:.word4,4,4,4.word4,4,4,4.text;定义文本代码

6、段start:STM#0,SWWSR;将等待寄存器设为 0,表示不等待;将 AR1 指向变量 a 的地址;从程序存储空间转移 7+1 个值到数据储存空间;调用 SUM 子程序;循环等待;将 AR3 指向变量 a 的地址;将 AR4 指向变量 x 的地址;将 A 清 0,并重复执行下一条指令 3+ 1 次;将寄存器 A 中的低 16 位存入 y 地址空间;将 y 地址中的值输出到输出口;子程序返回;程序结束等待位的设置:C54x 片内有一部件一一软件可编程等待状态发生器,控制着外部总线的工作。软件可编程等待状态发生器可将外部总线周期延长多达7 个周期,这样一来,C54就能很方便的与外部慢速器件相

7、接口。如果外部器件要求插入7 个以上的等待周期,则可以利用硬件READY 先来接口。当所有的外部寻址都配置在0 等待状态时,加到等待状态发生器的时钟被关断;来自内部时钟的这些通道被切断后,可以降低处理器的功耗。软件可编程等待状态发生器的工作由16 位的软件等待状态寄存器(SWWSR )的控制,它是存储器映象寄存器,在数据空间的地址为0028h。将程序空间和数据空间都分成两个32K 字块,I/O 空间由一个 64K 字块组成。这 5 个字块空间在 SWWSR 中都相应的有一个 3 位字段,用来定义各个空间插入等待状态的数目:1514 12119865320保留/XPA(仅C548,C549)I/

8、O 空间(64K)数据空间(高32K)数据空间(低 32位)程序空间(高 32位)程序空间(低 32位)RR/WR/WR/WR/WR/W上述 SWWSR 的各个 3 位字段规定的插入等待状态的最小数为0 (不插入等待周期),最大数为 7 ( 111b)。2. 2 程序二编程目的:熟悉 DSP 汇编程序设计技巧,完善输出功能#STACK+10h,;设堆栈指针STM#a,AR1RPT#7STM程序功能:实现一 8 位 LED 灯由左到右循环闪烁.title bubble.asm.mmregs;将存储映像寄存器导入列表STACK.usectSTACK,5h ;给堆栈段分配空间.bss y,1.def

9、 start.dataPAO.set 0.textstart:STM#7000,SWWSR;设等待位STM#2,AR3;将辅助寄存器 AR3 设为 2 (乘 2,实现左移)STM#6,AR1;将辅助寄存器 AR1 设为 6 (左移 7 次)STM#3,AR2;将辅助寄存器 AR2 设为 3 (循环执行 4 次)LDAR3,T;将 T (乘法寄存器)设为 2Ioop1:LD#1,A;A 寄存器值为 1STLA,y;y= 1PORTW y,PA0;输出 y 地址内的值到输出口STM#10000,AR4;将辅助寄存器 AR4 设为 10000Ioop3:RPT#10000;重复执行下一指令 1000

10、0+ 1 次NOP;等待BANZloop3,*AR4-;循环 AR4 值 10000+ 1 次loop2:MPYy,A;将 yxT,其值存入 A 寄存器STLA,y;将 A 的值存入 y 地址中PORTW y,PA0;输出 y 地址值到输出口STM#10000,AR5;将辅助寄存器 AR5 设为 10000loop4:RPT#10000;实现第 8 个灯跳转到第 1 个灯时的时间延迟NOPBANZloop4,*AR5-BANZloop2,*AR1-BANZloop1,*AR2-en d:Bend.end数据寻址方式:C54x 共有 7 种数据寻址方式,如表所示:寻址方式用途举例指令含义立即寻址

11、主要用于初始化LD# 10, A将立即数 10 传送至累加器 A绝对寻址利用 16 位地址寻址存储单元STL A, *(y)将累加器 A 的低 16 位存放到变量 y 所在 的存储单元中累加器寻址把累加器的内容作为地址READY A x按累加器 A 作为地址 读程序存储器,并存 入变量 x 所在的数据 存储器单元直接寻址利用数据页指针和堆栈指针寻址LD x,A(DP+x 的低 7 位地址)A间接寻址利用辅助寄存器作为地址指针LD *AR1,A(AR1)A存储器映象寄存器寻址快速寻址存储器映象寄存器LDM ST1 , B(ST1)B堆栈寻址压入/弹出数据存储 器和MMR (存储器 映象寄存器)P

12、SHM AG(SP) 1 SP,(AG ) TOS C54x 寻址存储器有两种基本的数据形式:16 位数和 32 位数。大多数指令能够寻址16 位数,但是,只有双精度和长字指令才能寻址32 位数。在 32 位寻址时,先处理高有效字,然后处理低有效字。如果寻址的第1 个字处在偶地址,那么第 2 个字就处在下一个(较高的)地址;如果第1 个字处在奇地址,那么第 2 个字就处在前一个(较低的)地址。循环操作:BANZ在程序设计时,经常需要重复执行某一段程序。利用BANZ (当辅助寄存器部位 0时转移)指令执行循环技术和操作是十分方便的。如果要重复执行 n 次,则重复指令中应规定计数值为 n 1 次。

13、重复操作:C54x 有 3 条重复操作指令:RPT (重复下条指令)、RPTZ (累加器清 0 并重复下条指 令)以及 RPTB(块重复指令)。重复指令 RPT 或 RPTZ 允许重复执行紧随其后的那一条指令。如果要重复执行n 次,则重复指令中应规定计数值为n- 1 次。2 3 程序三编程目的:实现 DSP 分时输入与输出功能程序功能: 先从一个 I/O 口读入一数据并将其存入某地址, 再从该地址将数据输出到另一个 I/O 口.title dspio.asm.mmregsPA0.set 0PA1.set 1STACK .usect STACK,10h.bss y,1.textstart: PO

14、RTR PA1,y ;从 I/O 口读入数据并储存到 y 所在的地址LD y,A ;将 y 中的数据写入累加器 A 中(便于观察 y 中数值的变化情况)PORTW y,PA0 ;将 y 所在地址中的数据输出到 I/O 口end: B end.end2.4 程序四 编程目的:实现 DSP 循环输入与输出功能程序功能:令 DSP 反复执行从输入装置读取数据,并将数据存入某一地址,再从该地址将 数据输出到输出设备.mmregsPA0.set 0PA1.set 1STACK.usectSTACK,10h.bss y,1.textstart:STM#4000,AR1LOOP1:PORTRPA1,yLDy

15、,APORTW y,PA0BANZLOOP1,*AR1; AR1 作循环计数器;循环读写.title dspio2.asm.end2.5 程序五编程目的:应用 DSP 实现对压水堆大破口事故(LOCA )进行事故后果判断 编程背景:当始发事件大 LOCA发生时,需要下列功能响应以消除或缓解事故:(1)停堆(RS),中止核裂变过程;(2)安全壳喷淋系统动作,以降低安全壳压力( COI);(3)向堆芯注入应急冷却水(ECI),以冷却堆芯;(4) 安全壳再循环冷却(COR),由循环喷淋水导出安全壳内热量,控制安 全壳的温度核压力;(5)堆芯再循环冷却(ECR),进行堆芯再循环冷却阶段。 功能事件树图

16、如下图所示破口堆次临界安全壳降堆芯应急完全壳降压堆芯再循序列号堆芯是PBRS压 COI冷却 ECICOR环冷去卩ECR否熔化程序功能:反复从输入口读取数据(不同位分别代表执行不同的功能响应),经 DSP 处理后将判断结果输出到输出口,通过指示灯(不同的灯代表不同事故结果)显示出来end:end.title LOCA.asm.mmregs;事故分析列表.word0,0,0,0,0,0,0,0,0,0.word0,0,2,0,2,0,0,0,0,0.word2,0,2,0,0,0,0,0,0,0.word0,0,0,0,0,0,0,0,0,0.word0,0,0,0,0,0,0,0,0,0.wor

17、d0,0,0,0,0,0,0,0,0,0.word16,0,16,0,0,0,0,0,16,0.word16,0,0,0,0,0,1,0,1,0.word0,0,0,0,1,0,1,0,0,0.word0,0,0,0,0,0,0,0,0,0.word0,0,0,0,0,0,0,0,0,0.word0,0,0,0,0,0,0,0,0,0.word0,0,0,0,0,0,0,0,0,0.word0,0,0,0,0,0,0,0,0,0.word0,0,0,0,0,0,0,0,0,0.word0,0,0,0,0,0,0,0,0,0.word0,0,0,0,0,0,0,0,0,0.word0,0,0,0,0,0,0,0,0,0.word0,0,0,0,0,0,0,0,8,0.word8,0,0,0,0,0,8,0,8,0.word64,0,64,0,0,0,0,0,64,0.word64,0,0,0,0,0,0,0,0,0.textstart:STM#1,AR1;将 AR1 置 1S

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论