DSP C5400软件设计基础

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

·
4
* DSP程序汇编的基本知识(续)
操作数表达式中的运算符优先级
·
5
* DSP程序汇编的基本知识(续)
常用的汇编伪指令表(掌握)
·
6
* DSP程序汇编的基本知识(续)
其它常用的汇编伪指令(续)
.def 符号名——在当前文件中定义一个符号,可以被其他文件使用。 .ref 符号名——在其他文件中定义,可以在本文件中使用的符号。 .global 符号名——其作用相当于.def、.ref效果之和。 .mmregs——全局定义存储器映射寄存器,这样便可直接使用MMR。 …… ……
19
start:
end:
·
.text STM RPT MVPD B .end
#x,AR1 #4 table,*AR1+ end
* 定点数的基本算术运算汇编(续)
5、如何使用堆栈? 如果程序中要用到堆栈,必须先对其进行设置,一般 方法如下: size .set 100 stack .usect ―STK‖,size … start … STM #stack+size,SP 堆栈的用法: 压入堆栈操作时,SP先减1,再将数据压入堆栈中; 弹出堆栈操作时,先将数据弹出,再将SP加1。
start:
;本模块定义“start‖,它处可引用 ;其后是已初始化的数据(表) ;存放3个已初始化数据到起始标号 为table的连续3个程序存储器单元 ;紧跟汇编正文文本 #0,SWWSR ;插入0个等待状态 #STACK+10H,SP ;设置堆栈指针 #m,AR1 ;将变量m指向AR1 (待续)
· 20
* 定点数的基本算术运算汇编(续)
6、定点数的基本算术运算编程示例 试编写一例求直线方程纵坐标解的汇编源程序。
提示:1、数学表达式y=mx+b; 2、数据块移动方法的使用; 3、堆栈的使用; 4、寻址方式的使用; 5、基本的乘法、加法指令的使用
·
21
* 定点数的基本算术运算汇编(续)
源程序代码如下: .title ―zxfc.asm‖ .mmregs STACK .usect ―STACK‖,10H .bss m,1 .bss x,1 .bss b,1 .bss y,1 .def start .data table: .word 3,15,20 .text STM STM STM ;替源程序文件命名“zxfc.asm‖ ;全局定义寄存器,可直接引用 ;设置堆栈区“STACK‖,16个字 ;替变量分配4个字存储空间
整数乘法之乘积总是“向左增长”,很容易超出定点 DSP器件的数据范围,存储所消耗时间和空间也会增 加,更坏的是,所得乘积无法作为后续推算中乘法器 的输入;而小数乘法之乘积总是“向右增长”,超出 的器件数据范围的也是不太感兴趣的部分,其结果的 高16位仍可用于递推运算。
·
14
* 定点数的基本算术运算汇编(续)
·
15
* 定点数的基本算术运算汇编(续)
3、定点小数乘法运算中的冗余符号位如何消除? 只需在程序中设定状态寄存器ST1中的FRCT(小数方 式)位为1,那么乘法器将结果传送至累加器时就能自 动左移一位,从而消除冗余的符号位。
思考:小数乘法编程时,如何设置FRCT?
SSBX FRCT ; FRCT=1 MPY *AR2,*AR3,A STH A,@Z
· 12
* 汇编语言程序设计的基本流程
编写向量文件 vector.asm 编写汇编源代码文件 *.asm 编写命令链接文件 *.cmd 利用汇编器和链接器对以上文件 进行汇编和链接 vector.obj和*.obj *.out *.map
·
13
* 定点数的基本算术运算汇编
1、定点DSP为什么一般采用小数进行乘法运算?
#0 ,SWWSR #STACK+10H,SP #x,AR1 #2 table,*AR1+ @x,A @y,A A,3 @w,A A,@z
例2: STM #0,SWWSR STM #STACK+10H,SP STM #x,AR1 RPT # 2 MVPD table,*AR1 LD *AR1,A BC end,AGT ABS A STL A,@x end: …
第四章 DSP软件设计
DSP程序汇编的基本知识 汇编语言程序设计的基本流程
定点数的基本算术运算程序汇编
软件开发环境 CCS应用软件
·
1
* DSP程序汇编的基本知识
DSP的软件开发一般有以下三种方式: (1) 直接编写汇编语言源程序; (2) 编写C语言程序; (3) 混合编程(既有C代码,又含汇编代码)。
·
18
* 定点数的基本算术运算汇编(续)
程序存储器——数据存储器(系统初始化)
例:初始化数组x[5]={1,2,3,4,5} .title ―csh.asm‖ .mmregs STACK .usect ―STACK‖,10H .bss x,5 .def start .data table: .word 1,2,3,4,5 ;替源程序文件命名“csh.asm‖ ;全局定义寄存器,可直接引用 ;设置堆栈区“STACK‖,16个字 ;替变量x分配5个字存储空间 ;本模块定义“start‖,它处可引用 ;其后是已初始化的数据(表) ;存放5个已初始化数据到起始标号 为table的连续5个程序存储器单元 ;紧跟汇编正文文本 ;将变量x指向AR1 ;重复下步操作5次(4+1) ;程序存储器传送数据到数据存储器 ;无条件转移到end ;结束汇编
· 3
2.助记符区 助记符区不能从第一列开始,否则被认为是标号。 3.操作数区 操作数区是一个操作数列表,可以是常数、符号或常 数与符号构成的表达式。操作数间需用“,”号隔开。 4.注释区 注释区可以从任何一列开始,可以包含ASCII字符和空 格,首列注释可用“*”或“;”标示,其它任意位置 注释则只能用“;”号与前面内容隔开。
·
29
.sect ”vectors”
.word 011h, 033h
var2 .usect ”newvars”, 1
inbuf .usect ”newvars”, 7
·
30
DSP代码的组织结构(续) 连接器对段的处理 把目标文件的段作为输入,将它们连结 起来成为可执行的输出段 为输出段选择存储器地址 命令:MEMORY和SECTIONS MEMORY:定义一段可用的物理存储区 SECTIONS:定义逻辑段与存储器物理分 配的对应关系
·
2
* DSP程序汇编的基本知识(续)
汇编语言源程序基本格式 • 汇编语言源程序包括: 指令性语句、伪指令语句、宏命令语句三种。 • 助记符指令一般包含4个部分,其一般组成形式为: [标号][:] 助记符 [操作数] [;注释] 1.标号区 所有汇编指令和大多数汇编伪指令前面都可以带有标 号,标号可以长达32个字符,由A~Z、a~z、0~9、 _ 、和 $ 符号组成,且第一个字符不能是数字,区分大 小写,标号缺省时则必须以空格、“*”或“;”开始。
zxsf:
end:
Βιβλιοθήκη Baidu
end
·
23
软件开发环境
·
24
.cmd -o 编 辑 编辑 .asm 汇 编 汇编 -l .lst .obj 链链接 接 -m .map 固化程序 .out 调 试 调试
汇编语言源程序的编辑、汇编和链接过程
· 25
TMS320C54xV3.50版代码生成工具程序
·
26
DSP代码的组织结构 段的概念 三个默认的段
.text段: 通常包含程序代码 .data段: 通常包含需要初始化的数据 .bss段: 通常包含不需要初始化的数据
段的两种基本类型
初始化段:这些段内的数据都需要初始化,使之内容确定, 一般用作程序代码段和数据表格段。如 .text 和 .data 段。
未初始化段:不需要初始化的数据段。如 .bss 。
·
10
例3: start: STM #0,SWWSR STM #STACK+10H,SP STM #a,AR1 RPT #7 MVPD table,*AR1+ STM #a,AR1 STM #x,AR2 STM #2,AR3 LD *AR1+,T MPY *AR2+,A loop: LD *AR1+,T MPY *AR2+,B MAX A BANZ loop,*AR3· 11
·
8
* DSP程序汇编的基本知识(续)
DSP汇编程序的一般结构
• • • • 顺序结构程序(程序语句连续执行) 分支结构程序(依靠条件转移指令来实现) 循环结构程序(用于某些需要重复进行的操作) 子程序结构程序(具备独立功能可被调用的程序段)
分析下面程序代码采用的哪种结构?为什么?
·
9
例1: STM STM STM RPT MVPD LD ADD LD SUB STL
·
31
目标文件中的段与目标存储器的关系
·
32
·
33
DSP代码的组织结构(续) 连接器对段的处理(续)
MEMORY { PAGE 0: name 1[(attr)]: origin = cnst, length = cnst[, fill = cnst]; PAGE 1: name n[(attr)]: origin = cnst, length = cnst[, fill = cnst]; }
·
27
.text
add: aloop: LD 0Fh,A SUB #1,A
BC
.data ivals
aloop,AGEQ
.word 0AAh, 0BBh, 0CCh
.bss
buffer,10
·
28
DSP代码的组织结构(续) 编译器对段的处理 创建初始化段
.text [value] .data [value]
.sect ―section name‖ [,value]
创建未初始化段
.bss symbol,size in words [,blocking flag] [,alignment flag]
.usect ―section name‖ , size in words [ , blocking flag] [ , alignment flag]
·
7
* DSP程序汇编的基本知识(续)
宏定义和宏调用
• C54x 汇编支持宏语言。如果程序中需要多次执行某段程序,可以把 这段程序定义(宏定义)为一个宏,然后在需要重复执行这段程序 的地方调用这条宏。 • 宏的使用分为三个过程:宏定义、宏调用、宏展开 • 宏定义如下: Macname .macro[parameter1][,…,parametern] …… …… .endm • 宏调用语法格式如下: Macname <实际参数> • 宏展开:源程序如果调用宏命令,在汇编时会将宏命令自动展开。
例4: start: STM #0,SWWSR SSBX FRCT STM #STACK+10H,SP STM #x,AR1 RPT #7 MVPD table,*AR1+ CALL sum sum: STM #x,AR2 STM #a,AR3 RPTZ A,#3 MAC *AR2+,*AR3+,A STH A,@y RET
22
·
* 定点数的基本算术运算汇编(续)
源程序代码(续): RPT #2 MVPD table,*AR1+ CALL zxsf LD @m,T MPY @x,A ADD STL RET B .end @b,A A,@y ;重复下步操作3次(2+1) ;程序存储器传送数据到数据存储器 ;调用直线方程算法程序 ; 将m地址空间的数据装入T寄存器 ; 将x地址空间的数据与T寄存器内 容相乘,结果存放在A累加器 ; 将b地址空间的数据与A累加器内 容相加,结果存放在A累加器 ;将A累加器中的最后结果低位存放 在y地址的数据存储空间 ;无条件返回 ;无条件转移到end ;结束汇编
· 16
* 定点数的基本算术运算汇编(续)
4、数据(块)的移动如何处理? 程序存储器——数据存储器 数据存储器——数据存储器 数据存储器——数据存储器(MMR) 数据存储器(MMR)——数据存储器(MMR) 程序存储器(ACC)——数据存储器 数据存储器——I/0口存储器
·
17
* 定点数的基本算术运算汇编(续)
2、汇编语言程序中定点小数的如何表示? 54x系列DSP采用2的补码表示定点小数,最高位为 符号位,Q.15格式的小数数值范围为-1 ~ +1,其最 高精度为? 汇编语言中是不能直接写入十进制小数的,如果要 定义一个小数-0.707,则可写成: .word -707*32768/1000 而不能写成: .word -0.707*32768
相关文档
最新文档