




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
DSP技术9(软件结构)DSP技术9(软件结构)DSP技术9(软件结构)DSP的软件结构TMS320C54X的软件结构寻址方式:立即数寻址短立即数寻址(单字指令)在指令字中包括立即操作数RPT#99;将下一条指令循环100次LD#0h,DP;将0装入数据页指针ADD#0ffh,A;将0ffh加到AccADSP技术9(软件结构)DSP技术9(软件结构)DSP技术91DSP技术9(软件结构)课件2DSP技术9(软件结构)课件3DSP技术9(软件结构)课件4DSP技术9(软件结构)课件5绝对地址寻址数据存储器(dmad)寻址用一个符号或一个数来确定数据空间中的一个地址例:MVKDsample,*AR5sample所代表的就是一个dmad绝对地址寻址数据存储器(dmad)寻址6绝对地址寻址程序存储器地址(pmad)寻址用一个符号或一个数来确定程序地址空间中的一个地址例:MVKDtable,*AR5table所代表的就是一个pmad绝对地址寻址程序存储器地址(pmad)寻址7绝对地址寻址端口地址(PA)寻址用一个符号或常数来确定I/O口地址PORTRPA,SmemPORTWSmem,PA绝对地址寻址端口地址(PA)寻址8绝对地址寻址*(lk)寻址用一个符号或一个常数来确定数据存储器中的一个地址例:LD*(BUFFER),A把地址为BUFFER的数据单元中的数据装到AccA中绝对地址寻址*(lk)寻址9累加器寻址用累加器中的数作为一个地址,可用来对存放数据的程序存储器寻址:READASmemWRITASmemREADA,把累加器A所确定的程序存储器单元中的一个字,传送到数据存储器单元Smem中。WRITA,把数据单元Smem中的一个字,传送到累加器A确定的程序存储器单元。累加器寻址用累加器中的数作为一个地址,可用来对存放数据的程序10存储器映射寄存器(MMR)寻址存储器映射寄存器寻址用来修改存储器映射寄存器而不影响当前数据页指针(DP)或堆栈指针(SP)的值。存储器映射寄存器寻址既可以在直接寻址中使用,又可以在间接寻址中使用。存储器映射寄存器(MMR)寻址存储器映射寄存器寻址用来修改存11堆栈寻址系统堆栈用来在中断和子程序期间自动存放程序计数器,它也能用来存放额外的数据项或传送数据值。处理器使用一个16-bit的存储器映射寄存器——堆栈指针来对堆栈寻址,他总是指向存放在堆栈中的最后一个元素。堆栈寻址系统堆栈用来在中断和子程序期间自动存放程序计数器,它12寻址方式:直接寻址TMS320C54x的数据存储器分为512页,每页128字,设置一个数据页指针DP(dataPointer),用9-bit指向一个数据页,再加上一个7-bit的页内偏移地址,形成16-bit的数据地址LD#4,DP;指向页4(0200h-027fh)ADD9h,A;将数据页4中的地址9h的数据加给AccA寻址方式:直接寻址TMS320C54x的数据存储器分为51213寻址方式:直接寻址寻址方式:直接寻址14寻址方式:间接寻址8个辅助寄存器(AR0-AR7),由一个辅助寄存器指针(ARP3-bit)来指定辅助寄存器算术单元(ARAU)做16-bit无符号数运算,决定一个新的地址,装入辅助寄存器中的一个AR0-AR7的内容相当灵活,可以装入立即数,加上立即数,减去立即数;也可以从数据存储器装入地址;还可以作以下变址寻址:寻址方式:间接寻址8个辅助寄存器(AR0-AR7),由一个辅15寻址方式:间接寻址寻址方式:间接寻址16寻址方式:间接寻址寻址方式:间接寻址17寻址方式:间接寻址将该AR的内容加1或减1,再寻址(循环常用)将该AR的内容加上或减去AR0的内容,再寻址。将该AR的内容逆向进位加上或减去AR0的的内容,再寻址。寻址方式:间接寻址将该AR的内容加1或减1,再寻址(循环常用18寻址方式:间接寻址ADD*,8,A;将当前辅助寄存器所指的地址里的数据,左移8-bit后加给AccAADD*+,8,A,AR4;数据左移,加给AccA后,当前辅助寄存器加1,选择辅助寄存器AR4寻址方式:间接寻址ADD*,8,A;将当前辅助寄存器所指的19寻址方式:间接寻址ADD*0+,8,A;执行加法后,将AR0的值加给当前辅助寄存器ADD*BR0+,8,A;执行加法后,将AR0的值加给当前辅助寄存器,但反向进位寻址方式:间接寻址ADD*0+,8,A;执行加法后,将A20正向进位与反向进位正向进位反向进位100100+100+1001000010正向进位与反向进位正向进位21位倒序寻址AR0=100AR1=000按AR1寻址后,将AR0加给AR1,反向进位位倒序寻址AR0=10022位倒序寻址原序原地址位倒序后地址位倒序0000000010011004201001023011110641000011510110156110011371111117位倒序寻址原序原地址位倒序后地址23例:.mmregs.bssx,4,1a0.word012ha1.word321ha2.wordfe11ha3.wordff03h.sect“program”LD#X,AR1LD#0,A,AR1LD#a0,TMAC*+,ALD#a1,TMAC*+,ALD#a2,TMAC*+,ALD#a3,TMAC*,A例:.mmregsMAC*+,A24循环寻址许多算法,如卷积,相关和FIR滤波等,都需要在存储器中实现一个循环缓冲器。在这些算法中,一个循环缓冲器就是一个包换了最近的数据的滑动窗口。当新的数据来到时,缓冲器就会覆盖最早的数据。循环缓冲器实现的关键是循环寻址的实现。C54x间接寻址中提供了循环寻址方式,以%表示。循环寻址许多算法,如卷积,相关和FIR滤波等,都需要在存储器25循环寻址循环缓冲区的参数主要包括:长度寄存器(BK)、有效基地址(EFB)、尾地址(EOB)。其中,BK定义可循环缓冲区的大小R。要求缓冲区地址始于最低N位为零的地址,且R值满足2N>R,R值必须要放入BK。例如,一个长度为R=31的循环缓冲区必须开始于最低5位为零的地址(即XXXXXXXXXXX00000B),且必须将R值加载到BK寄存器中。循环寻址循环缓冲区的参数主要包括:长度寄存器(BK)、有效基26循环寻址循环缓冲区的有效基地址(EFB)定义了缓冲区的起始地址,也就是辅助寄存器(ARx)低N位设为0后的值。循环缓冲区的尾地址(EOB)定义了缓冲区的底部地址,它通过用BK的低N位代替ARx的低N位得到。循环缓冲区的指示index就是当前ARx的低N位,步长step就是一次加到辅助寄存器或从辅助寄存器中减去的值。循环寻址循环缓冲区的有效基地址(EFB)定义了缓冲区的起始地27循环寻址循环寻址的算法为:If0≤index+step<BKindex=index+stepElseifindex+step≥BKindex=index+step-BKElseifindex+step<0index=index+step+BK循环寻址循环寻址的算法为:28循环寻址使用循环寻址时,必须遵循以下三个原则:(1)循环缓冲区的长度R小于2N,且地址从一个低N位为0的地址开始;(2)步长小于或等于循环缓冲区的长度;(3)所使用的辅助寄存器必须指向缓冲区单元。位反转寻址主要用于FFT算法中,这种寻址方式可以大大提高程序的执行速度和存储器的利用效率。使用时,AR0存放的整数值为FFT点数的一半,另一个辅助ARx指向存放数据的单元。位反转寻址将AR0加到辅助寄存器中,地址以位反转方式产生。也就是说,两者相加时,进位是从左向右反向传播的,而不是通过加法中的从右向左传播的。循环寻址使用循环寻址时,必须遵循以下三个原则:29汇编程序语法TMS320的汇编程序包括汇编指令(伪指令:assembledirectives)、汇编语言指令(assemblylanguageinstructions)、宏指令(macrodirectives)和注释(comments)。汇编程序语法TMS320的汇编程序包括汇编指令(伪指令:as30C54的指令既可以是助记符方式,也可以是代数方式C54的指令既可以是助记符方式,也可以是代数方式31助记符方式汇编程序语法[label][:]mnemonic[operandlist][;comment][标号][:]助记符[操作数][;注释]所有语句必须由语句标号、空格、“*”号或“;”号开头。后两种表示都是注释,后面的语句是不执行的,“;”可以出现在该语句行中的任何位置,表示后面的是注释;“*”只能出现在第一列,表示该行全是注释。语句标号不是必须的,如果用,就必须在第一列。语句中的各部分之间,由一个或多个空格分开。注释不是必须的。注释可以从第一列的“*”号或“;”号开头;如果不是从第一列开始的,就必须用“;”开头。助记符方式汇编程序语法[label][:]mnemonic32语句标号由字母、数字、_、$组成,最多不能超过32个字符,对大小写敏感,第一个字符不能是数字。后跟“:”,但分号不是语句标号的组成部分。语句标号由字母、数字、_、$组成,最多不能超过32个字符,对33助记符助记符不允许从第一列开始,否则被认为是语句标号。助记符可以是机器指令(如ABS,MPYU,SPH等)、伪指令(如.data,.list,.set等)、宏指令(如.macro,.var,.mexit等)和宏调用。助记符助记符不允许从第一列开始,否则被认为是语句标号。34操作数操作数可以是常数、符号或表达式。当操作数多于一个时,用逗号区分开。常数二进制数(如01B或01b)八进制数(如10Q或10q)十进制数(如23)十六进制数(如78H或78h)字符常数(如`A`或`b`)字符串(如“sampleprogram”)汇编时使用的常数操作数操作数可以是常数、符号或表达式。当操作数多于一个时,用35表达式表达式是一个常数、符号、或用算术运算符连接起来的常数或符号,表达式的范围为-32768~32767.表达式表达式是一个常数、符号、或用算术运算符连接起来的常数或36指令集符号指令集符号37续表续表38续表续表39续表续表40指令TMS320C54x指令集有近200条指令,按功能分为如下几类:算术运算类指令逻辑运算类指令程序控制类指令装入和存储指令指令TMS320C54x指令集有近200条指令,按功能分为如41算术运算指令加法指令减法指令乘法指令乘加指令乘减指令双数/双精度指令特殊操作指令算术运算指令加法指令42加法指令加法指令43减法指令减法指令44乘法指令乘法指令45乘加和乘减指令乘加和乘减指令46乘加(TMS320C50)MACdma,pma;程序存储器的值乘以数据存储器的值并累加到Acc(Acc)+(shiftedPregister)→Acc(dma)→TREG(dma)×(pma,addressedbyFPC)→PregisterModifyAR(ARP)andARPasspecified(FPC)+1→FPC乘加(TMS320C50)MACdma,pma;程序存储47MACX0,Y0,AX(R0)+,X0Y:(R4)+N4,Y0这条指令命令DSP56300将寄存器X0和Y0中的数相乘结果加到AccA中将寄存器R0所指的X寄存器地址中的值装入寄存器X0将寄存器R4所指的Y寄存器地址中的值装入寄存器Y0R0的值加1寄存器N4的值加给R4MACX0,Y0,AX(R0)+,X0Y:(R4)+N48逻辑运算指令逻辑运算指令49移位指令移位指令50测试指令测试指令51程序控制指令分支指令调用指令中断指令返回指令循环指令堆栈操作指令混合程序控制指令程序控制指令分支指令52转移指令转移指令53调用指令调用指令54中断指令中断指令55返回指令返回指令56循环指令循环指令57堆栈操作指令堆栈操作指令58程序控制指令程序控制指令59装入和存储指令一般的装入和存储指令条件存储指令并行装入和存储指令并行装入和乘法指令并行装入和加减乘指令混合装入和存储指令装入和存储指令一般的装入和存储指令60一般的装入指令一般的装入指令61存储指令存储指令62并行装入和乘法指令并行装入和乘法指令63混合装入和存储指令混合装入和存储指令64FIRS指令FIRS指令用于线性相位滤波器的处理。一个如右图的8阶线性相位滤波器的输出表达式FIRS指令FIRS指令用于线性相位滤波器的处理。一个如右图65FIRS*AR2+,*AR3+,COEFFSy=(c0*x0)+(c1*x1)+(c2*x2)+…+(c6*x6)+(c7*x7)=c0(x0+x7)+c1(x1+x6)+c2(x2+x5)+c3(x3+x4)FIRS*AR2+,*AR3+,COEFFSy=66维特比(Viterbi)译码DADST、DSADT、CMPS在信道均衡和解码中经常会使用到Viterbi算法,C54x为此提供了专门的硬件和指令。根据输入信号确定分支似然概率增加量D1/D2,放在T寄存器中,TRN存储器可能信号译码输出。维特比(Viterbi)译码DADST、DSADT、CMPS67维特比(Viterbi)译码维特比(Viterbi)译码68最小均方运算LMS在进行自适应滤波等操作中经常会使用LMS算法,C54x提供的LMS指令方便了编程。如下图所示的自适应滤波器设计中,滤波器系数修正公式为:wk(i+1)=wk(i)+2βe(i)x(i)最小均方运算LMS在进行自适应滤波等操作中经常会使用LMS算69最小均方运算LMS最小均方运算LMS70基于LMS的自适应滤波程序STM#-2,BRC;initializetheBlockrepeatcounterwithMMR LD ERROR,T;initializeavariablecalledERRORto0 RPTBD END_LOOP-1;establishlastlineofloopMPY *AR4,A ;delayslotinstructionthatinitializes ;accumulatorALMS *AR3,*AR4+0%;2nddelayslotinstruction ;loopstartshereST A,*AR3+;savefiltercoefficient||MPY *AR3,A;newteamcalculatedLMS *AR3,*AR4+0%;LMSinstructionforadaptivefilter ;A=a+*AR3<<16+2^15 ;B=B+*AR3X*AR4END_LOOP;基于LMS的自适应滤波程序STM#-2,BRC71数据归一化相关指令EXP、NORM归一化一个数是先求其指数,然后把它调整到最大精度格式。实现方法如下:数据归一化相关指令EXP、NORM归一化一个数是先求其指数,72数据块移动MVDD、MVDP、MVPD在C54x系列DSP中,数据与数据存储器、数据与程序存储器之间可以方便的进行数据传输,结合单指令循环可实现数据块移动。如16个系数的移动:数据块移动MVDD、MVDP、MVPD在C54x系列DSP中73数据块移动MVDD、MVDP、MVPD数据块移动MVDD、MVDP、MVPD74并行指令STA,*AR4-||MAC*AR5+,B累加器A中的高位数按原定的位数移动后,存入AR4指定的存储单元,AR4中的地址减1;AR5制定的存储器单元中的数与T寄存器中的数相乘,其积加到累加器B中,AR5中的地址加1.并行指令STA,*AR4-75伪指令(AssemblerDirectives)伪指令为程序提供数据,控制汇编过程。所做的工作包括:将代码和数据汇编到指定的位置。在存储器中为未初始化的变量保留存储空间。控制列表方式初始化存储器汇编条件块定义全局变量为汇编器制定可以获得宏的库检查符号调试信息伪指令(AssemblerDirectives)伪指令为程76段定义伪指令.bss在该段中保留若干字.data汇编已初始化的数据段.sect“sectionname”汇编入已命名的段.text汇编入可执行的代码段段定义伪指令.bss在该段中保留若干77初始化常数伪指令.float初始化一个32-bit的浮点常数.int初始化一个或多个16-bit的整数.string初始化一个或多个字符串.word初始化一个或多个16-bit的整数初始化常数伪指令.float初始化一个32-b78格式化输出列表的伪指令.list开始源文件列表.nolist停止源文件列表.length设置源文件列表的页长度.title在列表文件每一页打印文件名格式化输出列表的伪指令.list开始源文件列表79引用其他文件的伪指令.copy/.include包含其他文件的源语句.global确认一个或多个全局(外部)符号.mlib定义宏库引用其他文件的伪指令.copy/.include包含其80条件汇编伪指令.if/.else/.endif条件汇编代码块.loop/.endloop循环汇编代码块.break终止循环汇编代码块条件汇编伪指令.if/.else/.endif81汇编时的符号.equ/.set使一个符号等于一个值.end结束程序汇编时的符号.equ/.set使一个符号等于一个82宏语言Macro:Auser-definedroutinethatcanbeusedasaninstruction.汇编器支持宏语言,使用户可以建立自己的“指令”。当程序要将特定的任务执行若干次时,尤其有用。宏语言Macro:Auser-definedrouti83宏语言可以使用户:定义自己的宏,或重新定义正在执行的宏简化长的或复杂的汇编代码访问由归档器建立的宏库在一个宏内定义条件块和可重复的块在一个宏内操作字符串控制展开列表宏语言可以使用户:定义自己的宏,或重新定义正在执行的宏84定义宏在程序中使用宏之前,首先必须定义它。可以通过两种方式来定义:(1)在源文件或.include/.copy文件中定义;(2)在宏库中定义定义宏在程序中使用宏之前,首先必须定义它。可以通过两种方式来85定义宏macname.macro[parameter]modelstatements[.mexit].endm
macname宏的名字 .macro是一个伪指令,确认源语句为宏定义的第一行 [parameters]选项,作为.macro伪指令的操作数 modelstatements每次调用宏时执行的指令或伪指令 .endm终止宏定义宏macname.macro[parame86定义宏举例*add3p1,p2,p3*p3=p1+p2+p3add3.macrop1,p2,p3ld p1,aadd p2,aAdd p3,astl a,p3.endm 定义宏举例*add3p1,p2,p387调用宏在源程序中用宏的名字作为操作码来调用宏add3x,y,z调用宏在源程序中用宏的名字作为操作码来调用宏88展开宏在源程序调用宏时,汇编器将其展开。在展开时,汇编器将变量传递给宏参数,用宏定义取代宏调用语句,然后汇编其源代码。在缺省情况下,宏展开打印在列表文件中。可以用伪指令.mnolist来停止其展开的列表。展开宏在源程序调用宏时,汇编器将其展开。在展开时,汇编器将变89展开宏00002000ldx,a00010001addy,a00010002addz,a00036200stla,z*Reservespaceforvars0000.bssx,10001.bssy,10002.bssz,1展开宏00002000ldx,a90宏库定义宏的一种方法是建立一个宏库。宏库是包含有宏定义的文件的集合。必须使用归档器来把这些文件收集到一个文件中。宏库中的每一个成员都包含一个宏定义。该文件必须是未汇编的源文件,宏名字和文件名必须相同,且宏文件名的扩展名必须是.asm。宏库定义宏的一种方法是建立一个宏库。宏库是包含有宏定义的文件91访问宏库用伪指令.mlib来访问宏库,其语法为:.mlibmacrolibraryfilename当汇编器识别到该伪指令时,就打开该宏库,并建立该宏库内容的表。访问宏库用伪指令.mlib来访问宏库,其语法为:9266、节制使快乐增加并使享受加强。——德谟克利特
67、今天应做的事没有做,明天再早也是耽误了。——裴斯泰洛齐
68、决定一个人的一生,以及整个命运的,只是一瞬之间。——歌德
69、懒人无法享受休息之乐。——拉布克
70、浪费时间是一桩大罪过。——卢梭66、节制使快乐增加并使享受加强。——德谟克利特93DSP技术9(软件结构)DSP技术9(软件结构)DSP技术9(软件结构)DSP的软件结构TMS320C54X的软件结构寻址方式:立即数寻址短立即数寻址(单字指令)在指令字中包括立即操作数RPT#99;将下一条指令循环100次LD#0h,DP;将0装入数据页指针ADD#0ffh,A;将0ffh加到AccADSP技术9(软件结构)DSP技术9(软件结构)DSP技术994DSP技术9(软件结构)课件95DSP技术9(软件结构)课件96DSP技术9(软件结构)课件97DSP技术9(软件结构)课件98绝对地址寻址数据存储器(dmad)寻址用一个符号或一个数来确定数据空间中的一个地址例:MVKDsample,*AR5sample所代表的就是一个dmad绝对地址寻址数据存储器(dmad)寻址99绝对地址寻址程序存储器地址(pmad)寻址用一个符号或一个数来确定程序地址空间中的一个地址例:MVKDtable,*AR5table所代表的就是一个pmad绝对地址寻址程序存储器地址(pmad)寻址100绝对地址寻址端口地址(PA)寻址用一个符号或常数来确定I/O口地址PORTRPA,SmemPORTWSmem,PA绝对地址寻址端口地址(PA)寻址101绝对地址寻址*(lk)寻址用一个符号或一个常数来确定数据存储器中的一个地址例:LD*(BUFFER),A把地址为BUFFER的数据单元中的数据装到AccA中绝对地址寻址*(lk)寻址102累加器寻址用累加器中的数作为一个地址,可用来对存放数据的程序存储器寻址:READASmemWRITASmemREADA,把累加器A所确定的程序存储器单元中的一个字,传送到数据存储器单元Smem中。WRITA,把数据单元Smem中的一个字,传送到累加器A确定的程序存储器单元。累加器寻址用累加器中的数作为一个地址,可用来对存放数据的程序103存储器映射寄存器(MMR)寻址存储器映射寄存器寻址用来修改存储器映射寄存器而不影响当前数据页指针(DP)或堆栈指针(SP)的值。存储器映射寄存器寻址既可以在直接寻址中使用,又可以在间接寻址中使用。存储器映射寄存器(MMR)寻址存储器映射寄存器寻址用来修改存104堆栈寻址系统堆栈用来在中断和子程序期间自动存放程序计数器,它也能用来存放额外的数据项或传送数据值。处理器使用一个16-bit的存储器映射寄存器——堆栈指针来对堆栈寻址,他总是指向存放在堆栈中的最后一个元素。堆栈寻址系统堆栈用来在中断和子程序期间自动存放程序计数器,它105寻址方式:直接寻址TMS320C54x的数据存储器分为512页,每页128字,设置一个数据页指针DP(dataPointer),用9-bit指向一个数据页,再加上一个7-bit的页内偏移地址,形成16-bit的数据地址LD#4,DP;指向页4(0200h-027fh)ADD9h,A;将数据页4中的地址9h的数据加给AccA寻址方式:直接寻址TMS320C54x的数据存储器分为512106寻址方式:直接寻址寻址方式:直接寻址107寻址方式:间接寻址8个辅助寄存器(AR0-AR7),由一个辅助寄存器指针(ARP3-bit)来指定辅助寄存器算术单元(ARAU)做16-bit无符号数运算,决定一个新的地址,装入辅助寄存器中的一个AR0-AR7的内容相当灵活,可以装入立即数,加上立即数,减去立即数;也可以从数据存储器装入地址;还可以作以下变址寻址:寻址方式:间接寻址8个辅助寄存器(AR0-AR7),由一个辅108寻址方式:间接寻址寻址方式:间接寻址109寻址方式:间接寻址寻址方式:间接寻址110寻址方式:间接寻址将该AR的内容加1或减1,再寻址(循环常用)将该AR的内容加上或减去AR0的内容,再寻址。将该AR的内容逆向进位加上或减去AR0的的内容,再寻址。寻址方式:间接寻址将该AR的内容加1或减1,再寻址(循环常用111寻址方式:间接寻址ADD*,8,A;将当前辅助寄存器所指的地址里的数据,左移8-bit后加给AccAADD*+,8,A,AR4;数据左移,加给AccA后,当前辅助寄存器加1,选择辅助寄存器AR4寻址方式:间接寻址ADD*,8,A;将当前辅助寄存器所指的112寻址方式:间接寻址ADD*0+,8,A;执行加法后,将AR0的值加给当前辅助寄存器ADD*BR0+,8,A;执行加法后,将AR0的值加给当前辅助寄存器,但反向进位寻址方式:间接寻址ADD*0+,8,A;执行加法后,将A113正向进位与反向进位正向进位反向进位100100+100+1001000010正向进位与反向进位正向进位114位倒序寻址AR0=100AR1=000按AR1寻址后,将AR0加给AR1,反向进位位倒序寻址AR0=100115位倒序寻址原序原地址位倒序后地址位倒序0000000010011004201001023011110641000011510110156110011371111117位倒序寻址原序原地址位倒序后地址116例:.mmregs.bssx,4,1a0.word012ha1.word321ha2.wordfe11ha3.wordff03h.sect“program”LD#X,AR1LD#0,A,AR1LD#a0,TMAC*+,ALD#a1,TMAC*+,ALD#a2,TMAC*+,ALD#a3,TMAC*,A例:.mmregsMAC*+,A117循环寻址许多算法,如卷积,相关和FIR滤波等,都需要在存储器中实现一个循环缓冲器。在这些算法中,一个循环缓冲器就是一个包换了最近的数据的滑动窗口。当新的数据来到时,缓冲器就会覆盖最早的数据。循环缓冲器实现的关键是循环寻址的实现。C54x间接寻址中提供了循环寻址方式,以%表示。循环寻址许多算法,如卷积,相关和FIR滤波等,都需要在存储器118循环寻址循环缓冲区的参数主要包括:长度寄存器(BK)、有效基地址(EFB)、尾地址(EOB)。其中,BK定义可循环缓冲区的大小R。要求缓冲区地址始于最低N位为零的地址,且R值满足2N>R,R值必须要放入BK。例如,一个长度为R=31的循环缓冲区必须开始于最低5位为零的地址(即XXXXXXXXXXX00000B),且必须将R值加载到BK寄存器中。循环寻址循环缓冲区的参数主要包括:长度寄存器(BK)、有效基119循环寻址循环缓冲区的有效基地址(EFB)定义了缓冲区的起始地址,也就是辅助寄存器(ARx)低N位设为0后的值。循环缓冲区的尾地址(EOB)定义了缓冲区的底部地址,它通过用BK的低N位代替ARx的低N位得到。循环缓冲区的指示index就是当前ARx的低N位,步长step就是一次加到辅助寄存器或从辅助寄存器中减去的值。循环寻址循环缓冲区的有效基地址(EFB)定义了缓冲区的起始地120循环寻址循环寻址的算法为:If0≤index+step<BKindex=index+stepElseifindex+step≥BKindex=index+step-BKElseifindex+step<0index=index+step+BK循环寻址循环寻址的算法为:121循环寻址使用循环寻址时,必须遵循以下三个原则:(1)循环缓冲区的长度R小于2N,且地址从一个低N位为0的地址开始;(2)步长小于或等于循环缓冲区的长度;(3)所使用的辅助寄存器必须指向缓冲区单元。位反转寻址主要用于FFT算法中,这种寻址方式可以大大提高程序的执行速度和存储器的利用效率。使用时,AR0存放的整数值为FFT点数的一半,另一个辅助ARx指向存放数据的单元。位反转寻址将AR0加到辅助寄存器中,地址以位反转方式产生。也就是说,两者相加时,进位是从左向右反向传播的,而不是通过加法中的从右向左传播的。循环寻址使用循环寻址时,必须遵循以下三个原则:122汇编程序语法TMS320的汇编程序包括汇编指令(伪指令:assembledirectives)、汇编语言指令(assemblylanguageinstructions)、宏指令(macrodirectives)和注释(comments)。汇编程序语法TMS320的汇编程序包括汇编指令(伪指令:as123C54的指令既可以是助记符方式,也可以是代数方式C54的指令既可以是助记符方式,也可以是代数方式124助记符方式汇编程序语法[label][:]mnemonic[operandlist][;comment][标号][:]助记符[操作数][;注释]所有语句必须由语句标号、空格、“*”号或“;”号开头。后两种表示都是注释,后面的语句是不执行的,“;”可以出现在该语句行中的任何位置,表示后面的是注释;“*”只能出现在第一列,表示该行全是注释。语句标号不是必须的,如果用,就必须在第一列。语句中的各部分之间,由一个或多个空格分开。注释不是必须的。注释可以从第一列的“*”号或“;”号开头;如果不是从第一列开始的,就必须用“;”开头。助记符方式汇编程序语法[label][:]mnemonic125语句标号由字母、数字、_、$组成,最多不能超过32个字符,对大小写敏感,第一个字符不能是数字。后跟“:”,但分号不是语句标号的组成部分。语句标号由字母、数字、_、$组成,最多不能超过32个字符,对126助记符助记符不允许从第一列开始,否则被认为是语句标号。助记符可以是机器指令(如ABS,MPYU,SPH等)、伪指令(如.data,.list,.set等)、宏指令(如.macro,.var,.mexit等)和宏调用。助记符助记符不允许从第一列开始,否则被认为是语句标号。127操作数操作数可以是常数、符号或表达式。当操作数多于一个时,用逗号区分开。常数二进制数(如01B或01b)八进制数(如10Q或10q)十进制数(如23)十六进制数(如78H或78h)字符常数(如`A`或`b`)字符串(如“sampleprogram”)汇编时使用的常数操作数操作数可以是常数、符号或表达式。当操作数多于一个时,用128表达式表达式是一个常数、符号、或用算术运算符连接起来的常数或符号,表达式的范围为-32768~32767.表达式表达式是一个常数、符号、或用算术运算符连接起来的常数或129指令集符号指令集符号130续表续表131续表续表132续表续表133指令TMS320C54x指令集有近200条指令,按功能分为如下几类:算术运算类指令逻辑运算类指令程序控制类指令装入和存储指令指令TMS320C54x指令集有近200条指令,按功能分为如134算术运算指令加法指令减法指令乘法指令乘加指令乘减指令双数/双精度指令特殊操作指令算术运算指令加法指令135加法指令加法指令136减法指令减法指令137乘法指令乘法指令138乘加和乘减指令乘加和乘减指令139乘加(TMS320C50)MACdma,pma;程序存储器的值乘以数据存储器的值并累加到Acc(Acc)+(shiftedPregister)→Acc(dma)→TREG(dma)×(pma,addressedbyFPC)→PregisterModifyAR(ARP)andARPasspecified(FPC)+1→FPC乘加(TMS320C50)MACdma,pma;程序存储140MACX0,Y0,AX(R0)+,X0Y:(R4)+N4,Y0这条指令命令DSP56300将寄存器X0和Y0中的数相乘结果加到AccA中将寄存器R0所指的X寄存器地址中的值装入寄存器X0将寄存器R4所指的Y寄存器地址中的值装入寄存器Y0R0的值加1寄存器N4的值加给R4MACX0,Y0,AX(R0)+,X0Y:(R4)+N141逻辑运算指令逻辑运算指令142移位指令移位指令143测试指令测试指令144程序控制指令分支指令调用指令中断指令返回指令循环指令堆栈操作指令混合程序控制指令程序控制指令分支指令145转移指令转移指令146调用指令调用指令147中断指令中断指令148返回指令返回指令149循环指令循环指令150堆栈操作指令堆栈操作指令151程序控制指令程序控制指令152装入和存储指令一般的装入和存储指令条件存储指令并行装入和存储指令并行装入和乘法指令并行装入和加减乘指令混合装入和存储指令装入和存储指令一般的装入和存储指令153一般的装入指令一般的装入指令154存储指令存储指令155并行装入和乘法指令并行装入和乘法指令156混合装入和存储指令混合装入和存储指令157FIRS指令FIRS指令用于线性相位滤波器的处理。一个如右图的8阶线性相位滤波器的输出表达式FIRS指令FIRS指令用于线性相位滤波器的处理。一个如右图158FIRS*AR2+,*AR3+,COEFFSy=(c0*x0)+(c1*x1)+(c2*x2)+…+(c6*x6)+(c7*x7)=c0(x0+x7)+c1(x1+x6)+c2(x2+x5)+c3(x3+x4)FIRS*AR2+,*AR3+,COEFFSy=159维特比(Viterbi)译码DADST、DSADT、CMPS在信道均衡和解码中经常会使用到Viterbi算法,C54x为此提供了专门的硬件和指令。根据输入信号确定分支似然概率增加量D1/D2,放在T寄存器中,TRN存储器可能信号译码输出。维特比(Viterbi)译码DADST、DSADT、CMPS160维特比(Viterbi)译码维特比(Viterbi)译码161最小均方运算LMS在进行自适应滤波等操作中经常会使用LMS算法,C54x提供的LMS指令方便了编程。如下图所示的自适应滤波器设计中,滤波器系数修正公式为:wk(i+1)=wk(i)+2βe(i)x(i)最小均方运算LMS在进行自适应滤波等操作中经常会使用LMS算162最小均方运算LMS最小均方运算LMS163基于LMS的自适应滤波程序STM#-2,BRC;initializetheBlockrepeatcounterwithMMR LD ERROR,T;initializeavariablecalledERRORto0 RPTBD END_LOOP-1;establishlastlineofloopMPY *AR4,A ;delayslotinstructionthatinitializes ;accumulatorALMS *AR3,*AR4+0%;2nddelayslotinstruction ;loopstartshereST A,*AR3+;savefiltercoefficient||MPY *AR3,A;newteamcalculatedLMS *AR3,*AR4+0%;LMSinstructionforadaptivefilter ;A=a+*AR3<<16+2^15 ;B=B+*AR3X*AR4END_LOOP;基于LMS的自适应滤波程序STM#-2,BRC164数据归一化相关指令EXP、NORM归一化一个数是先求其指数,然后把它调整到最大精度格式。实现方法如下:数据归一化相关指令EXP、NORM归一化一个数是先求其指数,165数据块移动MVDD、MVDP、MVPD在C54x系列DSP中,数据与数据存储器、数据与程序存储器之间可以方便的进行数据传输,结合单指令循环可实现数据块移动。如16个系数的移动:数据块移动MVDD、MVDP、MVPD在C54x系列DSP中166数据块移动MVDD、MVDP、MVPD数据块移动MVDD、MVDP、MVPD167并行指令STA,*AR4-||MAC*AR5+,B累加器A中的高位数按原定的位数移动后,存入AR4指定的存储单元,AR4中的地址减1;AR5制定的存储器单元中的数与T寄存器中的数相乘,其积加到累加器B中,AR5中的地址加1.并行指令STA,*AR4-168伪指令(AssemblerDirectives)伪指令为程序提供数据,控制汇编过程。所做的工作包括:将代码和数据汇编到指定的位置。在存储器中为未初始化的变量保留存储空间。控制列表方式初始化存储器汇编条件块定义全局变量为汇编器制定可以获得宏的库检查符号调试信息伪指令(AssemblerDirectives)伪指令为程169段定义伪指令.bss在该段中保留若干字.data汇编已初始化的数据段.sect“sectionname”汇编入已命名的段.text汇编入可执行的代码段段定义伪指令.bss在该段中保留若干170初始化常数伪指令.float初始化一个32-bit的浮点常数.int初始化一个或多个16-bit的整数.string初始化一个或多个字符串.word初始化一个或多个16-bit的整数初始化常数伪指令.float初始化一个32-b171格式化输出列表的伪指令.list开始源文件列表.nolist停止源文件列表.length设置源文
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025至2030年中国梭芯数据监测研究报告
- 2025至2030年中国指针式手表数据监测研究报告
- 2025至2030年中国工业用水冷冷水机组数据监测研究报告
- 2025至2030年中国商业批发进销存管理系统数据监测研究报告
- 2025至2030年中国厚壁无缝管数据监测研究报告
- 2025至2030年中国单色印刷OPP胶粘带数据监测研究报告
- 2025至2030年中国冶金辅料数据监测研究报告
- 2025至2030年中国全热风老化房数据监测研究报告
- 2025至2030年中国健康空调被数据监测研究报告
- 游泳救生员资格考试的考点回顾及试题及答案
- 湖北省2025届高三(4月)调研模拟考试英语试题及答案
- 血液制品规范输注
- 2025-2030中国生物医药行业市场深度调研及发展趋势与投资前景预测研究报告
- 贸易公司员工管理制度
- 专利代理师高频题库新版2025
- 肝硬化护理新进展
- 2025年征信业务合规培训
- 2025年全国国家版图知识竞赛题库及答案(中小学组)
- 2025项目部与供应商安全生产物资供应合同
- DB15-T 1339-2025 风电场机组布置技术规范
- 统借统还合同协议
评论
0/150
提交评论