DSP C5400软件设计基础

合集下载

第6章 TMS320C54 DSP的C程序设计(未完)

第6章  TMS320C54 DSP的C程序设计(未完)


在C语言中对DSP片内寄存器一般采用指针方式来访问, 所以常常采用的方法是将DSP寄存器地址的列表定义在头 文件,中如下所示:
#define IMR #define IFR #define ST0 #define ST1 #define AL #define AH #define AG #define BL #define BH #define BG #define T
字段名称
辅助寄存器指针 累加器移位 块循环标志 进位标志 双16位标志 兼容方式选择 编译方式选择 小数方式选择 累加器A溢出标志 累加器B溢出标志 溢出方式位选择 符号扩展方式选择 饱和方式选择 饱和方式存储 测试位标准
状态位值
0 —— —— —— 0 0 1 0 —— —— 0 —— 0 0 ——
6.3 C语言和汇编语言混合编程

6.3.1 独立的C模块和汇编模块接口 6.3.2 从C程序中访问汇编程序变量


6.3.3 在C程序中直接嵌入汇编语句
返回首页

用C语言和汇编语言混合编程,能充分利用DSP 芯片的资源,更好地发挥C语言和汇编语言进行 软件开发的各自的优点,可以将两者有机结合起 来,兼顾两者的优点,避免其弊端。因此,在很 多情况下,采用混合编程方法能更好地达到设计 要求,完成设计功能。

6.1.2 C/C++语言数据类型
表6.1 CCS中C语言数据类型
类型 Signed char char, unsigned char short, signed short unsigned short int, signed int unsigned int long, signed long unsigned long enum float double long double pointers 大小 16位 16位 16位 16位 16位 16位 32位 32位 16位 32位 32位 32位 16位 数据格式 ASCII ASCII 二进制补码 二进制 二进制补码 二进制 二进制补码 二进制 二进制补码 IEEE 32位 IEEE 32位 IEEE 32位 二进制 最小值 -32768 0 -32768 0 -32768 0 -2147483648 0 -32768 1.175494e-38 1.175494e-38 1.175494e-38 0 最大值 32767 65535 32767 65535 32767 65535 2147483647 4294967295 32767 3.40282346e+38 3.40282346e+38 3.40282346e+38 0x0FFFF

第5章TMS320C54x的汇编语言程序设计基础资料

第5章TMS320C54x的汇编语言程序设计基础资料
.text 段(文本段),通常包含可执行代码; .data 段(数据段),通常包含初始化数据; .bss 段(保留空间段),通常为未初始化变量保留存储空间。
2020年10月9日
DSP原理及应用
14
第5章 TMS320C54x的汇编语言程序设计 基础
5.2.1 COFF文件的基本单元
1. 段(sections)
5.1 汇编语言程序的编辑、汇编、链接过程
3. 链接
所谓链接,就是利用’C54x的链接器LNK500 ,根据链接器命令文件(.cmd)对已汇编过的一个或 多个目标文件(.obj)进行链接,生成输出文件 (.out)和存储器映像文件(.map) 。
常用的汇编器命令:
lnk500 %1.cmd
l%n1k.5c0m0d: 调 链用 接链 命接 令器文命件令名,该文件须指明目标文件、 输入文件、输出文件、链接选项和存储器配置要求等。
2020年10月9日
DSP原理及应用
20
第5章 TMS320C54x的汇编语言程序设计 基础
5.2.2 汇编器对段的处理
1. 未初始化段 未初始化段就是在’C54x存储器中的保留空间
,通常将它们定位在RAM区。 在目标文件中,这些段中没有确切的内容。 由这些段定义的空间仅作为临时存储空间,在
程序运行时,可以利用这些存储空间存放变量。 未初始化段分为默认的和命名的两种,分别由
链接器的任务:即分配存储单元,将目标文件中的段重 新定位到目标系统的存储器中,这一过程称为定位或分配。
2020年10月9日
DSP原理及应用
18
第5章 TMS320C54x的汇编语言程序设计 基础
3. 段与目标存储器的对应关系
目标文件中的段与目标存储器之间的关系

C54X DSP 的基本知识点

C54X DSP 的基本知识点

