第4章_C54x的汇编语言程序设计.ppt_第1页
第4章_C54x的汇编语言程序设计.ppt_第2页
第4章_C54x的汇编语言程序设计.ppt_第3页
第4章_C54x的汇编语言程序设计.ppt_第4页
第4章_C54x的汇编语言程序设计.ppt_第5页
已阅读5页,还剩106页未读 继续免费阅读

下载本文档

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

文档简介

第4章TMS320C54x汇编语言程序设计,4.1概述4.1.1汇编语言源程序格式汇编语言程序以.asm为扩展名,可以用任意的编辑器编写源文件。一条语句占源程序的一行,长度可以是源文件编辑器格式允许的长度,但汇编器每行最多读200个字符。因此,语句的执行部分必须限制在200个字符以内。,4.1.1汇编语言源程序格式,1.源文件格式助记符指令源语句的每一行通常包含4个部分:标号区、助记符区、操作数区和注释区。助记符指令语法格式:标号:助记符操作数;注释,【例4.1.1】助记符指令源语句举例。NANHUA.set1;符号NANHUA1Begin:LD#NANHUA,AR1;将1加载到AR1,标号,助记符,操作数,注释,1.源文件格式,语句的书写规则:所有语句必须以标号、空格、星号或分号(*或;)开始;标号是可选项,若使用标号,则标号必须从第一列开始;所有包含有汇编伪指令的语句必须在一行完成指定;各部分之间必须用空格分开,Tab字符与空格等效;,1.源文件格式,语句的书写规则:程序中注释是可选项。如果注释在第一列开始时,前面必须标上星号或分号,在其他列开始的注释前面必须以分号开头;如果源程序很长,可以在前一行用反斜杠字符()结束,余下部分接着在下一行继续书写。,2.标号,所有汇编指令和大多数汇编伪指令都可以选用标号,供本程序或其它程序调用。标号必须从语句的第1列写起,其后的冒号“:”可任选;若不使用标号,则语句的第一列必须是空格、星号或分号;标号是由字母、数字以及下划线和美元符号等组成,最多可达32个字符;标号分大小写,且第一个字符不能是数字。,3.助记符,助记符用来表示指令所完成的操作,可以是汇编语言指令、汇编伪指令、宏伪指令。助记符指令:一般用大写,不能从第一列开始;汇编伪指令:用来为程序提供数据和控制汇编进程。以句号“.”开始,且用小写;宏伪指令:用来定义一段程序,以便宏调用来调用这段程序。以句号“.”开始,且用小写;宏调用:用来调用由宏伪指令定义的程序段。,4.操作数,(1)指令的操作数前缀汇编器允许指定的常数、符号或表达式作为地址、立即数或间接地址。作为操作数的前缀有三种情况:使用“#”符号作为操作数的前缀;使用“*”符号作为操作数的前缀;使用“”符号作为操作数的前缀。,4.操作数,(2)伪指令的立即数将“#”加在数值之前而构成的立即数方式,主要用在指令中。例如:SUB#18,B;操作数#18为立即数例如:.byte18立即数方式没有使用,但汇编器认为操作数是一个数值18(即立即数),用18数值初始化一个字节。,5.注释,用来说明指令功能的文字,便于用户阅读。注释可位于句首或句尾,位于句首时,以“*”或“;”开始,位于句尾时,以分号“;”开始。注释可单独一行或数行;注释是任选项。1100000.bsssym,;保留空间于.bss*改变段,允许第五个mylab定义*,4.1.2汇编语言中的常数与字符串,汇编器可支持7种类型的常数(常量)。,4.1.3汇编源程序中的符号,汇编程序中的符号用于标号、常数和替代字符。由字母、数字以及下划线和美元符号(AZ,az,09,_和$)等组成;符号名最多可长达200个字符;在符号中,第1位不能是数字,并且符号中不能含空格。,4.1.3汇编源程序中的符号,通常,标号是局部变量,在一个文件中局部使用的标号必须是唯一的。助记符操作码和汇编伪指令名(不带前缀“.”)为有效标号。标号分大小写。例如:ABC,Abc,abc是3个不同的符号。,4.1.4汇编源程序中的表达式,4.1.4汇编源程序中的表达式,1.运算符C54x汇编器使用与C语言相似的优先级。取正(+)、负()和乘(*)比二进制形式有较高的优先级。2.条件表达式汇编器支持关系运算符,可以用于任何表达式。=等于=等于!=不等于=大于或等于大于ROM1PAGE0.data:INTRAM1PAGE1FIR_COEF:INTRAM2PAGE1FIR_BFR:INTRAM3PAGE1.stack:B2BPAGE1,5CCS集成开发环境下上机操作过程(1)在CCS上建立fir工程并运行fir.out程序。(2)观察输入信号的波形及频谱(如图7-137-15所示)。(3)观察输出信号的波形及频谱(如图7-16、7-17所示)。,Graph属性设置窗口,输入信号的时域波形,输入信号的频谱图,滤波器输出信号时域波形,滤波器输出信号频谱图,4.5.3系数对称FIR滤波器的DSP实现,1在数据存储器中开辟两个循环缓冲区:New循环缓冲区中存放N/2=4个新数据(设N=8);Old循环缓冲区中存放4个老数据。循环缓冲区的长度为N/2。缓冲区指针AR2指向New缓冲区中最新的数据;AR3指向Old缓冲区中最老的数据,并在程序存储器中设置系数表,如图7-18所示。,2.(AR2)+(AR3)AH(累加器A的高位)(AR2)-1AR2,(AR3)-1AR33将累加器B清0,重复执行以下操作N/2次(i=0,1,2,3):(AH)系数ai+(B)B,系数指针(PAR)加1(AR2)+(AR3)AH,AR2和AR3减1并保存或输出结果(结果在BH中)。,4修正数据指针将AR2和AR3分别指向New缓冲区中最新的数据和Old缓冲区中最老的数据。用New缓冲区最老的数据替代Old缓冲区中最老的数据,如图7-18中箭头所示。Old缓冲区指针减1。5输入一个新的数据替代New缓冲区中最老的数据重复执行步骤25。,4.6IIR数字滤波器的DSP实现,IIR数字滤波器的传递函数H(z)为:其对应的差分方程为:例如,对于直接形式的二阶IIR数字滤波器,其结构如图7-19所示,编程时,可以分别开辟四个缓冲区,存放输入、输出变量和滤波器的系数,如图7-20所示。,直接形式的二阶IIR数字滤波器,存放输入、输出变量和滤波器系数的缓冲区,【例7-15】设计一个三阶的切比雪夫型带通数字滤波器,其采样频率Fs=16kHz,其通频带3.2kHz5.6kHz为阻带,其衰减大于20dB。1IIR滤波器的设计在MATLAB中设计IIR滤波器,程序为:wp=3.2,4.8;ws=2.4,5.6;rp=1;rs=20n,wn=cheb1ord(wp/8,ws/8,rp,rs)b,a=cheby1(n,rp,wn)设计结果为:,N=3wn=0.40000.6000b0=0.0114747a0=1.000000b1=0a1=0b2=-0.034424a2=2.13779b3=0a3=0b4=0.034424a4=1.76935b5=0a5=0b6=-0.0114747a6=0.539758,2产生滤波器输入信号的文件使用CCS的Simulator进行滤波器特性的测试时,需要输入时间信号x(n)。#include#includevoidmain()inti;doublef256;FILE*fp;if(fp=fopen(iirin.inc,wt)=NULL)printf(cantopenfile!n);return;,fprintf(fp,INPUT:.sect%cINPUT%cn,);for(i=0;iROMPAGE0.data:DARAMPAGE1BN:DARAMPAGE1AN:DARAMPAGE1INBUF:RAM1PAGE1OUTPUT:RAM2PAGE1,4.7FFT运算的DSP实现,4.7.1基二实数FFT运算的算法4.7.2FFT运算模拟信号的产生及输入4.7.3实序列FFT汇编源程序及链接命令文件4.7.4观察信号时域波形及其频谱,4.7.1基二实数FFT运算的算法,该算法主要分为以下四步。第一步,输入数据的组合和位倒序把输入序列作位倒序是为了在整个运算最后的输出中得到的序列是自然顺序。如图7-21所示。第二步,N点复数FFT在DATA数据处理缓冲器里进行N点复数FFT运算。如图7-22所示。,第三步,分离复数FFT的输出为奇部分和偶部分分离FFT输出为RP、RM、IP和IM四个序列,即偶实数、奇实数、偶虚数和奇虚数四部分。第四步,产生2N点的复数FFT输出序列产生2N=256个点的复数输出,它与原始的256个点的实输入序列的DFT一致。如图7-24所示。,4.7.2FFT运算模拟信号的产生及输入,产生模拟输入信号可以有两种方法,第一种方法是用C语言程序产生mdata.inc文件,然后,在DSP汇编语言程序中通过.copy汇编命令将生成的数据文件mdata.inc复制到汇编程序中,如例7-12和例7-15,数据起始地址标号为INPUT,段名为INPUT。第二种方法是首先建立与输入信号对应的数据流文件mdata.dat,其数据格式如下:165110100 x1f400 x1f40,4.7.3实序列FFT汇编源程序及链接命令文件,【例7-16】256点实序列FFT的DSP实现。256点实序列FFT汇编源程序如下:*Radix-2,DIT,Real-inputFFTProgram*fft.asm*.mmregs.globalreset,start,sav_sin,sav_idx,sav_grp.defstart,_c_int00.data,DATA.space1024.copymdata1.inc;mdata1.inc为模拟输入信号数据,起始地址标号INPUTN.set128;复数点数LOGN.set7;蝶形级数sav_grp.usecttempv,3;定义组变量值sav_sin.setsav_grp+1;定义旋转因子表sav_idx.setsav_grp+2OUTPUT.usectOUTPUT,256;信号功率谱BOS.usectstack,0Fh;定义堆栈TOS.usectstack,1.copytwiddle1.inc;正弦表系数由twiddle1.inc文件给出,起始地址标号TWI1,.copytwiddle2.inc;余弦表系数由twiddle2.inc文件给出,起始地址标号TWI2.text_c_int00bstartnopnopstart:STM#TOS,SPLD#0,DPSSBXFRCT*,4.7.4观察信号时域波形及其频谱,经程序计算得到的信号功率谱放在数据存储区0 x2000开始的

温馨提示

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

评论

0/150

提交评论