好文档就是一把金锄头!
欢迎来到金锄头文库![会员中心]
电子文档交易市场
安卓APP | ios版本
电子文档交易市场
安卓APP | ios版本

DSP汇编编程及应用举例..doc

9页
  • 卖家[上传人]:世***
  • 文档编号:152104106
  • 上传时间:2020-11-21
  • 文档格式:DOC
  • 文档大小:60KB
  • / 9 举报 版权申诉 马上下载
  • 文本预览
  • 下载提示
  • 常见问题
    • 1.DSP汇编语言程序的编写(1) 汇编语言源程序以.asm为其扩展名2) 汇编语言源程序的每一行都可以由4个部分组成,句法如下:[标号] [:] 助记符 [操作数] [;注释]其中可用空格或TAB键隔开标号——供本程序的其他部分或其他程序调用标号是任选项,标号后面可以加也可以不加冒号“:”标号必须从第一列写起,标号最多可达到32个字符(A~Z ,a~z ,0~9 ,_ ,以及$),但第1个字符不能以数字开头引用标号时,标号的大小写必须一致标号的值就是SPC(段程序计数器)的值如果不用标号,则第一个字符必须为空格、分号或星号(*)助记符——助记符指令、汇编指令、宏指令和宏调用作为助记符指令,一般用大写;汇编命令和宏指令,以英文句号“.”开始,且为小写汇编命令可以形成常数和变量,当用它控制汇编和连接过程时,可以不占用存储空间指令和汇编命令都不能写在第1列操作数——指令中的操作数或汇编命令中定义的内容操作数之间必须用逗号“,”分开有的指令操作无操作数,如NOP、RESET注释——注释从分号“;”开始,可以放在指令或汇编命令的后面,也可以放在单独的一行或数行注释是任选项如果注释从第1列开始,也可以用“*”表示注释。

      3) 常用的汇编命令如表所示汇编命令作用举例.title紧随其后的是汇编语言程序正文.title “example.asm”.end结束汇编命令放在汇编语言程序的最后.text紧随其后的是汇编语言程序正文经汇编后,紧随.text后的是可执行程序代码.data紧随其后的是已初始化数据有两种数据形式:.int和.word.int.int用来设置一个或多个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个存储单元存放变量x1,x2,x3和x4.sect建立包含代码和数据的自定义段.sect “vectors”定义向量表,紧随其后的是复位向量和中断向量,名为vectors.usect为未初始化变量保留存储空间的自定义段STACK .usect “STACK”,10h 在数据存储器中留出16个单元作为堆栈区,名为STACK(4) 汇编语言程序中的数据形式如表所示形式举例二进制1110001b或1111001B八进制226q或572Q十进制1234或+1234或-1234(缺省型)十六进制0A40h或0A40H或0xA40浮点数1.654e-23(仅C语言程序中能用,汇编程序中不能用)字符‘D’字符串“this is a string”2. 程序2.1 程序一编程目的:了解DSP的输入和输出方法程序功能:求乘积之和y=a1*x1+a2*x2+a3*x3+a4*x4 .title "mpy_add.asm" .mmregs ;将存储映像寄存器导入列表STACK .usect "STACK",10h ;给堆栈段分配空间 .bss a,4 ;将9个字空间分配给各个变量 .bss x,4 .bss y,1PA0 .set 0 ;将端口PA0全部置0 .def start ;定义标号start .data ;定义数据代码段table: .word 4,4,4,4 .word 4,4,4,4 .text ;定义文本代码段start: STM #0,SWWSR ;将等待寄存器设为0,表示不等待 STM #STACK+10h,SP ;设堆栈指针 STM #a,AR1 ;将AR1指向变量a的地址RPT #7 ;从程序存储空间转移7+1个值到数据储存空间 MVPD table,*AR1+ CALL SUM ;调用SUM子程序end: B end ;循环等待SUM: STM #a,AR3 ;将AR3指向变量a的地址 STM #x,AR4 ;将AR4指向变量x的地址 RPTZ A,#3 ;将A清0,并重复执行下一条指令3+1次 MAC *AR3+,*AR4+,ASTL A,@y ;将寄存器A中的低16位存入y地址空间 PORTW @y,PA0 ;将y地址中的值输出到输出口 RET ;子程序返回 .end ;程序结束等待位的设置: C54x片内有一部件——软件可编程等待状态发生器,控制着外部总线的工作。

      软件可编程等待状态发生器可将外部总线周期延长多达7个周期,这样一来,’C54x就能很方便的与外部慢速器件相接口如果外部器件要求插入7个以上的等待周期,则可以利用硬件READY先来接口当所有的外部寻址都配置在0等待状态时,加到等待状态发生器的时钟被关断;来自内部时钟的这些通道被切断后,可以降低处理器的功耗 软件可编程等待状态发生器的工作由16位的软件等待状态寄存器(SWWSR)的控制,它是存储器映象寄存器,在数据空间的地址为0028h 将程序空间和数据空间都分成两个32K 字块,I/O空间由一个64K字块组成这5个字块空间在SWWSR中都相应的有一个3位字段,用来定义各个空间插入等待状态的数目:1514~1211~98~65~32~0保留/XPA(仅’C548,‘C549)I/O空间(64K)数据空间 (高32K)数据空间 (低32位)程序空间 (高32位)程序空间 (低32位)RR/WR/WR/WR/WR/W上述SWWSR的各个3位字段规定的插入等待状态的最小数为0(不插入等待周期),最大数为7(111b)2.2程序二编程目的:熟悉DSP汇编程序设计技巧,完善输出功能程序功能:实现一8位LED灯由左到右循环闪烁 .title "bubble.asm" .mmregs ;将存储映像寄存器导入列表STACK .usect "STACK",5h ;给堆栈段分配空间 .bss y,1 .def start .dataPA0 .set 0 .text start: STM #7000,SWWSR ;设等待位 STM #2,AR3 ;将辅助寄存器AR3设为2 (乘2,实现左移) STM #6,AR1 ;将辅助寄存器AR1设为6 (左移7次) STM #3,AR2 ;将辅助寄存器AR2设为3 (循环执行4次) LD AR3,T ;将T(乘法寄存器)设为2loop1: LD #1,A ;A寄存器值为1 STL A,@y ;y=1 PORTW @y,PA0 ;输出y地址内的值到输出口 STM #10000,AR4 ;将辅助寄存器AR4设为10000loop3: RPT #10000 ;重复执行下一指令10000+1次 NOP ;等待 BANZ loop3,*AR4- ;循环AR4值10000+1次loop2: MPY @y,A ;将yT,其值存入A寄存器 STL A,@y ;将A的值存入y地址中 PORTW @y,PA0 ;输出y地址值到输出口 STM #10000,AR5 ;将辅助寄存器AR5设为10000loop4: RPT #10000 ;实现第8个灯跳转到第1个灯时的时间延迟 NOP BANZ loop4,*AR5- BANZ loop2,*AR1- BANZ loop1,*AR2-end: B end .end 数据寻址方式:C54x共有7种数据寻址方式,如表所示:寻址方式用途举例指令含义立即寻址主要用于初始化LD #10,A将立即数10传送至累加器A绝对寻址利用16位地址寻址存储单元STL A,*(y)将累加器A的低16位存放到变量y所在的存储单元中累加器寻址把累加器的内容作为地址READYA x按累加器A作为地址读程序存储器,并存入变量x所在的数据存储器单元直接寻址利用数据页指针和堆栈指针寻址LD @x,A(DP+x的低7位地址)——>A间接寻址利用辅助寄存器作为地址指针LD *AR1,A((AR1)) ——>A存储器映象寄存器寻址快速寻址存储器映象寄存器LDM ST1,B(ST1)——>B堆栈寻址压入/弹出数据存储器和MMR(存储器映象寄存器)PSHM AG(SP)-1——>SP,(AG)——>TOS‘C54x寻址存储器有两种基本的数据形式:16位数和32位数。

      大多数指令能够寻址16位数,但是,只有双精度和长字指令才能寻址32位数 在32位寻址时,先处理高有效字,然后处理低有效字如果寻址的第1个字处在偶地址,那么第2 个字就处在下一个(较高的)地址;如果第1个字处在奇地址,那么第2个字就处在前一个(较低的)地址循环操作:BANZ 在程序设计时,经常需要重复执行某一段程序利用BANZ(当辅助寄存器部位0时转移)指令执行循环技术和操作是十分方便的如果要重复执行n次,则重复指令中应规定计数值为n-1次重复操作:C54x有3条重复操作指令:RPT(重复下条指令)、RPTZ(累加器清0并重复下条指令)以及RPTB(块重复指令)重复指令RPT或 RPTZ允许重复执行紧随其后的那一条指令如果要重复执行n次,则重复指令中应规定计数值为n-1次2.3 程序三编程目的:实现DSP分时输入与输出功能程序功能:先从一个I/O口读入一数据并将其存入某地址,再从该地址将数据输出到另一个I/O口 .title "dspio.asm" .mmregsPA0 .set 0 PA1 .set 1STACK .usect "STACK",10h .bss y,1 .textstart: PORTR PA1,@y ;从I/O口读入数据并储存到y所在的地址 LD @y,A ;将y中的数据写入累加器A中(便于观察y中数值的变化情况) 。

      点击阅读更多内容
      关于金锄头网 - 版权申诉 - 免责声明 - 诚邀英才 - 联系我们
      手机版 | 川公网安备 51140202000112号 | 经营许可证(蜀ICP备13022795号)
      ©2008-2016 by Sichuan Goldhoe Inc. All Rights Reserved.