c54x汇编语言程序设计,第4章_C54x的汇编语言程序设计.ppt

本文详细介绍了TMS320C54x汇编语言源程序的基本结构,包括源文件格式、标号、助记符指令、操作数和注释的规则。还涵盖了常数与字符串处理,以及符号的使用规范。同时提到了CCS集成开发环境中的上机操作过程和特定技术应用,如系数对称FIR滤波器和FFT运算的实现。
摘要由CSDN通过智能技术生成

第4章TMS320C54x汇编语言程序设计,4.1概述4.1.1汇编语言源程序格式汇编语言程序以.asm为扩展名,可以用任意的编辑器编写源文件。一条语句占源程序的一行,长度可以是源文件编辑器格式允许的长度,但汇编器每行最多读200个字符。因此,语句的执行部分必须限制在200个字符以内。,4.1.1汇编语言源程序格式,1.源文件格式助记符指令源语句的每一行通常包含4个部分:标号区、助记符区、操作数区和注释区。助记符指令语法格式:[标号][:]助记符[操作数][;注释],【例4.1.1】助记符指令源语句举例。NANHUA.set1;符号NANHUA=1Begin:LD#NANHUA,AR1;将1加载到AR1,,,标号,,助记符,,,操作数,注释,1.源文件格式,语句的书写规则:①所有语句必须以标号、空格、星号或分号(*或;)开始;②标号是可选项,若使用标号,则标号必须从第一列开始;③所有包含有汇编伪指令的语句必须在一行完成指定;④各部分之间必须用空格分开,Tab字符与空格等效;,1.源文件格式,语句的书写规则:⑤程序中注释是可选项。如果注释在第一列开始时,前面必须标上星号或分号,在其他列开始的注释前面必须以分号开头;⑥如果源程序很长,可以在前一行用反斜杠字符(\)结束,余下部分接着在下一行继续书写。,2.标号,所有汇编指令和大多数汇编伪指令都可以选用标号,供本程序或其它程序调用。①标号必须从语句的第1列写起,其后的冒号“:”可任选;②若不使用标号,则语句的第一列必须是空格、星号或分号;③标号是由字母、数字以及下划线和美元符号等组成,最多可达32个字符;④标号分大小写,且第一个字符不能是数字。,3.助记符,助记符用来表示指令所完成的操作,可以是汇编语言指令、汇编伪指令、宏伪指令。助记符指令:一般用大写,不能从第一列开始;汇编伪指令:用来为程序提供数据和控制汇编进程。以句号“.”开始,且用小写;宏伪指令:用来定义一段程序,以便宏调用来调用这段程序。以句号“.”开始,且用小写;宏调用:用来调用由宏伪指令定义的程序段。,4.操作数,(1)指令的操作数前缀汇编器允许指定的常数、符号或表达式作为地址、立即数或间接地址。作为操作数的前缀有三种情况:使用“#”符号作为操作数的前缀;使用“*”符号作为操作数的前缀;[email protected],4.操作数,(2)伪指令的立即数将“#”加在数值之前而构成的立即数方式,主要用在指令中。例如:SUB#18,B;操作数#18为立即数例如:.byte18立即数方式没有使用,但汇编器认为操作数是一个数值18(即立即数),用18数值初始化一个字节。,5.注释,用来说明指令功能的文字,便于用户阅读。注释可位于句首或句尾,位于句首时,以“*”或“;”开始,位于句尾时,以分号“;”开始。注释可单独一行或数行;注释是任选项。1100000.bsssym,;保留空间于.bss***************************************改变段,允许第五个‘mylab’定义***************************************,4.1.2汇编语言中的常数与字符串,汇编器可支持7种类型的常数(常量)。,4.1.3汇编源程序中的符号,汇编程序中的符号用于标号、常数和替代字符。由字母、数字以及下划线和美元符号(A~Z,a~z,0~9,_和$)等组成;符号名最多可长达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},5.CCS集成开发环境下上机操作过程(1)在CCS上建立fir工程并运行fir.out程序。(2)观察输入信号的波形及频谱(如图7-13~7-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)-1→AR2,(AR3)-1→AR33.将累加器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缓冲区中最老的数据重复执行步骤2~5。,4.6IIR数字滤波器的DSP实现,IIR数字滤波器的传递函数H(z)为:其对应的差分方程为:例如,对于直接形式的二阶IIR数字滤波器,其结构如图7-19所示,编程时,可以分别开辟四个缓冲区,存放输入、输出变量和滤波器的系数,如图7-20所示。,,直接形式的二阶IIR数字滤波器,,,存放输入、输出变量和滤波器系数的缓冲区,【例7-15】设计一个三阶的切比雪夫Ⅰ型带通数字滤波器,其采样频率Fs=16kHz,其通频带3.2kHz5.6kHz为阻带,其衰减大于20dB。1.IIR滤波器的设计在MATLAB中设计IIR滤波器,程序为:wp=[3.2,4.8];ws=[2.4,5.6];rp=1;rs=20[n,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;doublef[256];FILE*fp;if((fp=fopen("iirin.inc","wt"))==NULL){printf("cantopenfile!\n");return;},fprintf(fp,"INPUT:.sect%cINPUT%c\n",",");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.copy"mdata1.inc";mdata1.inc为模拟输入信号数据,起始地址标号INPUTN.set128;复数点数LOGN.set7;蝶形级数sav_grp.usect"tempv",3;定义组变量值sav_sin.setsav_grp+1;定义旋转因子表sav_idx.setsav_grp+2OUTPUT.usect"OUTPUT",256;信号功率谱BOS.usect"stack",0Fh;定义堆栈TOS.usect"stack",1.copy"twiddle1.inc";正弦表系数由twiddle1.inc文件给出,起始地址标号TWI1,.copy"twiddle2.inc";余弦表系数由twiddle2.inc文件给出,起始地址标号TWI2.text_c_int00bstartnopnopstart:STM#TOS,SPLD#0,DPSSBXFRCT*****************************************************************,4.7.4观察信号时域波形及其频谱,经程序计算得到的信号功率谱放在数据存储区0 x2000开始的256个单元中。在CCS中选择View→Graph→Time/Frequency命令,选择程序区0 x9000开始的256个单元中,DisplayType分别选择为FFTMagnitude和SingleTime,则信号频谱图及其时域波形如图7-25上半部分所示。将起始地址改为0 x2000,page选项改为data,SamplingRate为256,DisplayType为SingleTime,如图7-25。,输入信号时域波形、频谱图及其功率谱,

展开阅读全文

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值