第七章程序设计举例与仿真系统1.计算51iixy.bssx,5.bssy,1LDP#0;B2LARAR1,#xLARAR2,#4LACL#0;0-ACCMAR*,AR1loop:ADD*+,AR2;BANZloop,AR1;AR2≠0,jumptoloopSACLyloop1:Bloop1§7.1汇编语言程序设计举例2.计算51iiixay.datacoeff:.word2,3,4,5,6;ai.bssx,5.bssy,1LDP#0;B2LARAR1,#xLACL#0;0-ACCSPM0;乘法不移位MPY#0;清PREGMAR*,AR1RPT#5;累加-乘MACcoeff,*+;PREG+ACC;((*))-TREG;TREG*(coeff)-PREGSACLyloop:Bloop3.数据块传送(程序存储器)--〉(数据存储器).datacoeff:.word5,6,7,8,9;.bssx,5MAR*,AR1LARAR1,#xRPT#4;BLPD#coeff,*+;loop:Bloop(数据存储器)--〉(数据存储器).data.bssy,5.bssx,5MAR*,AR1LARAR1,#xRPT#4BLDD#y,*+loop:Bloop4.定点运算•数据格式在定点DSP芯片中,采用定点数进行数值运算,其操作数一般采用整型数来表示。TMS320C2000字长为16。一般用一个字长表示一个数。DSP芯片的数以2的补码形式表示,最高位为符号位,0表示数值为正,l表示负数,其余位为数据位;例如,带符号数1111111111111001B=FFF9H=-70110111011110000B=6EF0H=28400•数的定标:数的定标是设定小数点在不同位置,来表示不同大小和不同精度的小数。有Q表示法、D表示法和S表示法:Q表示法:Qi表示小数位占i位;D表示法:Di表示整数位数占i位;Qi=D(15-i)或Di=Q(15-i)S表示法:Si.j表示有i位整数,j位小数,即小数点在第j位之后,且i十j=15。•对定点数而言,数值范围与精度是一对矛盾,一个变量要想能够表示比较大的数值范围,必须以牺牲精度为代价•16位数的小数Q表示法、D表示法和S表示法Q15-D0-S0.15——1位符号位,15位小数Q14–D1–S1.14——1位符号位,1位整数,14位小数Q13–D2–S2.13——1位符号位,2位整数,13位小数……Q1–D14–S14.1——1位符号位,14位整数,1位小数Q0–D15–S15.0——1位符号位,15位整数2000H的Q15表示为0.250000000000000100小数点的位置符号位•16位数的小数Q表示法、D表示法和S表示法Q15-D0-S0.15——1位符号位,15位小数Q14–D1–S1.14——1位符号位,1位整数,14位小数Q13–D2–S2.13——1位符号位,2位整数,13位小数……Q1–D14–S14.1——1位符号位,14位整数,1位小数Q0–D15–S15.0——1位符号位,15位整数2000H的Q14表示为0.50000000000000100小数点的位置符号位•16位数的小数Q表示法、D表示法和S表示法Q15-D0-S0.15——1位符号位,15位小数Q14–D1–S1.14——1位符号位,1位整数,14位小数Q13–D2–S2.13——1位符号位,2位整数,13位小数……Q1–D14–S14.1——1位符号位,14位整数,1位小数Q0–D15–S15.0——1位符号位,15位整数2000H的Q0表示为81920000000000000100小数点的位置符号位•定点数和浮点数的转换关系:•浮点数(x)转换为定点数(xq):xq=int[x*2Q]例:浮点数x=0.4,定标Q=15,则xq=int[0.4*215]=13107=3333H浮点数x=5.25,定标Q=10,则xq=int[5.25*210]=5376=1500H浮点数x=-5.25,定标Q=10,则xq=int[-5.25*210]=-5376=EB00H•定点数和浮点数的转换关系:•定点数(xq)转换为浮点数(x):x=float[xq*2-Q]例:定点数xq=13107,定标Q=15,则x=float[13107*2-15]0.399993896定点数xq=4C8BH=19595,定标Q=5,则x=float[19595*2-5]=612.34375•定点算术运算(1)两个定点数的加/减法•定点加/减法必须保证两个操作数的定标值一样。•如果两个数据的Q值不同,在保证数据准确性的前提下调整Q值使数据精度最高,即尽量将Q值小的数调整为与另一个数的Q一样大。•做加/减运算时,必须注意运算结果可能超出16位的表示范围。例如,x=0.4,y=0.2计算x+y。采用Q15表示两个数据可以得到最高精度的运算结果x,y的Q15定点表示分别为:xq=13107,yq=6553xq+yq=13107+6553=19660将运算结果转换为浮点数为:19660x2-150.5999756。(2)定点数的乘法•两个16位定点数的乘法Qi×Qm=Qi+m或Si.j×Sm.n=S(i+m).(j+n)(i+m+j+n=30)乘积为32位,其中:符号占2位,整数为i+m位,小数为j+n位如果将符号位中的一位归入整数位,则Di×Dm=Di+m+1•利用DSP的左移一位操作,得:S(i+m).(j+n+1)•取结果的高字,可提高16位乘积结果的精度SPM1MPY*SPHVALUE例:x=5.25,y=0.751计算z=x×y(3.94275)•x定标S5.10,xq=5376=1500H•y定标S0.15,yq=24608=6020H•xq×yq=132292608=07E2A000H(定标S5.25)•运算结果取高字07E2H(定标S5.9)z=float[07E2H*2-9]=3.94140625若左移一位,取高字z=float[0FC5H*2-10]=3.94238125例.dataSTABLE:.word1024*525/100;Q10.word32768*751/1000;Q15.bssCOEFF,2.bssVALUE.textLDP#0SPM1SETCSXMMAR*,AR4LARAR4,#COEFFRPT#1BLPD#STABLE,*+LARAR4,#COEFFLTCOEFF+1MPY*SPHVALUE;Q10•用泰勒级数表示•编一段计算sin值的程序(x1用Q15表示)5.sin函数的求解))))98x1(76x1(54x1(32x1(x!9x!7x!5x!3xxxsin222297536.cos函数的求解)))871(651(431(2118642122228642xxxx!x!x!x!xxcos•用泰勒级数表示•编一段计算cos值的程序(x1用Q15表示)§7.2调试环境代码编译器CC简介•TI公司为TMS320系列DSP提供了一个集成调试环境代码编译器CodeComposer(CC)•CC可完成DSP程序的编辑、汇编、链接和仿真•在系统上安装好代码编译器的软件之后,在桌面上出现两个快捷方式:•“SetupCC‘C2000”——用来对该编译器的运行环境进行配置。•“CC’C2000”——。集成调试环境。•双击“SetupCC‘C2000”进入编译器的运行环境配置§7.2调试环境代码编译器CC简介•TI公司为TMS320系列DSP提供了一个集成调试环境代码编译器CodeComposer(CC)•CC可完成DSP程序的编辑、汇编、链接和仿真•在系统上安装好代码编译器的软件之后,在桌面上出现两个快捷方式:•“SetupCC‘C2000”——用来对该编译器的运行环境进行配置。•“CC’C2000”——。集成调试环境。•双击“SetupCC‘C2000”进入编译器的运行环境配置•双击“CC’C2000”进入集成调试环境