DSP技术9(软件结构)_第1页
DSP技术9(软件结构)_第2页
DSP技术9(软件结构)_第3页
DSP技术9(软件结构)_第4页
DSP技术9(软件结构)_第5页
已阅读5页,还剩86页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、DSP的软件结构TMS320C54X的软件结构寻址方式:立即数寻址短立即数寻址(单字指令)在指令字中包括立即操作数RPT #99;将下一条指令循环100次LD #0h,DP;将0装入数据页指针ADD #0ffh,A;将0ffh加到AccA寻址方式:立即数寻址寻址方式:立即数寻址长立即数寻址指令字的后一个字是立即数(双字指令)ADD #1234h,A;将#1234h加给AccA绝对地址寻址数据存储器(dmad)寻址用一个符号或一个数来确定数据空间中的一个地址例:MVKD sample,*AR5sample 所代表的就是一个dmad 绝对地址寻址程序存储器地址(pmad)寻址用一个符号或一个数来确

2、定程序地址空间中的一个地址例:MVKD table,*AR5table所代表的就是一个pmad绝对地址寻址端口地址(PA)寻址用一个符号或常数来确定I/O口地址PORTR PA,SmemPORTW Smem,PA绝对地址寻址*(lk)寻址用一个符号或一个常数来确定数据存储器中的一个地址例:LD *(BUFFER),A把地址为BUFFER的数据单元中的数据装到AccA中累加器寻址用累加器中的数作为一个地址,可用来对存放数据的程序存储器寻址:READA SmemWRITA SmemREADA,把累加器A所确定的程序存储器单元中的一个字,传送到数据存储器单元Smem中。WRITA,把数据单元Smem

3、中的一个字,传送到累加器A确定的程序存储器单元。存储器映射寄存器(MMR)寻址存储器映射寄存器寻址用来修改存储器映射寄存器而不影响当前数据页指针(DP)或堆栈指针(SP)的值。存储器映射寄存器寻址既可以在直接寻址中使用,又可以在间接寻址中使用。堆栈寻址系统堆栈用来在中断和子程序期间自动存放程序计数器,它也能用来存放额外的数据项或传送数据值。处理器使用一个16-bit的存储器映射寄存器堆栈指针来对堆栈寻址,他总是指向存放在堆栈中的最后一个元素。寻址方式:直接寻址TMS320C54x的数据存储器分为512页,每页128字,设置一个数据页指针DP(data Pointer),用9-bit指向一个数据

4、页,再加上一个7-bit的页内偏移地址,形成16-bit的数据地址LD #4,DP;指向页4(0200h-027fh)ADD 9h,A;将数据页4中的地址9h的数据加给AccA寻址方式:直接寻址寻址方式:间接寻址8个辅助寄存器(AR0-AR7),由一个辅助寄存器指针(ARP 3-bit)来指定辅助寄存器算术单元(ARAU)做16-bit无符号数运算,决定一个新的地址,装入辅助寄存器中的一个AR0-AR7的内容相当灵活,可以装入立即数,加上立即数,减去立即数;也可以从数据存储器装入地址;还可以作以下变址寻址:寻址方式:间接寻址寻址方式:间接寻址寻址方式:间接寻址将该AR的内容加1或减1,再寻址(

5、循环常用)将该AR的内容加上或减去AR0的内容,再寻址。将该AR的内容逆向进位加上或减去AR0的的内容,再寻址。寻址方式:间接寻址ADD,8,A;将当前辅助寄存器所指的地址里的数据,左移-bit后加给AccAADD *+,8,A,AR4;数据左移,加给AccA后,当前辅助寄存器加1,选择辅助寄存器AR4寻址方式:间接寻址ADD *0+,8,A;执行加法后,将AR0的值加给当前辅助寄存器ADD *BR0+,8,A;执行加法后,将AR0的值加给当前辅助寄存器,但反向进位正向进位与反向进位 正向进位 反向进位 100 100 + 100 + 100 1000 010位倒序寻址AR0=100AR1=0

6、00按AR1寻址后,将AR0加给AR1,反向进位位倒序寻址原序 原地址 位倒序后地址 位倒序0 000 000 01 001 100 42 010 010 23 011 110 64 100 001 15 101 101 56 110 011 37 111 111 7例:.mmregs.bss x,4,1a0 .word 012ha1 .word 321ha2 .word fe11ha3 .word ff03h.sect “program”LD #X,AR1LD #0,A,AR1LD #a0,TMAC *+,ALD #a1,TMAC *+,ALD #a2,TMAC *+,ALD #a3,TMA

