DSP-9DSP汇编语言编程的基本方法1
轻松学会DSP——DSP汇编指令
位倒序寻址的执行
设FFT长度N=16,x(0)~x(15)位于地址 (01100000)~(01101111),则AR0赋值为8 (00001000),位倒序方式读入数据情况如下(AR2初 始为01100000): RPT #15 PORTW *AR2+0B,PA
功能: 地址=AR2 , AR2=B(AR2+AR0)
循环寻址的有效地址计算
循环缓冲器的有效基地址(EFB)就是用户选定的 辅助寄存器(ARx)的低N位置 0后所得到的值。
循环缓冲器的尾地址(EOB)是通过用BK的低N位 代替ARx的低N位得到。循环缓冲器的INDEX就是 ARx的低N位,step就是加到辅助寄存器,或从辅 助寄存器中减去的值。循环寻址的算法如下:
FFT中混序就是位倒序
FFT运算时输出/输入序列中必有其一要混序。
存储单元 地址
FFT变换 结果
位码倒序
位码倒序 寻址结果
存储单元 地址
FFT变换 结果
位码倒序
位码倒序 寻址结果
0000
X(0)
0000
X(0)
1000
X(1)
0001
X(8)
0001
X(8)
1000
X(1)
1001
X(9)
1001
MVMD pmad, Smem
程序存储器地址(pmad)寻址:
FIRS Xmem, Ymem, pmad MACD Smem, pmad, src
MACP Smem, pmad, src MVPD pmad, Smem
端口地址(PA)寻址
PORTR PA, Smem
PORTW Smem, PA
*(lk)寻址适用于支持单数据存储器操作数的指令
DSP汇编语言编程基础
实验二 DSP汇编语言编程基础一、 实验目的1、了解DSP的寻址方式;2、了解DSP的汇编语言与C语言混合编程。
二、 实验器材1、安装有CCS的PC机一台;三、 实验内容1、建立一个工程;2、用汇编语言编程实现一个可被C程序调用的例程。
四、 实验步骤1、汇编语言和C语言混合编程:(1) 运行CCS,建立一个工程,取名exp2a,并保存到c:\ti\myprojects\xxx\Experiment2\目录下。
(2) 编辑如下C文件,取名exp2a.c并保存到c:\ti\myprojects\xxx\Experiment2\exp2a\目录。
/* Assembly routine */extern int sum(int *);/* define x[] as global array */int x[2]={0x1234,0x4321};/* define result s as global variable */int s;void main(){s = sum (x); /* return sum product */}(3) 编辑如下汇编文件,取名exp2_sum.asm并保存到c:\ti\myprojects\xxx\Experiment2\exp2a\目录。
* * * * * * * * * * * * * * * * * * * * * * * * * * * * ** exp2_sum.asm SUM subroutine* called by exp2a.c* Input: Array pointer* Output: Return sum result in T0* * * * * * * * * * * * * * * * * * * * * * * * * * * * *.global _sum_summov *AR0+,AC0 ; AC0 = x[1]add *AR0+,AC0 ; AC0 = x[1]+x[2]mov AC0,T0ret ; Return T0.end(4) 编辑如下链接命令文件,取名link.cmd并保存到c:\ti\myprojects\xxx\Experiment2\exp2a\目录。
第五章 DSP的汇编指令..
第五章 TMS320C55x系列DSP的汇编指令
(2) 用户自定义的双指令的并行
这两条指令的并行是通过用户或C编译器定义的。两条指令 同时执行两个操作,用并行符“||”区分并行执行的两条指令。 例:
MPYM *AR1+, *CDP, AC1 ;D单元的一个MAC来完成
||XOR AR2,T1
;A单元的ALU来完成
第五章 TMS320C55x系列DSP的汇编指令
1、高速数字信号处理中常采用汇编语言编程。 2、汇编语言中的两种指令集 (1) 助记符指令集:有助于记忆的符号来表示指令。 (2) 代数指令集:类似于代数表达式,运算关系清楚明了。 注意:DSP的软件开发工具只支持单一的指令形式,不支持助记
符指令和代数指令的混合形式。 3、术语、符号和缩写见P93的表5-1 4、运算符见表5-2
令执行的条件:
TCx(测试/控制标志为1) !TCx(测试/控制标志为0)
TC1&TC2 TC1&!TC2 TC1|TC2 TC1|!TC2 TC1^TC2 TC1^!TC2
!TC1&TC2 !TC1&!TC2 !TC1|TC2 !TC1|!TC2 !TC1^TC2 !TC1^!TC2
第五章 TMS320C55x系列DSP的汇编指令
4、双16比特算术指令: [(1)语法、(2)操作数、(3)状态位] 在D单元中利用其ALU的双16比特模式,同时执行(并行)两个16
比特算术运算,包括加-减、减-加、两个加和两个减运算。
例:
说明: NO:不能并行执行 3:指令的长度为3字节 1:周期为1 X:在X(执行)流水线阶段处理
D – ALU:在D单元ALU执行。 执行结果:AC0=(*AR3)+CARRY+AC1 状态位: Affected by CARRY,C54CM,M40等
汇编语言程序设计的基本方法
01
例2 编写程序,计算(W-(X*Y+Z-100))/W,其中W、X、Y、Z均为16位带符号数,计算结果的商存入AX,余数存入DX。
02
例3 把非压缩十进制数DAT1转换为压缩十进制数
例2编写程序,计算(W-(X*Y+Z-100))/W,其中W、X、Y、Z均为16位带符号数,计算结果的商存入AX,余数存入DX。
通常,编制一个汇编语言源程序应按如下步骤进行:
1
明确任务,确定算法。
2
绘制流程图(包括确定内存单元和分配寄存器)。
3
根据流程图编写汇编语言程序。
4
上机调试程序。
5
程序的基本结构有四种:顺序结构、分支结构、循环结构和子程序结构。
6
5.6 汇编语言程序设计的基本方法
5.6.1 顺序程序设计
顺序结构也称线性结构,其特点是其中的语句或结构被连续执行。 顺序程序是最简单的,也是最基本的一种程序结构。这种结构的程序从开始到结尾一直是顺序执行的,中途没有任何分支。从这种结构的流程图来看,除了有一个起始框,一个终止框外,就是若干执行框,没有判断框。指令指针IP值线形增加,IP=IP+1
条件
N
…
例4用比较指令和条件转移指令实现两路分支的程序段。
两路分支程序设计
例4用比较指令和条件转移指令实现两路分支的程序段。 … MOV AX,M ;假定M和N为有符号数 MOV BX,N CMP AX,BX ;比较 M和N的大小,影响标志位,准备条件 JG NEXT ;M>N时转移,注意若M、N为无符号数时用JA指令 …… ;分支程序2 JMP DONE NEXT: …… ;分支程序1 …… DONE:RET
X+20 (X≥0)
dsp第六章汇编程序
§6.3 宏指令
• 为了简化汇编语言程序的书写,常把一些频繁出现的程序段定义为宏指令
• 当程序需要执行这一段程序段时只要一条宏调用语句 ,减少汇编语言程序的重复书写
• TMS320系列DSP汇编器支持宏例指1 令
(1)宏定义
宏定义:
(2)宏调用 举例
parms
.macro x, y, z
LACC
x
• 这类伪指令使汇编器根据表达式 求值结果的真或假来汇编代码的某 些段。
• 伪指令分为8类。 1)段定义伪指令 2)初始化常数伪指令 3)段程序计数器排列伪指令 4)输出列表格式伪指令 5)引用其他文件伪指令 6)条件汇编伪指令 7)汇编时的符号伪指令 8)其他伪指令
• 该类伪指令使定义的符号名等同于 常数值或字符串
例 .set .equ .struct .endstruct
• 常用的伪指令
• 定义标题伪指令 .title 句法: .title “字符串” 例: .title “example
• 终止源程序汇编伪指令 .end
• 赋值伪指令 .set 和 .equ 句法: 符号 .set 数值 符号 .equ 数值 例: DAC0 .set 0001h
• 伪指令分为8类。 1)段定义伪指令 2)初始化常数伪指令 3)段程序计数器排列伪指令 4)输出列表格式伪指令 5)引用其他文件伪指令 6)条件汇编伪指令 7)汇编时的符号伪指令 8)其他伪指令
•该类伪指令为文件提供信息或提供这 些文件的信息。
• 伪指令分为8类。 1)段定义伪指令 2)初始化常数伪指令 3)段程序计数器排列伪指令 4)输出列表格式伪指令 5)引用其他文件伪指令 6)条件汇编伪指令 7)汇编时的符号伪指令 8)其他伪指令
DSP技术9(软件结构)
绝对地址寻址
端口地址(PA)寻址 用一个符号或常数来确定I/O口地址
PORTR PA,Smem PORTW Smem,PA
绝对地址寻址
*(lk)寻址 用一个符号或一个常数来确定数据存储器中 的一个地址 例: LD *(BUFFER),A 把地址为BUFFER的数据单元中的数据装到 AccA中
累加器寻址
用累加器中的数作为一个地址,可用来对存 放数据的程序存储器寻址:
READA WRITA Smem Smem
READA,把累加器A所确定的程序存储器单 元中的一个字,传送到数据存储器单元 Smem中。 WRITA,把数据单元Smem中的一个字, 传送到累加器A确定的程序存储器单元。
存储器映射寄存器(MMR)寻址
DSP的软件结构
TMS320C54X的软件结构
寻址方式:立即数寻址
短立即数寻址(单字指令) 在指令字中包括立即操作数 RPT #99;将下一条指令循环100次 LD #0h,DP;将0装入数据页指针 ADD #0ffh,A;将0ffh加到AccA
寻址方式:立即数寻址
寻址方式:立即数寻址
长立即数寻址 指令字的后一个字是立即数(双字指令) ADD #1234h,A;将#1234h加给AccA
循环寻址
许多算法,如卷积,相关和FIR滤波等,都 需要在存储器中实现一个循环缓冲器。在这 些算法中,一个循环缓冲器就是一个包换了 最近的数据的滑动窗口。当新的数据来到时, 缓冲器就会覆盖最早的数据。循环缓冲器实 现的关键是循环寻址的实现。C54x间接寻 址中提供了循环寻址方式,以%表示。
循环寻址
寻址方式:间接寻址
寻址方式:间接寻址
寻址方式:间接寻址
将该AR的内容加1或减1,再寻址(循环常 用) 将该AR的内容加上或减去AR0的内容,再 寻址。 将该AR的内容逆向进位加上或减去AR0的 的内容,再寻址。
DSP常用汇编语言指令简介
南航自动化学院DSP技术应用实验 室
6. I/O与存储器等指令举例
z Example1:IN 7,1000h ;(DP=6)从地址为1000H 的外部端口读入数据,盛放在地址为307h的数 据单元内。类似的指令还有:OUT。
LAR AR0, #60h
;AR0内容赋值为60h
ZAC
; 累加器ACC清零
loop: ADD *+, AR1 ;把当前工作寄存器AR0指向 的内存单元数值加到ACC,然后AR0内容加1,当前工 作寄存器指针指向AR1
BANZ loop, *-AR0 ;判断AR0是否为0,否则程序 转到loop,同时AR0的内容减1。
3. TREG(暂存单元指令),PREG(乘积单元指 令),multiply instructions (乘积指令)
4. Branch instructions (程序分支转移指令) 5. Control instructions (控制指令) 6. I/O and memory instruction(I/O和存储器指令)
室
2. 工作寄存器等指令举例
z Example1:MAR *+,AR1;把当前工作寄 存器的内容加1,然后再改变工作寄存器为 AR1。
z Example2:LAR AR4,#8123h;把AR4的 值改变为立即数。
LAR AR0,16;(DP=6)把 地址=310H的内存单元内容装入AR0。
z Example3:SAR AR0,*+;(如果当前工 作寄存器=AR1)把AR0的内容拷贝到AR1 指向的内存单元。 南航自动化学院DSP技术应用实验
DSP汇编语言编写方法及程序分析
PA0 PA1 STACK
table:
.title "LOCA.asm" .mmregs .set 0 .set 1 .usect "STACK",10h
.bss y,1 .bss x,1 .def start .data .word 0,128,0,128,0,32,0,32,0,128,0 .word 128,0,32,0,32,0,0,0,0,0 .word 4,0,4,0,0,0,0,0,4,0 .word 4,0,0,0,0,0,0,0,0,0 .word 0,0,0,0,0,0,0,0,0,0 .word 0,0,2,0,2,0,0,0,0,0 .word 2,0,2,0,0,0,0,0,0,0 .word 0,0,0,0,0,0,0,0,0,0 .word 0,0,0,0,0,0,0,0,0,0 .word 0,0,0,0,0,0,0,0,0,0 .word 16,0,16,0,0,0,0,0,16,0 .word 16,0,0,0,0,0,1,0,1,0 .word 0,0,0,0,1,0,1,0,0,0 .word 0,0,0,0,0,0,0,0,0,0 .word 0,0,0,0,0,0,0,0,0,0 .word 0,0,0,0,0,0,0,0,0,0 .word 0,0,0,0,0,0,0,0,0,0 .word 0,0,0,0,0,0,0,0,0,0 .word 0,0,0,0,0,0,0,0,0,0 .word 0,0,0,0,0,0,0,0,0,0 .word 0,0,0,0,0,0,0,0,0,0 .word 0,0,0,0,0,0,0,0,0,0 .word 0,0,0,0,0,0,0,0,8,0 .word 8,0,0,0,0,0,8,0,8,0 .word 64,0,64,0,0,0,0,0,64,0 .word 64,0,0,0,0,0,0,0,0,0
第二讲:DSP体系结构和汇编语言1new
Good • The hardware solves everything: Hardware detects potential parallelism between instructions; Hardware tries to issue as many instructions as possible in parallel. Hardware solves register renaming. • Binary compatibility: If functional units are added in a new version of the architecture or some other improvements have been made to the architecture (without changing the instruction sets), old programs can benefit from the additional potential of parallelism. Bad • Very complex: Much hardware is needed for run-time detection. There is a limit in how far we can go with this technique.Power consumption can be very large! • The window of execution is limited Þ this limits the capacity to detect potentially parallel instructions
TigerSHARC Specifications
• Static Superscalar architecture which supports 1, 8, 16
第9讲 DSP的C及汇编语言
OnFileLoaded()函数
GEL文件—回调函数
该回调函数在加载program/symbol(.out)文件之后执行。 可以建立调试源搜索路径(在没有CCS工程文件的时候), 设定断点和探针,完成软件的复位和重启。
GEL文件—回调函数
OnReset()函数
当目标处理器复位后该函数被调用。如果你需要每次重
无论用哪种方法定义中断服务函数,都须注意以下问题:
(1)中断处理函数必须是void类型,而且不能有任何
输入参数。
(2)进入中断服务函数,编译器将自动产生程序保护 所有必要的寄存器,并在中断服务函数结束时恢复运行 环境。 (3)进入中断服务函数,编译器只保护与运行上下文 相关的寄存器,而不是保护所有的寄存器。中断服务函 数可以任意修改不被保护的寄存器,如外设控制寄存器 等。 (4)要注意IMR、INTM等中断控制量的设置。通常 进入中断服务程序要设置相应寄存器将中断屏蔽,退出 中断服务程序时再打开,避免中断嵌套。
需要注意的问题
(2)指针类型转换是必须的,关系到接收分配 好的内存块的地址可以向前看多少字节。 如果不做指针类型转换会怎么样? void * 指针存在的意义。
需要注意的问题
(3)内存块大小的可移植性问题
分配一个整型变量数组应使用: 数组元素个数 * sizeof(int) 确定内存块的大小 问题:sizeof和strlen函数的区别
/*进行CCS存储器映射,告知目标处理器哪些空间可以访问,哪些不可以访问。*/
Setup_Memory_Map( ); } OnTargetConnect( )//对处理器进行最小初始化 { Setup_Cache( ); //设置缓存L1P,L1D,L2 Setup_Pin_Mux( ); // 设置管脚 Setup_Psc_All_On( ); // 设置psc Setup_PLL0_594_MHz_OscIn( ); // 设置dsp主频[DSP @ 594 MHz][Core 1.20V] Setup_PLL1_DDR_135_MHz_OscIn();//设置ddr时钟频率 Setup_Aemif_8Bit_Bus( ); // 设置Async-EMIF[8-bit bus] }
DSP汇编语言程序开发
储器之间的关系
外部符号
2.COFF文件中的符号
在一个模块中定义的 定义,可在另一个模 块中引用的符号.
用于处理符号 的汇编命令
.def:在当前模块中定义,并 可在别的模块中使用的符号. .ref:在当前模块中使用,但 在别的模块中定义的符号. .global:可以是上面的随便 哪一种情况.
即.out文件
1.COFF文件中的段
COFF文件种类
COFF0 COFF1 COFF2
不同种类的区别
主题格式不相同 数据部分是相同
C54x 汇 编 器 和 C 编 译 器 建 立 的 是 COFF2 文 件.C54x能够读/写所有形式的COFF文件,缺省值下 链接器生成的是COFF2文件,用链接器-vn选项可 以选择不同形式的COFF文件.
汇编命令 助记符指令 宏命令
将源程序汇编成可重定位的目标文件.obj文件; 如果需要,可以生成一个列表文件.lst文件; 将程序代码分段,每段的目标代码都有一个SPC管理; 定义和引用全局符号,可在列表后附加交叉引用表; 对条件程序块进行汇编; 支持宏功能,允许定义宏命令.
1.运行汇编程序
汇编器是名为asm500.exe的可执行程序
. 8,6,4,2
源文件的每一行都会在列表文件 中生成一行.包括行号、段程序 ;计为这数8器个单SP元C赋的初数值值、汇编后的目
标代码、源程序语句.
000007 0002
14 000000
.text
;定义文本代码段
15 000000 7728 _c_int00 STM 0,SWWSR ;软件等待状态寄存器置0,不设等待
;结束全部程序
4.宏定义和宏调用
DSP汇编语言程序设计入门
CCS的使用与汇编语言程序设计入门一、实验目的1、了解DSP开发系统的组成和结构;2、熟悉DSP 集成开发环境;3、掌握TMS320C54X程序空间的分配;4、掌握TMS320C54X数据空间的分配;5、掌握操作TMS320C54X存储器的相关指令;6、掌握TMS320C54X相关运算的指令;7、TMS320C54X相关程序流程控制类的指令;8、熟悉DSP开发软件的使用;二、实验内容设计一汇编程序,实现从一组所给的数的累加,并将结果送数码管显示。
三、实验设备硬件:DSP实验与开发系统、JTAG仿真器、PC机Pentumn100以上。
软件:PC机操作系统win98或以上、CCS集成开发环境、仿真器驱动程序。
四、实验步骤1)连接好 DSP开发系统,运行CCS软件;2)用汇编语言设计一程序及相应的链接命令文件(.CMD文件):, 或输入参考程序及链接命令文件(.CMD文件)(附后),使一组所给的数累加,并将结果送数码管显示。
3)新建一个工程;4)向工程添加汇编程序及链接命令文件(.CMD文件):;5)编译、链接工程工程中的所有文件,生成out文件;6)装载上述out文件,并运行;五、程序汇编语言程序:.title "mac.asm".mmregs.def startSIZE .set 100stack .usect "STK", SIZESEGSEL .set 0001b ;数码管使能控制数据,此处第0数码管选通SEGSELPORT .set 0h ;数码管使能控制口地址SEGPORT .set 1h ;数码管数据口地址.bss SEG_DA TA,10 ;用于存放从SEG_V ALUE装载进来的数码管编码数据.bss x,5 ;用于存放从table0装载进来输入数据.bss z,1 ;用于存放输出数据(计算结果).datatable0: .word 1,2,3,4,5 ;待计算的一组输入数据;以下用于存放数码管编码数据,分别控制数码管显示0~9SEG_V ALUE .word 077h,014h,0b3h,0b6h,0d4h,0e6h,0e7h,034h,0f7h,0f6H.textstart:stm #stack+SIZE, SP;;;;;;;;;C5402 初始化;;;;;;;;;;;;;;;stm #2b40h,ST1;STM #2B40H,ST1;stm #1e00h,ST0;stm #02024h,PMST ;IPTR=0010,0000,0 ->RESET=2000Hstm #0h,SWWSRstm #04007h,CLKMD ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;stm #SEG_DA TA, AR3 ;将数码管编码数据从SEG_V ALUE装入SEG_DATA rpt #9mvpd SEG_V ALUE, *AR3+stm #x,AR1 ;从空间table0装载输入数据进入空间xrpt #4mvpd table0,*AR1+call sum ;调用累加子程序ld #SEGSEL,B ;第0个数码管选通portw *(0bH), SEGSELPORTstlm A,AR0 ;累加子程序返回的计算结果转入AR0stm #SEG_DA TA,AR7 ;数码管编码数据区首地址送AR7nopmar *AR7+0 ;首地址(AR7中内容)+偏移地址(AR0中内容)nopportw *AR7,SEGPOR T ;让数码管显示计算结果end: b endsum: stm #x,AR3 ;累加子程序rptz A,#4add *AR3, Astm #z,AR4stl A,*AR4ret.end链接命令文件(.CMD文件):mac.obj-o mac.out-m mac.map-e startMEMORY{PAGE 0:EPROM :org=02000h,len=200hPAGE 1:SPRAM :org=0060h,len=001fhDARAM :org=0080h,len=100h}SECTIONS{.text :>EPROM PAGE 0.data :>EPROM PAGE 0.bss :>SPRAM P AGE 1.stack :>DARAM PAGE 1}六、实验现象与结果:运行程序后, 用CCS观察相应的存储单元(参考程序中用z), 该单元存储了所给一组数的累加值, 且与数码管显示结果一致。
轻松学会DSP——C程序编写和编译课件
根据个人习惯选择
开发者可以根据自己的习惯和喜好 选择适合自己的开发环境,比如习 惯使用CCS的开发者可以选择CCS 作为开发环境。
根据开发成本选择
开发者还需要考虑开发环境的成本 ,比如购买IDE的费用、学习成本等 。在选择开发环境时,需要根据实 际情况进行综合考虑。
05
DSP程序调试
BIG DATA EMPOWERS TO CREATE A NEW
FFT算法分类
FFT算法有多种实现方式,如基于 蝶形运算的Cooley-Tukey FFT算 法和基于分治思想的FFT算法等。 Cooley-Tukey算法是最常用的 FFT算法,其基本思想是将一个长 度为$N$的DFT分解为多个长度 为$N/2$的Hale Waihona Puke FT,递归计算直到 长度为2的DFT。
FFT算法实现过程
BIG DATA EMPOWERS TO CREATE A NEW ERA
轻松学会DSP——C程序编
写和编译课件
• DSP基础概念 • DSP编程语言 • DSP编译过程 • DSP开发环境 • DSP程序调试 • DSP应用实例
目录
CONTENTS
01
DSP基础概念
BIG DATA EMPOWERS TO CREATE A NEW
数字控制系统有多种类型,如开环控 制系统和闭环控制系统等。开环控制 系统结构简单,但控制精度和稳定性 较差;闭环控制系统具有反馈环节, 能够提高控制精度和稳定性。
数字控制系统的设计方法包括状态空 间法、根轨迹法和频域法等。状态空 间法能够得到系统的全部状态信息, 但计算量大;根轨迹法能够得到系统 的极点位置,但计算精度较低;频域 法能够得到系统的频率响应,但无法 得到系统的全部状态信息。
dsp实验二-编写一个以C语言为基础的DSP程序
实验二:编写一个以C语言为基础的DSP程序一、实验目的1.学习C语言编制程序:了解C语言程序设计方法和组成部分。
2.学习编制连接命令文件,用来控制代码的连接。
3.学会建立和改变map文件,以及利用它观察DSP内存使用情况。
4.进一步熟悉CCS调试程序。
二、实验设备1.PC机一台:操作系统为Windows2000或WindowsXP。
2.ICETEK-F2812-EDU实验箱一台。
三、实验原理1.C语言程序(1)CCS支持使用标准C语言应用程序。
当使用标准C 语言编制的程序时,其源程序文件名的后缀应为.c(如:volume.c)。
(2)CCS 在编译标准C 语言程序时,首先将其编译成相应汇编语言程序,再进一步编译成目标DSP 的可执行代码。
最后生成的是coff 格式的可下载到DSP 中运行的文件,其文件名后缀为.out。
2.命令文件的作用命令文件(文件名后缀为cmd)为链接程序提供程序和数据在具体DSP 硬件中的位置分配信息。
通过编制命令文件,我们可以将某些特定的数据或程序按照我们的意图放置在DSP 所管理的内存中。
命令文件也为链接程序提供了DSP 外扩存储器的描述。
在程序中使用CMD 文件描述硬件存储区,可以只说明使用部分,但只要是说明的,必须和硬件匹配,也就是只要说明的存储区必须是存在的和可用的。
3.内存映射(map)文件的作用一般地,开发的DSP 程序在调试好后,要固化到系统的ROM 中。
为了更精确地使用ROM空间,我们就需要知道程序的大小和位置,通过建立目标程序的map 文件可以了解DSP 代码的确切信息。
当需要更改程序和数据的大小和位置时,就要适当修改cmd 文件和源程序,再重新生成map 文件来观察结果。
另外,通过观察map 文件,可以掌握DSP 存储器的使用和利用情况,以便进行存储器方面的优化工作。
四、实验步骤1.实验准备:设置软件仿真模式。
2.建立工程文件:新建工程文件设置如图2.1。
DSP汇编语言程序设计
TMS320C54x汇编器的优先级使用与C语言类似, 优先级高的运算先执行。 表4-1给出了表达式中可用的 运算符及优先级。
表4-1 表达式的运算符及优先级
符号 +、−、~ *、/、% <<、>> +、− <、<=、>、>= !=、= & ^ |
若B为… 绝对 外部 可重新定位 绝对 可重新定位 外部 绝对 可重新定位 外部
则A+B为… 绝对 外部 可重新定位 可重新定位 非法 非法 外部 非法 非法
则A−B为… 绝对 非法 非法 可重新定位 绝对 非法 外部 非法 非法
4.1.3 TMS320C54x伪指令 TMS320C54x伪指令给程序提供数据、控制汇编过程。具体
设置16位无符号整型量 设置16位带符号整型量 为未初始化的变量保留存储空间
.sect “段名”[,段起点]
建立包含代码和数据的自定义段
符号 .usect “段名” ,字数
为未初始化的变量保留存储空间的自定义段
.def 变量1[,…,变量n]
在当前模块中定义,并可在别的模块中使用
.ref 变量1[,…,变量n]
4.2.2 顺序结构程序 顺序结构是最基本、最简单的程序结构形式,程序
中的语句或结构被连续执行。
【例1】 试编制程序,求出下列公式中z的值。 z=(x+y)×8-w 源程序编制如下:
************************************************
* ex41.asm z=(x+y)*8-w
在当前模块中使用,但在别的模块中定义
DSP编程技巧(共27讲)
了在编译程序时 CPU 的模式。补充一点是,cl2000 的帮助里看到的选项都是很长的名字,在 CCS 里面为了书写方
便(因为选项框就那么点面积啊),一般用别名来代替;没有别名的则直接使用选项名字。
处理器选项
别名
含义
--silicon_version=28 -v28
为 C28x 架构的 DSP 产生目标文件;不选择的话模式为 C27x 模式,也
4.归档器 archiver:也可以叫压缩器,看一下我们常用的压缩软件 winrar 的全称 winrar archiver 就不难 理解了。
5.实时支持库:包括标准 C 和 C++的运行支持函数、编译器公用程序函数、浮点运算函数和 C 编译器支持的 I/O 函数。
6.十六进制转换程序:把编译、链接等步骤生成的可执行文件,转换为十六进制文件,例如.HEX 格式,然后 可以烧写到 EEPROM、FLASH 等外部存储器之中。
具体说来,编译器的选项有多大 20 个大类,超过一百个具体的选项。当然这些选项是有轻重之分的,有的是
必须用到的,例如支持一下 FPU 等功能;有的则是不常接触的,例如 MISRA 这样的汽车工业软件可靠性检查,只有
在对软件进行标准化时才会用到。所以我们首先看一下最常用的选项,例如处理器的选项,它们的意义在于定义
2.汇编器的作用是将汇编语言代码转换为机器语言(目标文件),这里的汇编代码包括前面由 C/C++生成的汇 编代码和我们直接编写的汇编代码。
3.链接器是作用是把所有的库文件、目标文件等链接成为一个可执行的目标文件,其中包含程序的机器代码 和数据,以及其他用来链接和加载该程序所需的信息(在 TI DSP 上是 COFF 格式,通俗地讲就是.out 二进制文件), 同时根据内存地址的分配对各目标文件进行重定位,并解析外部参考,例如在一个源程序里引用另一个源程序中 定义的变量就可以理解为外部参考,假如一个目标文件引用了一个未定义的符号 symbol,则链接器搜索其他目标 文件中定义的全局符号,找到匹配的符号修补指令。否则报告一个错误;所以有时候编译所有程序完成在链接的 时候会提示 xxx symbol 为定义,说明对应的文件没有加到工程里面。
汇编语言编程的基本方法
操作说明
dst=Xmem<<16 dst2=dst2+T*Ymem
ST src, Yme ‖LD Xmem, dst
Ymem=src>>(16-ASM) dst=Xmem<<16
ST src, Ymem ‖MAC[R] Xmem, dst
Ymem=src>>(16-ASM) dst=dst+T*Xmem
低32 位减
DST B,@z3
;z3z2=w3w2+x3x2+C-y3y2-C’
高32
由于没有长字带进(借)位加/减法指令,所以上述程序中只能用16位位带减进
(借)位指令ADDC和SUBB。
20
8. 32位乘法运算
例5-12 编写计算W64=X32*Y32的程序段。 32位乘法算式如下:
x1 x0
18
7.64位加法和减法运算
例5-11 编写计算Z64=W64+X64-Y64的程序段。 这里的W、X、Y和结果Z都是64位数,它们都由两个32位的长字组成。利用长
字指令可以完成64位数的加/减法。
w3 w2
w1 w0 (W64)
+ x3 x2 C x1 x0 (X64) 低32位相加产生进位C
- y3 y2 C’ y1 y0 (Y64) 低32位相减产生借位C’
9
4.双操作数乘法
用间接寻址方式获得操作数,且
特
辅助寄存器只用AR2~AR5;
点
占用程序空间小;
运行速度快。
20
例5-8 编制求解 y aixi 的程序。 i1
利用双操作数指令可以节省机器周期。迭代次数越
多,节省的机器周期数也越多。本例中,在每次循环
汇编语言指令
29.06.2021
精选版课件ppt
16
第四章 DSP汇编语言基础
DRSUB Lmem,src ; if C16=0, src=Lmem-src ;if C16=1, ; src(39-16)=Lmem(31-16)-src(31-16) ; src(15-0)= Lmem(15-0)-src(15-0)
ADD Smem[,SHIFT],src[,dst];dst=src+Smem<<SHIFT
ADD Xmem,SHFT,src; src=src+Xmem<<SHFT
ADD Xmem,Ymem,dst; dst=Xmem<<16+Ymem<<16
ADD #lk[,SHFT],src[,dst];dst=src+#lk<<SHFT
ST0中累加器A的溢出标志; ST0中累加器B的溢出标志; 目的累加器 (A or B)的溢出标志; 对应目的累加器 (A or B)的溢出标志; 源累加器 (A or B)的溢出标志; ST1中的溢出模式位; 16位端口立即数地址 (0 PA 65 535); 程序地址寄存器; 程序计数器; 16位立即数程序存储器地址 (0 pmad 65 535); 程序存储器操作数; 处理器模式状态寄存器;
EAB E可执行 地址总线;
EAR EAB 地址寄存器;
extpmad 23位立即数程序存储器地址;
FRCT ST1中的小数模式位;
hi(A) 累加器A的高位 (31–16)
HM ST1中的保持模式;
IFR 中断屏蔽寄存器;
29.06.2021
精选版课件ppt
4
第四章 DSP汇编语言基础
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
DSP技术及应用 DSP技术及应用
(2)标号 (2)标号
• 标号必须从语句的第1列写起,其后的冒号“:”可 标号必须从语句的第1列写起,其后的冒号“ 任选; 任选; • 标号为任选项,若不使用标号,则语句的第一列必 标号为任选项,若不使用标号, 须是空格、星号或分号; 须是空格、星号或分号; • 标号是由字母、数字以及下划线和美元符号等组成, 标号是由字母、数字以及下划线和美元符号等组成, 2 最多可达32个字符; 32个字符 最多可达32个字符; • 标号分大小写,且第一个字符不能是数字。 标号分大小写,且第一个字符不能是数字。 • 在使用标号时,标号的值是段程序计数器SPC的当 SPC的当 在使用标号时,标号的值是段程序计数器SPC 前值。 前值。
[操作数 操作数] 操作数
;将系数 的地址赋给AR3 将系数a的地址赋给 将系数 的地址赋给
[;注释] ;注释
2
空格 [:] :
空格 空格 [助记符 可以是助记符指令、汇编指 助记符]可以是助记符指令、 助记符
令、宏指令和宏调用命令。 宏指令和宏调用命令。 供本程序的其它部分或其 ]中的内 它程序调用。 它程序调用。标号是任选 [ ]中的内 项,标号后面可以加也可 容为可选 择部分 以不加冒号“ 以不加冒号“:”。 电气与信息工程学院
电气与信息工程学院
DSP技术及应用 DSP技术及应用
乘累加运算
table: .word 1,2,3,4 .word 8,6,4,2 .text STM #0,SWWSR STM #STACK+10h,SP STM #a,AR1 RPT #7 MVPD table,*AR1+ CALL SUM B end
电气与信息工程学院
DSP技术及应用 DSP技术及应用
9.2 堆栈的使用
要点
1.压入数据时,堆栈从高地址向低地址增长。 压入数据时,堆栈从高地址向低地址增长。 压入数据时 2.压栈时指针先减,SP-1,再压入数据; 压栈时指针先减, 压栈时指针先减 ,再压入数据;
2
3.出栈时,先弹出数据后,再SP+1。 出栈时,先弹出数据后, 出栈时 。 4.如要用堆栈,必须先设置,后使用。 如要用堆栈,必须先设置,后使用。 如要用堆栈
; 变量初始化
start:
2
; 插入0个等待状态 插入0 ; 设置堆栈指针 ; AR1指向a AR1指向 指向a ; 移动8个数据 移动8 ; 从程序存储器到数据存储器 ; 调用SUM子程序 调用SUM SUM子程序
end:
电气与信息工程学院
DSP技术及应用 DSP技术及应用
乘累加运算
SUM:
;子程序执行 STM #a, AR3 STM #x, AR4 RPTZ A, #3 MAC *AR3+,*AR4+,A STL A,@ y RET .end
• 某些汇编器要求有效定义的表达式作为操作 数。操作数是汇编时间常数或链接时可重定 位的符号。 位的符号。 • 有效定义的表达式是指表达式中的符号或汇 2 编时间常数在表达式之前就已经被定义。 编时间常数在表达式之前就已经被定义。 • 有效定义的表达式的计算必须是绝对的。 有效定义的表达式的计算必须是绝对的。
2
• C54x是16位的定点芯片,32位数据必须利用2个单元, 位的定点芯片, 位数据必须利用2 54x 16位的定点芯片 32位数据必须利用 个单元, 而在指令中只需给出1个单元的地址,并且指令中给 而在指令中只需给出1 个单元的地址,并且 指令中给 出的地址的数据总为高16位操作数, 16位操作数 出的地址的数据总为高16位操作数,而这时指令中的 地址为偶地址还是奇地址,有着不同的排列方法。 地址为偶地址还是奇地址,有着不同的排列方法。
2
•
例如:将常数值18赋给符号bei_hua。 赋给符号bei_hua。 例如:将常数值18赋给符号 bei_hua LD .set 18 # bei_hua,A bei_hua,
电气与信息工程学院
DSP技术及应用 DSP技术及应用
9.1.3 汇编源程序中的符号
• 汇编程序中的符号用于标号、常数和替代字符。 汇编程序中的符号用于标号、常数和替代字符。 • 由字母、数字以及下划线和美元符号(A~Z,a~z,0 由字母、数字以及下划线和美元符号(A~Z,a~z, ~9,_和$)等组成; 等组成; • 符号名最多可长达200个字符; 符号名最多可长达200个字符; 个字符 • 2 在符号中 , 第 1 位不能是数字 , 并且符号中不能含空 在符号中, 位不能是数字, 格。 • 作为标号的符号代表在程序中对应位置的符号地址。 作为标号的符号代表在程序中对应位置的符号地址。 • 符号也可被设置成常数值。为了提高程序的可读性, 符号也可被设置成常数值。为了提高程序的可读性, 可以用有意义的名称来代表一些重要的常数值。 可以用有意义的名称来代表一些重要的常数值。
电气与信息工程学院
DSP技术及应用 DSP技术及应用
堆栈的使用
堆栈区的大小可以按照以下步骤来确定: 堆栈区的大小可以按照以下步骤来确定:
① 先开辟一个较大的堆栈区,用已知数充填。 先开辟一个较大的堆栈区,用已知数充填。 ② 运行程序,执行所有堆栈操作。 运行程序,执行所有堆栈操作。 ③ 检查堆栈中的数值。 检查堆栈中的数值。 2
八进制
十进制
2
十六进制
浮点数
字符
字符串
电气与信息工程学院
DSP技术及应用 DSP技术及应用
汇编时间常数
• 在程序中使用 . set 伪指令给一个符号赋值 , 该符 在程序中使用. set伪指令给一个符号赋值 伪指令给一个符号赋值, 号就成为一个汇编时间常数,等效于一个常数。 号就成为一个汇编时间常数,等效于一个常数。 • 为了使用表达式中的常数,赋给符号的必须是绝 为了使用表达式中的常数, 对值。 对值。
2
电气与信息工程学院
DSP技术及应用 DSP技术及应用
(2)长字运算
• 长字运算的操作数是长操作数(32位),教材中列举 长字运算的操作数是长操作数(32位 了几个长字指令,其实与单字指令区别不大, 了几个长字指令,其实与单字指令区别不大,只是在 指令前都带D DST外都是 指令。 外都是1 指令前都带D,除DST外都是1T指令。这是因为在单个 周期内同时利用C总线和D总线,得到32位操作数,而 周期内同时利用C总线和D总线,得到32位操作数, 32位操作数 写总线只有E总线, DST需要 需要2 写总线只有E总线,故DST需要2T。
电气与信息工程学院
DSP技术及应用 DSP技术及应用
堆栈的使用
设计一存储空间为100个单元的堆栈。 个单元的堆栈。 例: 设计一存储空间为 个单元的堆栈
;设置堆栈空间的 大小为100 ;大小为 stack .usect “STK”, size ;设置堆栈段的首地址 ;和堆栈空间 STM #stack+size, SP ;将栈底地址指针送 , 将栈底地址指针送SP, 2 ; 对其初始化 设置好堆栈后,就可以使用堆栈了, 设置好堆栈后,就可以使用堆栈了,如: CALL pmad ;(SP)-1→SP,(PC)+2→TOS, (SP)-1→SP,(PC)+2→TOS, ;pmad→PC RET ;(TOS)→PC,(SP)+1→SP size .set 100
DSP技术及应用 DSP技术及应用
(1)语句的书写规则
①所有语句必须以标号、空格、星号或分号(*或;)开始; 所有语句必须以标号、空格、星号或分号(* (*或 开始; 标号是可选项,若使用标号, ② 标号是可选项,若使用标号, 则标号必须从第一列开 始; 所有包含有汇编伪指令的语句必须在一行完成指定; ③所有包含有汇编伪指令的语句必须在一行完成指定; 各部分之间必须用空格分开,Tab字符与空格等效 字符与空格等效; ④各部分之间必须用空格分开,Tab字符与空格等效; 程序中注释是可选项。如果注释在第一列开始时, ⑤2 程序中注释是可选项。 如果注释在第一列开始时, 前 面必须标上星号或分号, 面必须标上星号或分号,在其他列开始的注释前面必 须以分号开头; 须以分号开头; 如果源程序很长,需要书写若干行, ⑥ 如果源程序很长, 需要书写若干行, 可以在前一行用 反斜杠字符( 结束, 反斜杠字符 ( \ ) 结束 , 余下部分接着在下一行继续 书写。 书写。
2
电气与信息工程学院
DSP技术及应用 DSP技术及应用
9.1.1 汇编语言句法格式
汇编语言程序以.asm为扩展名,可以用任意的编辑器编写源文件。 汇编语言程序以.asm为扩展名,可以用任意的编辑器编写源文件。 为扩展名
例:
SUM: STM
[标号 标号] 标号 [助记符 助记符] 助记符
#a,AR3
AR4→ AR4→
数据RAM 数据RAM
DBF8 DBF8 DBF8 …
SP→ SP→
用过的堆栈区就是实际需要 的堆栈空间。 的堆栈空间。
SP→ SP→
7AB3 … …
DBF8 0013 DBF8 6B14 DBF8
用过的 栈区
电气与信息工程学院
DSP技术及应用 DSP技术及应用
9.3 算术运算程序
(1)乘累加运算 (1) 乘累加运算 例:计算 y = ∑ ai xi
i =1 4
******************************************** * example.asm * ******************************************** .title “example.asm” 2 .mmregs stack .usect “STACK”,10h .bss a,4 .bss x,4 .bss y,1 .def start .data
电气与信息工程学院