当前位置:文档之家› DSP C5400软件设计基础

DSP C5400软件设计基础

第四章 DSP软件设计
DSP程序汇编的基本知识 汇编语言程序设计的基本流程
定点数的基本算术运算程序汇编
软件开发环境 CCS应用软件
·
1
* DSP程序汇编的基本知识
DSP的软件开发一般有以下三种方式: (1) 直接编写汇编语言源程序; (2) 编写C语言程序; (3) 混合编程(既有C代码,又含汇编代码)。
#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器件的数据范围,存储所消耗时间和空间也会增 加,更坏的是,所得乘积无法作为后续推算中乘法器 的输入;而小数乘法之乘积总是“向右增长”,超出 的器件数据范围的也是不太感兴趣的部分,其结果的 高16位仍可用于递推运算。
·
14
* 定点数的基本算术运算汇编(续)
·
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
· 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个字存储空间
·
4
* DSP程序汇编的基本知识(续)
操作数表达式中的运算符优先级
·
5
* DSP程序汇编的基本知识(续)
常用的汇编伪指令表(掌握)
·
6
* DSP程序汇编的基本知识(续)
其它常用的汇编伪指令(续)
.def 符号名——在当前文件中定义一个符号,可以被其他文件使用。 .ref 符号名——在其他文件中定义,可以在本文件中使用的符号。 .global 符号名——其作用相当于.def、.ref效果之和。 .mmregs——全局定义存储器映射寄存器,这样便可直接使用MMR。 …… ……
·
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字符和空 格,首列注释可用“*”或“;”标示,其它任意位置 注释则只能用“;”号与前面内容隔开。
· 16
* 定点数的基本算术运算汇编(续)
4、数据(块)的移动如何处理? 程序存储器——数据存储器 数据存储器——数据存储器 数据存储器——数据存储器(MMR) 数据存储器(MMR)——数据存储器(MMR) 程序存储器(ACC)——数据存储器 数据存储器——I/0口存储器
·
17
* 定点数的基本算术运算汇编(续)
·
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]; }
start:
;本模块定义“start‖,它处可引用 ;其后是已初始化的数据(表) ;存放3个已初始化数据到起始标号 为table的连续3个程序存储器单元 ;紧跟汇编正文文本 #0,SWWSR ;插入0个等待状态 #STACK+10H,SP ;设置堆栈指针 #m,AR1 ;将变量m指向AR1 (待续)
·
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、 _ 、和 $ 符号组成,且第一个字符不能是数字,区分大 小写,标号缺省时则必须以空格、“*”或“;”开始。
·
7
* DSP程序汇编的基本知识(续)
宏定义和宏调用
• C54x 汇编支持宏语言。如果程序中需要多次执行某段程序,可以把 这段程序定义(宏定义)为一个宏,然后在需要重复执行这段程序 的地方调用这条宏。 • 宏的使用分为三个过程:宏定义、宏调用、宏展开 • 宏定义如下: Macname .macro[parameter1][,…,parametern] …… …… .endm • 宏调用语法格式如下: Macname <实际参数> • 宏展开:源程序如果调用宏命令,在汇编时会将宏命令自动展开。
19
start:
end:
·
.text STM RPT MVPD B .end
#x,AR1 #4 table,*AR1+ eБайду номын сангаасd
* 定点数的基本算术运算汇编(续)
5、如何使用堆栈? 如果程序中要用到堆栈,必须先对其进行设置,一般 方法如下: size .set 100 stack .usect ―STK‖,size … start … STM #stack+size,SP 堆栈的用法: 压入堆栈操作时,SP先减1,再将数据压入堆栈中; 弹出堆栈操作时,先将数据弹出,再将SP加1。
·
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]
.text段: 通常包含程序代码 .data段: 通常包含需要初始化的数据 .bss段: 通常包含不需要初始化的数据
段的两种基本类型
初始化段:这些段内的数据都需要初始化,使之内容确定, 一般用作程序代码段和数据表格段。如 .text 和 .data 段。
未初始化段:不需要初始化的数据段。如 .bss 。
.sect ―section name‖ [,value]
创建未初始化段
.bss symbol,size in words [,blocking flag] [,alignment flag]
相关主题