C54X DSP 的基本知识点
• 9、C54X有两类特殊功能寄存器,它们都映 象到数据存贮器空间的0页,第一类是CPU 寄存器,它们映象到数据空间的0000~ 001FH地址范围内,主要用于程序的运算处 理和寻址方式的选择及设定,第二类是外围 电路寄存器,它们映象到数据空间的 0020H~005FH区域内,主要用于控制片内 外设,包括串行通信控制寄存器组、定时器 控制寄存器组、机器周期设定寄存器组等。
• 11、对于C54X来说,不同型号器件的CPU 是相同的,它由以下基本部件组成:40位的 ALU、2个40位累加器、桶形移位寄存器 (移位数为-16~31)、乘法器/加法器单 元、比较选择和存储单元CSSU、指数编码 器、CPU状态和控制寄存器。
C54X DSP 的基本知识点
• 12﹑累加器A和B都可分为三部分:保护位 ﹑高阶位和低阶位。其中,保护位用作计算 时的数据余量,以防止诸如自相关那样的迭 代运算时溢出。
C54X DSP 的基本知识点
• 20﹑C54X共有七种寻址方式,分别为立即 寻址﹑绝对寻址﹑累加器寻址﹑直接寻址 ﹑间接寻址﹑存贮器映象寄存器寻址﹑堆 栈寻址。
C54X DSP 的基本知识点
• 21﹑立即寻址就是在指令中已经包含有执 行指令所需的操作数。 C54X中的立即数有 两种形式;即短立即数和长立即数。
C54X DSP 的基本知识点
• 1、DSP芯片内部采用改进的哈佛结构,允许同时取指令和 取数据,而且还允许在程序空间和数据空间之间相互传送 数据。 • 所谓哈佛结构,是将程序和数据的存贮空间分开,各有各的 地址总线和数据总线。这样同一条指令可以同时对不同的 存贮空间进行读操作或写操作,从而提高了处理速度。 • 和哈佛结构相配合的就是流水线操作。如果一条指令仅仅 对一个数据空间操作,哈佛结构就失去其存在的意义。而 DSP指令又不可避免地需要一些单操作数指令。 • 所谓流水线操作,就是将各条指令执行过程的几个阶段(取 指、译码、取操作数、执行)重迭进行,执行完第一条指令 的第一步后,紧接执行该指令的第二步,同时执行下条指令 的第一步,使得指令执行加快,使大多数指令都可以在单个 指令周期内完成。

DSP技术及应用系统设计PPT电子课件教案-第3章 TMS320C54x软件开发模板

DSP技术及应用系统设计PPT电子课件教案-第3章  TMS320C54x软件开发模板

4.注释区

汇编程序举例(1)
1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15.
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ; 64-bit Addition
;
; X3 X2 X1 X0 ; + Y3 Y2 Y1 Y0 ; ––––––––––––– ; W3 W2 W1 W0 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ADD64: DLD @X1,A ;A = X1 X0 DADD @Y1,A ;A = X1 X0 + Y1 Y0 DST A,@W1 DLD @X3,A ;A = X3 X2 ADDC @Y2,A ;A = X3 X2 + 00 Y2 + C ADD @Y3,16,A ;A = X3 X2 + Y3 Y2 + C DST A,@W3


.text — 此段存放程序代码。
.data — 此段存放初始化了的数据。 .bss — 此段存入未初始化的变量。 .sect '名称' — 定义一个有名段,放初始化了的数据或程 序代码。
2.条件汇编伪指令

.if、.elseif、.else、.endif 伪指令告诉汇编器按照表达式 的计算结果对代码块进行条件汇编。 .if expression — 标志条件块的开始,仅当条件为真 (expression的值非0即为真)时汇编代码。 .elseif expression — 标志若.if条件为假,而.elseif条件 为真时要汇编代码块。 .else — 标志若.if条件为假时要汇编代码块。 .endif — 标志条件块的结束,并终止该条件代码块。

DSP技术 第5章 TMS320C54x DSP的汇编语言程序设计

DSP技术 第5章 TMS320C54x DSP的汇编语言程序设计
如1682416824表达式表达式2018年1月25日dsp原理及应用10序号序号运算操作运算操作求值顺序求值顺序11取正取负按位求补逻辑负取正取负按位求补逻辑负乘法除法求模乘法除法求模加法减法加法减法指数指数从左到右从左到右55左移右移左移右移小于小于等于小于小于等于大于大于等于大于大于等于不等于等于不等于等于按位与运算按位与运算1010按位异或运算按位异或运算1111按位或运算按位或运算表中运算符的优先级是从上到下同级是从左到右
A B T FRCT
指令执行前 00 0000 1000H 00 0000 0000H
0400H 1
A B T FRCT
指令执行后 00 0000 1000H 00 001A 3800H 0400H 1
【例13】 MACR *AR3+,*AR4+,A,B
A B T FRCT AR3 AR4 数据存储器 0100H 0200H
表5.8 乘加和乘减指令
【例11】 MAC #345H,A,B
A B T FRCT
指令执行前 00 0000 1000H 00 0000 0000H 0400H 0
A B T FRCT
指令执行后 00 0000 1000H 00 000D 2400H 0400H 0
【例12】 MAC #345H,A,B
表达式可以是常数、符号,或者是由算术运算符 分开的一系列常数和符号。
有效表达式的值: -32 768~32 767 影响表达式的主要因素:
① 圆括号( )。圆括号内的表达式最先计算; ② 优不先能级用。大’括C号5{4x}汇或编中器括使号用[ ]代与替C语圆言括相号似( 的)。优
先级,优先级高的先计算;
0101H 0201H

DSP教案4(编程基础)讲课用

DSP教案4(编程基础)讲课用