7、C *,A循环寻址许多算法,如卷积,相关和FIR滤波等,都需要在存储器中实现一个循环缓冲器。在这些算法中,一个循环缓冲器就是一个包换了最近的数据的滑动窗口。当新的数据来到时,缓冲器就会覆盖最早的数据。循环缓冲器实现的关键是循环寻址的实现。C54x间接寻址中提供了循环寻址方式,以%表示。循环寻址循环缓冲区的参数主要包括:长度寄存器(BK)、有效基地址(EFB)、尾地址(EOB)。其中,BK定义可循环缓冲区的大小R。要求缓冲区地址始于最低N位为零的地址,且R值满足2NR,R值必须要放入BK。例如,一个长度为R=31的循环缓冲区必须开始于最低5位为零的地址(即XXXX XXXX XXX0 0000B

8、),且必须将R值加载到BK寄存器中。循环寻址循环缓冲区的有效基地址(EFB)定义了缓冲区的起始地址,也就是辅助寄存器(ARx)低N位设为0后的值。循环缓冲区的尾地址(EOB)定义了缓冲区的底部地址,它通过用BK的低N位代替ARx的低N位得到。循环缓冲区的指示index就是当前ARx的低N位,步长step就是一次加到辅助寄存器或从辅助寄存器中减去的值。循环寻址循环寻址的算法为: If 0 index + step BK index = index + step Else if index + step BK index = index + step-BK Else if index + step

9、 0 index = index + step + BK循环寻址使用循环寻址时,必须遵循以下三个原则:(1)循环缓冲区的长度R小于2N,且地址从一个低N位为0的地址开始;(2)步长小于或等于循环缓冲区的长度;(3)所使用的辅助寄存器必须指向缓冲区单元。位反转寻址主要用于FFT算法中,这种寻址方式可以大大提高程序的执行速度和存储器的利用效率。使用时,AR0存放的整数值为FFT点数的一半,另一个辅助ARx指向存放数据的单元。位反转寻址将AR0加到辅助寄存器中,地址以位反转方式产生。也就是说,两者相加时,进位是从左向右反向传播的,而不是通过加法中的从右向左传播的。汇编程序语法TMS320的汇编程序包

10、括汇编指令(伪指令:assemble directives)、汇编语言指令(assembly language instructions)、宏指令(macro directives)和注释(comments)。C54的指令既可以是助记符方式,也可以是代数方式助记符方式汇编程序语法label: mnemonic operand list ;comment标号 : 助记符 操作数 ;注释所有语句必须由语句标号、空格、“*”号或“;”号开头。后两种表示都是注释,后面的语句是不执行的,“;”可以出现在该语句行中的任何位置,表示后面的是注释;“*”只能出现在第一列,表示该行全是注释。语句标号不是必须的,

11、如果用,就必须在第一列。语句中的各部分之间,由一个或多个空格分开。注释不是必须的。注释可以从第一列的“*”号或“;”号开头;如果不是从第一列开始的,就必须用“;”开头。语句标号由字母、数字、_、$组成,最多不能超过32个字符,对大小写敏感,第一个字符不能是数字。后跟“:”,但分号不是语句标号的组成部分。助记符助记符不允许从第一列开始,否则被认为是语句标号。助记符可以是机器指令(如ABS,MPYU,SPH等)、伪指令(如.data,.list,.set等)、宏指令(如.macro,.var,.mexit等)和宏调用。操作数操作数可以是常数、符号或表达式。当操作数多于一个时,用逗号区分开。常数二进

12、制数(如01B或01b)八进制数(如10Q或10q)十进制数(如23)十六进制数(如78H或78h)字符常数(如A或b)字符串(如“sample program”)汇编时使用的常数表达式表达式是一个常数、符号、或用算术运算符连接起来的常数或符号,表达式的范围为 -3276832767.指令集符号续表续表续表指令TMS320C54x指令集有近200条指令,按功能分为如下几类:算术运算类指令逻辑运算类指令程序控制类指令装入和存储指令算术运算指令加法指令减法指令乘法指令乘加指令乘减指令双数/双精度指令特殊操作指令加法指令减法指令乘法指令乘加和乘减指令乘加(TMS320C50)MAC dma,pma;

13、程序存储器的值乘以数据存储器的值并累加到Acc(Acc)+ ( shifted P register) Acc(dma) TREG(dma) ( pma, addressed by FPC) P registerModify AR(ARP) and ARP as specified(FPC)+1FPCMAC X0,Y0,A X(R0)+,X0 Y:(R4)+N4,Y0这条指令命令DSP56300将寄存器X0和Y0中的数相乘结果加到Acc A中将寄存器R0所指的X寄存器地址中的值装入寄存器X0将寄存器R4所指的Y寄存器地址中的值装入寄存器Y0R0的值加1寄存器N4的值加给R4逻辑运算指令移位指令

