TMS320C54x程序设计与应用.ppt
《TMS320C54x程序设计与应用.ppt》由会员分享,可在线阅读,更多相关《TMS320C54x程序设计与应用.ppt(148页珍藏版)》请在三一办公上搜索。
1、第6章 TMS320C54x程序设计与应用,内容提要,6.1 汇编语言基本指令应用6.2 DSP在信号发生器上的应用6.3 DSP中断应用6.4 DSP串口通信应用6.5 其它应用,6.1 汇编语言基本指令应用,C54x具有丰富的汇编指令,利用这些指令可以实现数据的传递、运算、程序控制和处理器控制等功能。,DSP中数据表示方法算数运算浮点数运算宏定义和调用数据传递,数的表示方法整数和小数,一个16位的二进制数既可以表示一个整数,也可以表示一个小数。,当它表示一个整数时,其最低位(D0)的权为20,D1的权为21,次高位(D14)的权为214。,当需要表示小数时,小数点的位置始终在最高位后,最高
2、位(D15)表示符号位。,次高位(D14)的权为2-1,然后是2-2,最低位(D0)的权为2-15。,4000H表示小数0.5,1000H是小数2-3=0.125,0001H则表示16位定点DSP能表示的最小的小数(有符号)2-15=0.000030517578125。,数的表示方法整数和小数,在DSP中,一个16进制的数可以表示不同的十进制数,或者是整数,或者是小数(如果表示小数,必定小于1),但仅仅是在做整数乘除或小数乘除时,系统对它们的处理才是有所区别的,而在加减运算时,系统都当成整数来处理。,在C54X中,将一个小数用16位定点格式来表示的方法是用215(32768)乘以该小数,将结果
3、的整数部分转换成十六进制即可以。,数的表示方法整数和小数,如:0.5:*32768=16384:4000H-0.5:绝对值*32768=16384:4000H:取反加1:C000H,在汇编语言中,不能直接写入十进制小数。比如要定义一个系数0.707,可以写成:.word 32768*707/1000,如果表示一个有符号数时,最高位(D15)为符号位,0表示正数,1表示负数。,例如,7FFFH表示最大的正数32767(十进制),而FFFFH表示最大的负数-1(负数用二进制的补码方式显示)。,数的表示方法正数和负数,6.1.2 算术运算,基本算术运算包括:,加法运算减法运算乘法运算除法运算,ALU
4、(Adder),Multiplier(17x17),(Rpt+Sub),算数运算定点加法,ld temp1,a add temp2,a stla,temp3,没有特意考虑temp1和temp2是整数还是小数,temp3=temp1+temp2,;变量temp1装入累加器A,;变量temp2与累加器A相加,结果放入A,;结果(低16位)存入变量temp3中。,算数运算定点减法,stm#temp1,ar3;变量temp1的地址装入 ar3寄存器stm#temp2,ar2;变量temp2的地址装入 ar2寄存器sub*ar2,*ar3,b;变量temp2和temp1都左移 16位,然后相减,结果放入
5、 累加器B中(高16位)sth b,temp3;相减的结果(累加器B的高 16位)存入变量temp3。,算数运算定点整数乘法,C54X提供了大量的乘法运算指令,其结果都是32位。,MPYU是一条专用于无符号数乘法运算的指令,而其它的乘法指令都是有符号数的乘法,算数运算定点整数乘法,rsbxFRCT;清FRCT标志,准备整数乘法Ld temp1,T;变量temp1装入T寄存器mpytemp2,a;temp2*temp1,结 果放入累加器A(32位)stha,temp3;结果的高16位存入temp3stla,temp4;结果的低16位存入temp4,算数运算定点小数乘法,由于两个小数相乘,其结果的
6、小数点的位置在次高的后面,所以必须左移一位,才能得到正确的结果。C54X中提供了一个状态位FRCT,将其设置为1时,系统自动将乘积结果左移一位。,算数运算定点小数乘法,ssbx FRCT;FRCT=1,准备小数乘法Ld temp1,16,a;temp1装入A的高16 位mpya temp2;temp2乘A的高16位,结 果 在累加器B中sthb,temp3;将乘积的高16位存temp3,算数运算定点小数乘法,例,temp1=0ccdH(十进制的0.1),temp2=599aH(十进制的0.7),两数相乘后B累加器的内容为08f5f0a4H(十进制的0.07000549323857),如果仅保存
7、结果的高16位08f5H(十进制的0.06997680664063),算数运算除法运算,在C54x中没有除法器硬件,也没有专门的除法指令。但是,利用条件减法指令(SUBC)和重复指令(RPT)可实现两个无符号数除法运算。,条件减法指令:SUBC Smem,src 功能:(src)-(Smem)15ALU输出端 若ALU输出0,则(ALU输出)1+1src 否则(src)1src,重复指令:RPT#K 功能:RC=#K,重复执行下条指令K+1次。,1.整数除法,例:编写16384512的程序,.bss fenzi,1.bss fenmu,1.bss shang,1.datatable.word
8、16384.word 512.textstart:STM#fenzi,AR1 RPT#1 MVPD table,*AR1+,;16384;512;传送2个数据至分子、分母单元,6.1.2 算数运算除法运算,LD fenmu,16,A MPYA fenzi ABS A STH A,fenmu LD fenzi,A ABS A RPT#15 SUBC fenmu,A XC 1,BLT NEG A STL A,shang,;将分母移到累加器AH;(fenzi)*A(3216)B,获取商的符号;分母取绝对值;分母绝对值存回原处;分子A;分子取绝对值;16次减法重复操作,完成除法;如果B0(商是负数),
9、则需要变号;保存商,注意:SUBC指令仅对无符号数进行操作,因此先对被除数和除数取绝对值,然后利用乘法操作获取商的符号,最后通过条件操作指令给商加上适当的符号。,6.1.2 算数运算除法运算,2.小数除法,例:编写0.4(-0.8)的程序,.bss fenzi,1,.bss fenmu,1,.bss shang,1,.data,table.word 4*32768/10;0.4.word-8*32768/10;-0.8,.textstart:STM#fenzi,AR1,RPT#1 MVPD table,*AR1+,与整数除法不同之处:分子加载在ACC高16位N位小数只需N-1次减法计算,6.1
10、.2 算数运算除法运算,LD fenmu,16,A,;分母送AH,MPYA fenzi,;商符号送B,ABS A,;取分母绝对值,STH A,fenmu,LD fenzi,16,A,;分子送AH,ABS A,;取分子绝对值,RPT#14 SUBC fenmu,A,;15次减法循环 完成除法,XC 1,BLT,;若B0,则变号,NEG A,STL A,shang,;保存商,6.1.2 算数运算除法运算,6.1.3 浮点运算程序,在数字信号处理过程中,定点运算是将数据的整数和小数部分分开,小数点在一个固定位置,其优点是硬件实现比较容易,但动态范围受到限制。为了扩大数据的范围和精度,需要采用浮点运算
11、。虽然C54x是个定点DSP器件,但它支持浮点运算。在C54x上实现浮点运算,操作数必须变成定点数,然后再返回浮点数。通过归一化输入数据,可以将定点值变换为浮点值。,1.浮点数的表示方法,浮点数是由尾数和指数两部分组成,它与定点数的关系:定点数=尾数2-指数,如:定点数:0 x2000=0.25=0.52-1,尾数=0.5=0 x4000,指数=1。,尾数:可正可负,用补码表示。指数:可正可负,用补码表示,其范围:-831。,6.1.3 浮点运算程序,2.定点数转换成浮点数,C54x通过三条指令可将定点数转换成浮点数。,EXP A 提取指数指令,功能:若A=0,则T=0;若A0,则T=(A的多
12、余符号位数-8)。即提取指数,A的内容不变,指数=多余符号位数-8。,例如:执行EXP A前,A=FF FFFF FFCB T=0000,A=FF FFFF FFCB=1111111111001011,33,多余符号位数:33 指数:33-8=25 T=0019,执行后,A=FF FFFF FFCB T=0019(25),又如:执行EXP B前,B=07 8543 2105 T=0007 B=0000 0111 1000,多余符号位数:4 指数:4-8=-4 T=FFFC 执行后,B=07 8543 2105 T=FFFC(-4),6.1.3 浮点运算程序,ST T,EXPONENT,紧随EX
13、P指令之后。,功能:将保存在T中的指数存放在数据存储器EXP单元中。,NORM A,根据T对累加器进行格式化处理指令。,功能:根据T的内容,对累加器A进行移位。T0,A左移T位;T0,A右移T位。即ATSA。,6.1.3 浮点运算程序,例如:NORM A,执行前:A=FF FFFF F001 T=0013(19),27,左移19位,11111111 1000 0000 0000 1000,执行后:A=FF 8008 0000 T=0013(19),又如:NORM B,A,执行前:A=FF FFFF F001 B=21 0A0A 0A0A T=FFF9(-7)B右移7位送入A A=00 4214
14、 1414 执行后:A=00 4214 1414 B=21 0A0A 0A0A T=FFF9(-7),6.1.3 浮点运算程序,3.浮点数转换成定点数,定点数浮点数:根据定点数,求其尾数和指数,然后将尾数按指数T进行移位。,当T0,A左移T位;当T0,A右移T位。,浮点数定点数:根据指数T,将尾数进行移位。,当T0,A右移T位;当T0,A左移T位。,6.1.3 浮点运算程序,4.浮点乘法运算实例,实现浮点乘法运算时,首先将定点数规格化成浮点数;然后完成浮点乘法运算;最后将浮点数转换成定点数。,【例5.8.1】编写浮点乘法程序,完成a1a2=0.4(-0.9),程序中保留10个数据存储单元:a1
15、(被乘数)a2(乘数)b1(被乘数的指数)c1(被乘数的尾数)b2(乘数的指数)c2(乘数的尾数)ep(乘积的指数)mp(乘积的尾数)prod(乘积)temp(暂存单元),6.1.3 浮点运算程序,程序清单:,.title“float.asm”.def startSTACK:.usect“STACK”,100.bss a1,1.bss a2,1.bss b1,1.bss c1,1.bss b2,1.bss c2,1.bss ep,1.bss mp,1.bss prod,1.bss temp,1,.title“float.asm”.def startSTACK:.usect“STACK”,100
16、,.bss a1,1,a1,.bss a2,1,a2,.bss b1,1,b1,.bss c1,1,c1,.bss b2,1,b2,.bss c2,1,c2,.bss ep,1,ep,.bss mp,1,mp,.bss prod,1,prod,.bss temp,1,temp,6.1.3 浮点运算程序,table:.word 4*32768/10,table,.word-9*32768/10,.textstart:STM#SATACK+100,SP MVPD table,a1 MVPD table+1,a2 LD a1,16,A EXP A ST T,b1 NORM A STH A,c1 LD
17、 a2,16,A EXP A ST T,b2 NORM A STH A,c2 CALL MULTdone:B done,;设堆栈指针,;将a1和a2送入RAM,;将a1送入AH,;求a1的指数,;将a1的指数送b1,;求a1的尾数,即A左移1位,;将a1的尾数送c1,;将a2送入AH,;求a2的指数,;将a2的指数送b2,;求a2的尾数,;将a2的尾数送c2,;调浮点乘法子程序,MULT:SSBX FRCT SSBX SXM LD b1,A ADD b2,A STL A,ep LD c1,T MPY c2,A EXP A ST T,temp NORM A STH A,mp LD temp,A
18、ADD ep,A STL A,ep,;取b1送入A,;b1+b2送入A,;乘积指数送ep,;取a1的尾数,;求尾数的乘积,即:乘积尾数=c1c2,;求尾数乘积的指数,;指数存入temp,;求乘积的尾数,;存乘积的尾数,;取尾数乘积的指数,;(ep)+(temp)A,;保存乘积指数,NEG A STL A,temp LD temp,T LD mp,16,A NORM A STH A,prod RET.END,;乘积指数反号,;暂存A,;取乘积指数,;将(mp)AH,;将A按T移位,得定点数,;保存定点乘积,;子程序返回,运行结果:,乘积尾数:0 xA3D7,乘积指数:0 x0001,乘积定点数:
19、0 xD1EC,十进制数:-0.359999,6.1.4 宏定义与调用,ADD3.MACRO P1,P2,P3,ADDRP;三数相加宏定义;ADDRP=P1+P2+P3LD P1,AADD P2,AADD P3,ASTL A,ADDRP.ENDM,ADD3 DAT0,DAT1,DAT2,DAT3;三数相加操作;DAT3=DAT0+DAT1+DAT2,定义宏:,调用宏,6.1.5 数据传递,阅读:P343 数据存储器和程序存储器实验说明分析:P350 数据存储器和程序存储器实验源程序要求:结合附录指令集,掌握基本数据传递指令和寻址方式的 使用。,6.2 DSP 在信号发生器上的应用,信号发生器是
20、通信、电子技术应用领域最常见的设备。目前很多信号可由DDS(Direct digital synthesis)来产生,主要采用查表法。此种方法适用于精度要求不是很高的场合,如果精度要求较高则查表量就会很大,相应的存储容量也要求很大。另一种产生信号的方法是通过计算获得信号的相关数据。,常见的波形信号有:方波、正弦波等。方波信号容易实现,如定时中断。正弦波信号可用相应的算法实现,6.2 DSP 在信号发生器上的应用,正弦波算法介绍:,利用正弦函数的对称性和周期性,可以不用计算360度的所有角度值,只要计算045度的sinx和cosx的值(精度为0.5度),再利用sin2x=2sinx*cosx,求
21、出090度的值(精度为1度),然后通过复制可获得0360度的sinx。可将获得的sinx值放入一个表中,重复的向DA输出,通过DA即可得到相应的正弦波形,改变输出的延时可得到频率不同的正弦波,选取不同的系数乘以sinx值可改变正弦波的幅值,改变sinx输出表的输出顺序可改变波形的相位。,6.2 DSP 在信号发生器上的应用,正弦波算法介绍:,sinx和cosx的计算:泰勒级数展开法(取前五项),6.2 DSP 在信号发生器上的应用,正弦函数sinx程序实现:,开辟存储单元:,7FFFH dsp能表示的最大的小数;32767/327681,6.2 DSP 在信号发生器上的应用,正弦函数sinx程
22、序实现:,关键指令:(1)并行存储和装载指令:ST src,Ymem;hi(src)Ymem|LD Xmem,dst;Xmemhi(dst)(2)乘减指令:MASR Xmem,Ymem,src,dst;(src-Xmem*Ymem)dst,XmemT,6.2 DSP 在信号发生器上的应用,余弦函数cosx程序实现:,只要改变table单元的值即可,6.2 DSP 在信号发生器上的应用,计算0359度的正弦值算法,精度为1度:,SIN0SIN90,SIN91SIN179,SIN180SIN359,6.2 DSP 在信号发生器上的应用,计算0359度的正弦值程序实现:,需开辟的存储区:,sin_x
23、:.usect sin_x,360,关键指令:(1)循环寻址:STM#LK,BK 寻址地址由*ARx+0%提供;循环长度放入BK;ARx指向寻址单元,每寻址一次用ARx+AR0的内容做下次寻址,STM#sin_x,AR6 STM#1,AR0STM#360,BKPORTW*AR6+0%,PA0,例如:,6.2 DSP 在信号发生器上的应用,计算0359度的正弦值程序实现:,关键指令:(1)循环寻址:STM#LK,BK 寻址地址由*ARx+0%提供;循环次数放入BK;ARx指向寻址单元,每寻址一次用ARx+AR0的内容做下次寻址,STM#sin_x,AR6 STM#1,AR0STM#360,BKP
24、ORTW*AR6+0%,PA0,例如:,6.3 DSP 中断应用,一、DSP中断系统:1、不可屏蔽硬件中断:RESET、NMI2、软件中断(不可屏蔽):RESET,INTR,TRAP(单片支持30条软件中断)3、可屏蔽硬件中断(1)片外中断:INT0INT3:四级片外中断(2)片内外设中断:RINT0、XINT0:片内串口0收、发中断RINT1、XINT1:片内串口1收、发中断TINT0、TINT1:片内定时器0、1的定时中断HPINT:主机接口中断BRINT0BRINT1:McBSP接收中断BXINT0BXINT1:McBSP发送中断DMAC0DMAC5:6通道DMA中断,使用中断前要掌握中
25、断优先级,并根据优先级编写中断向量表。中断优先级:P109,二、编写中断向量表程序 从中断优先级表中可以看出,每级中断在向量表中占有4个字的空间;所以在编写中断向量表时要注意中断级别顺序的同时,也要注意各级中断在向量表中的地址。,6.3 DSP 中断应用,MEMORY PAGE 0:VEC:origin=1000h,length=0ffh PROG:origin=1100h,length=8000h PAGE 1:DATA:origin=080h,length=0807fhSECTIONS.text PROG PAGE 0.int_table VEC PAGE 0.stack DATA PAG
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- TMS320C54x 程序设计 应用

链接地址:https://www.31ppt.com/p-6522025.html