汇编语言程序的编写( 汇编语言程序的编写(续)
链接之后生成可执行的COFF执行文件 执行文件 链接之后生成可执行的 (.out)。 ) COFF 执行文件下载到 COFF执行文件下载到 C54xDSP 中执行 , 执行文件下载到试 工 具 ( Debugging Tool) 对程序进行跟踪调试或优化 , 也 ) 对程序进行跟踪调试或优化, 可利用交叉参考列表器( 可利用交叉参考列表器(Cross-reference Lister)和绝对列表器 ( Absolute Lister) ) 和绝对列表器( ) 生成一些包含调试信息的表。 生成一些包含调试信息的表。
.text start: STM STM STM RPT MVPD CALL end: B SUM: STM STM RPTZ MAC STL RET .end
;以下为程序码流 以下为程序码流 #0,SWWSR ;adds no wait states #STACK+10h,SP ;设置堆栈指针 设置堆栈指针 #a,AR1 ;AR1 指向 指向a #7 ;重复 次 重复8次 重复 table,*AR1+ ;从程序存储器到数据 从程序存储器到数据 SUM ;调用 调用SUM 子程序 调用 end #a,AR3 ;子程序进行重复加法 子程序进行重复加法 #x,AR4 ; A,#3 *AR3+,*AR4+,A A,@y
3、句法解释
供本程序的其他部分或其他程序调用。 标号: 供本程序的其他部分或其他程序调用。标号是 任选项, 任选项,标号后面可以加也可以不加冒号 “:” 。标 号必须从第一列写起,但第一个字母不能以数字开头。 号必须从第一列写起,但第一个字母不能以数字开头。 引用标号时,标号的大小写必须一致。 引用标号时,标号的大小写必须一致。

第三讲-DSP-C语言程序设计基础

第三讲-DSP-C语言程序设计基础

先新建源程序窗口,如图所示。 输入源程序: int x,y,z; main() { x=1; y=2; while ( 1 ) { z=x+y; } }
main函数
main函数是一个比较特殊的函数。每个单片机、DSP C程序都必须 有一个名为main的函数,程序从这里开始执行。
main函数另一个独特的属性是,它有两种正式的原型且经常会使 用一些其它形式。两种标准型如下:
VA[i]= *pia/120; VB[i]= *pib/218; VC[i]= *pic/218;
在CCS中调试程序的一般步骤
打开文件夹内一个工程(系统自带的程序)。 点击编译工具栏的 rebuild all 按钮, 开始编译工程 下载编译结果到DSP开发板。 执行程序。
在CCS中调试程序的一般步骤
2)源文件.c 工程的主要文件,
软件开发时编写的代码 都是在源文件内。
3).lib文件
库文件
4).cmd 文件
用来分配存储空间的。
▪ 编写以C语言为基础
的简单DSP程序
▪数值运算
开设三个整 型量x,y,z
▪赋初值:
x=1,y=2
▪计算x+y
▪输出结果到z
▪循环
先新建源程序窗口,如图所示。 输入源程序: int x,y,z; main() { x=1; y=2; while ( 1 ) { z=x+y; } }
在CCS中调试程序的一般步骤
统计代码运行时间 点击菜单栏中的“Profile”“Clock””Enable”, 来
使能 Clock功能。接下来点击 “Profile”“Clock”“View”, 在 CCS 最下面会出现一 个类似于秒表的工具, 旁边显示数字“0”, 通过设置断点 观察始终数字的变化。

DSP的C语言程序设计

DSP的C语言程序设计

DSP的C语言程序设计一、为什么要使用C语言对DSP编程C语言是高级语言,易学易用。

C语言的编程效率极高,易于调试。

C语言的可移植性好。

二、C程序的结构及组成完整的C程序是由一个主函数main()和其它的子函数组成的,每一个子函数完成特定的功能。

DSP的C 语言的入口地址固定为c_int00,在中定义。

C语言支持丰富的数据类型和数据结构,在ccs集成开发环境中,为C语言提供了完整的支持硬件的底层函数库和支持算法的DSP函数库。

在使用C语言的库函数时,在工程中必须包括相应的函数库和运行时支持库。

下面是一般C语言程序的结构和组成框架。

一般C程序的结构如下:h头文件#include “函数库1”#include <函数库2>#include “函数库3”…*//* *//* Parameters: *//* - port - port address (HEX) *//* *//* Return: *//* - returns value read from port. *//* *//* Notes: *//* *//*****************************************************************************/s16 portRead(u16 port);/*****************************************************************************//* portWrite(u16 port, s16 value) *//* *//* This routine writes a word to the specified port. */ /* *//* Parameters: *//* - port - port address (HEX) *//* - value - 16 bit word to write. *//* *//* Return: *//* - none *//* *//* Notes: *//* *//*****************************************************************************/void portWrite(u16 port, s16 value);#endif /* end of #ifndef _PORTIO_H */使用时,先使用宏替换或枚举定义I/O端口的地址,然后使用portRead()和portWrite()函数访问I/O端口例如:#includeVariable=portRead(portA);c5400\cgtools\include目录与c5400\dsk5402\include目录中的头文件类型不同。

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