14、测试指令程序控制指令分支指令调用指令中断指令返回指令循环指令堆栈操作指令混合程序控制指令转移指令调用指令中断指令返回指令循环指令堆栈操作指令程序控制指令装入和存储指令一般的装入和存储指令条件存储指令并行装入和存储指令并行装入和乘法指令并行装入和加减乘指令混合装入和存储指令一般的装入指令存储指令并行装入和乘法指令混合装入和存储指令FIRS指令FIRS指令用于线性相位滤波器的处理。一个如右图的8阶线性相位滤波器的输出表达式FIRS *AR2+, *AR3+, COEFFSy=(c0*x0)+(c1*x1)+(c2*x2) + +(c6*x6)+(c7*x7) =c0(x0+x7)+c1(x1+x6

15、)+ c2(x2+x5)+c3(x3+x4)维特比(Viterbi)译码DADST、DSADT、CMPS在信道均衡和解码中经常会使用到Viterbi算法,C54x为此提供了专门的硬件和指令。根据输入信号确定分支似然概率增加量D1/D2,放在T寄存器中,TRN存储器可能信号译码输出。维特比(Viterbi)译码最小均方运算LMS在进行自适应滤波等操作中经常会使用LMS算法,C54x提供的LMS指令方便了编程。如下图所示的自适应滤波器设计中,滤波器系数修正公式为:wk(i+1)=wk(i)+2e(i) x(i)最小均方运算LMS基于LMS的自适应滤波程序STM #-2,BRC ;initializ

16、e the Block repeat counter with MMRLD ERROR,T ;initialize a variable called ERROR to 0RPTBD END_LOOP-1 ;establish last line of loopMPY *AR4,A;delay slot instruction that initializes;accumulator ALMS*AR3,*AR4+0%;2nd delay slot instruction ;loop starts hereSTA,*AR3+ ;save filter coefficient | MPY *AR3

17、,A ;new team calculatedLMS*AR3,*AR4+0% ;LMS instruction for adaptive filter ;A=a+*AR316+215 ;B=B+*AR3 X *AR4 END_LOOP;数据归一化相关指令EXP、NORM归一化一个数是先求其指数,然后把它调整到最大精度格式。实现方法如下:数据块移动MVDD、MVDP、MVPD在C54x系列DSP中,数据与数据存储器、数据与程序存储器之间可以方便的进行数据传输,结合单指令循环可实现数据块移动。如16个系数的移动:数据块移动MVDD、MVDP、MVPD并行指令ST A, *AR4-| MAC *AR

18、5+, B累加器A中的高位数按原定的位数移动后,存入AR4指定的存储单元,AR4中的地址减1;AR5制定的存储器单元中的数与T寄存器中的数相乘,其积加到累加器B中,AR5中的地址加1.伪指令(Assembler Directives)伪指令为程序提供数据,控制汇编过程。所做的工作包括:将代码和数据汇编到指定的位置。在存储器中为未初始化的变量保留存储空间。控制列表方式初始化存储器汇编条件块定义全局变量为汇编器制定可以获得宏的库检查符号调试信息段定义伪指令.bss 在该段中保留若干字.data 汇编已初始化的数据段.sect “section name” 汇编入已命名的段.text 汇编入可执行的

19、代码段初始化常数伪指令.float 初始化一个32-bit的浮点常数.int 初始化一个或多个16-bit的整数.string 初始化一个或多个字符串.word 初始化一个或多个16-bit的整数格式化输出列表的伪指令.list 开始源文件列表.nolist 停止源文件列表.length 设置源文件列表的页长度.title 在列表文件每一页打印文件名 引用其他文件的伪指令.copy/.include 包含其他文件的源语句.global 确认一个或多个全局(外部)符号.mlib 定义宏库条件汇编伪指令.if/.else/.endif 条件汇编代码块.loop/.endloop 循环汇编代码块.b

20、reak 终止循环汇编代码块汇编时的符号.equ/.set 使一个符号等于一个值.end 结束程序宏语言Macro: A user-defined routine that can be used as an instruction.汇编器支持宏语言,使用户可以建立自己的“指令”。当程序要将特定的任务执行若干次时,尤其有用。宏语言可以使用户:定义自己的宏,或重新定义正在执行的宏简化长的或复杂的汇编代码访问由归档器建立的宏库在一个宏内定义条件块和可重复的块在一个宏内操作字符串控制展开列表定义宏在程序中使用宏之前,首先必须定义它。可以通过两种方式来定义:(1)在源文件或.include/.copy文件中定义;(2)在宏库中定义定义宏macname .macro parameter model statements .m

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论