已阅读5页,还剩93页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第7章 汇编语言程序设计,7.1 程序流程控制7.2 数据块传送7.3 定点数的基本算术运算7.4 长字运算和并行运算7.5 FIR滤波器的DSP实现7.6 IIR数字滤波器的DSP实现7.7 FFT运算的DSP实现,7.1 程序流程控制,7.1.1 程序存储器地址生成7.1.2 条件操作7.1.3 分支转移7.1.4 调用与返回7.1.5 重复操作7.1.6 TMS320C54x中断系统7.1.7 堆栈的使用,7.1.1 程序存储器地址生成,程序存储器中存放指令代码、参数表和立即数。程序地址产生逻辑(PAGEN), 包括以下5个寄存器(如图7-1所示): 程序计数器(PC);重复计数器(RC);块重复计数器(BRC);块重复起始地址寄存器(RSA);块重复结束地址寄存器(REA)。,图7-1 程序地址产生逻辑(PAGEN)寄存器,7.1.2 条件操作,表7-1 条件指令中的各种条件,表7-2 多条件指令中的条件组合,7.1.3 分支转移,表7-3 无条件分支转移指令,表7-4 条件分支转移指令,表7-5 远分支转移指令,7.1.4 调用与返回,表7-6 无条件调用与返回指令,表7-7 条件调用与返回指令,表7-8 远调用和远返回指令,7.1.5 重复操作(1),1单条指令的重复操作RPT(重复执行下一条指令)和RPTZ(累加器清0后重复执行下一条指令)可重复执行其后的一条指令,重复的次数是指令操作数加1,这个值保存在16位的重复计数寄存器(RC)中,这个值只能由重复指令(RPT或RPTZ)加载,而不能编程设置RC寄存器中的值,一次给定指令重复执行的最大次数是65536。,7.1.5 重复操作(2),2块重复操作指令块重复指令RPTB用于将一个码块重复执行N1次,N是装入块重复计数器(BRC)的值。一个码块可以有一条或多条指令。单条重复指令执行时关闭所有可屏蔽中断,而块重复操作执行期间可以响应中断。,7.1.6 TMS320C54x中断系统(1),1中断类型C54x支持软件中断和硬件中断。软件中断由程序指令产生(INTR、TRAP或RESET)。硬件中断由设备的一个信号产生,包括两种类型:外部硬件中断由外部中断口的信号触发;内部硬件中断由片内外设的信号触发。无论是硬件中断还是软件中断,都属于以下两种类型:(1)可屏蔽中断 (2)非屏蔽中断,表7-9 C5402中断源的中断向量及硬件中断优先权,表7-9 C5402中断源的中断向量及硬件中断优先权(续),7.1.6 TMS320C54x中断系统(2),2中断标志寄存器(IFR)和中断屏蔽寄存器(IMR)中断标志寄存器(IFR)是存储器映象的CPU寄存器。如图7-2所示为C5402中断标志寄存器(IFR)结构图。中断屏蔽寄存器(IMR)也是存储器映象的CPU寄存器,用来屏蔽外部和内部的可屏蔽中断,其结构图同IFR完全一致。,图7-2 中断标志寄存器(IFR)结构图,7.1.6 TMS320C54x中断系统(3),3中断响应过程(如图7-3所示)(1)接受中断请求。 (2)响应中断。(3)执行中断服务程序(ISR)。,图7-3 中断操作流程图,7.1.6 TMS320C54x中断系统(4),4重新映象中断向量地址C54x的中断向量表是可重定位的,即在DSP复位时,中断向量表的起始地址固定为0FF80H,复位后,此表的起始地址可由用户指定。中断向量可重新被映象到程序存储器的任何一个128字页开始的地方(除保留区域外)。中断向量地址由PMST中的中断向量指针IPTR(9位)和中断向量号(031)左移两位后组成。如图7-4所示。,中断向量号左移两位后,中断向量地址,图7-4 中断向量地址的产生,7.1.7 堆栈的使用(1),堆栈被用于保存中断程序、调用子程序的返回地址,也用于保护和恢复用户指定的寄存器和数据,还可用于程序调用时的参数传递。返回地址是由DSP自动保存的。 用户编写的压栈指令和出栈指令将指定的内容压入和弹出堆栈,SP总是指向最后压入堆栈的数据,压栈之前SP减1,出栈之后SP加1。,7.1.7 堆栈的使用(2),C54x支持软件堆栈,在用户指定的存储区开辟一块存储区作为堆栈存储器。堆栈的定义及初始化步骤为:1)声明具有适当长度的未初始化段;2)将堆栈指针指向栈底;3)在链接命令文件(.cmd)中将堆栈段放入内部数据存储区。,7.2 数据块传送(1),C54x有10条数据传送指令,为:数据存储器数据存储器:MVDK Smem,dmad MVKD dmad,Smem MVDD Xmem,Ymem数据存储器MMR:MVDM dmad,MMR MVMD MMR,dmad MVMM mmr,mmr,7.2 数据块传送(2),程序存储器数据存储器: MVPD Pmad,Smem MVDP Smem,Pmad READA Smem WRITA Smem,.mmregs .def _c_int00 .dataTBL: .word0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,1 7,18,19 .word 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1PROM: .usect PROM,20 .bss a,20 .bss x,20 .bss y,20DATA: .usectDATA,20 .text,1编写汇编源程序为,_c_int00 b start nop nopstart:STM: #a,AR1;a20=0,1,2,3,4,5,6,7,8,9,10, ;11,12,13,14,15,16,17,18,19 RPT #39 ;x20=1,1,1,1,1,1,1,1,1,1 MVPD TBL,*AR1+ ;1,1,1,1,1,1,1,1,1,1 STM #x,AR2;将数据存储器中的数组x20复制到;数组y20 STM #y,AR3 RPT #19 MVDD *AR2+,*AR3+,STM #a,AR1;将数据存储器中的a20写入到程序 ;存储器PROM LD #PROM,A STM #19,AR3LOOPP:WRITA *AR1+ ADD #1,A,A BANZ LOOPP,*AR3- LD #PROM-1,A ;读程序存储器PROM中20个数 ;据存入数据存储器DATA STM#DATA,AR1 ST #19,BRC RPTB LOOP2 ADD #1,A,ALOOP2: READA *AR1+ ;该指令为单字指令WAIT: NOP B WAIT,点击CCS C5000图标,进入CCS环境,再点击FileNewSource File菜单命令,打开一个空白文档,将汇编源程序逐条输入。单击FileSave菜单命令,出现如图7-5所示的窗口,选择D:Program Filesti myprojcetsmymove子目录,在“文件名”一栏中输入mymove,并选择保存类型为Assembly Source Files(*.asm),单击“保存”按钮,以上汇编程序被存盘。,2建立汇编源程序,点击FileNewSource File菜单命令,打开一个空白文档,逐条输入链接命令文件。 mymove.obj -o mymove.out -m mymove.map MEMORY PAGE 0:RAM: origin=1000h,length=800h RAM1: origin=2000h,length=300h PAGE 1:DARAM1: origin=0100h,length=100hDARAM2: origin=0200h,length=100h ,3建立链接命令文件,SECTIONS .data :RAM PAGE 0.text :RAM PAGE 0PROM:RAM1 PAGE 0.bss:DARAM1 PAGE 1DATA:DARAM2 PAGE 1点击FileSave菜单命令,如图7-5所示,选择D:Program Filestimyprojcetsmymove子目录,在“文件名”一栏中输入mymove,并选择保存类型为TI Command Language File(*.cmd),单击“保存”按钮,以上链接命令程序被存盘。,4创建一个新工程,在Project菜单中选择New项,弹出Project Creation(工程创建)窗口,如图7-6所示。在Project一栏键入mymove,然后单击“完成”按钮,CCS将创建一个名为mymove.pjt的工程,此文件保存了工程的设置信息及工程中的文件引用情况。,图7-5 保存汇编源程序 图7-6 工程创建窗口,5将有关文件添加到工程中,从Project菜单中选取Add Files to Project命令,选择文件mymove.asm,双击将mymove.asm添加到工程中。点击ProjectAdd Files to Project菜单命令,将mymove.cmd添加到工程文件中。逐层打开如图7-7所示。双击mymove.asm打开文件,可以观察和修改mymove.asm文件的内容。,6汇编、编译和链接产生.out文件,点击Project菜单中的Rebuild All。请注意在监视窗口显示的汇编、编译和链接的相关信息。如果没有错误,将产生mymove.out文件;如果有错,在监视窗口以红色字体显示出错行,用鼠标双击该行,光标跳将至源程序相应的出错行。修改错误后,重新汇编、链接。,7加载并运行.out文件,执行菜单命令FileLoad Program,选择mymove.out并打开,将Rebuild All生成的程序加载到DSP中。CCS将自动打开一个反汇编窗口,显示加载程序的反汇编指令。点击DebugRun菜单命令运行程序,单步执行程序则点击DebugStepInto菜单命令,或按F8键。,8观察运行结果,点击ViewMemory菜单命令,将出现如图7-8所示的选项窗口,将Address改为0x0100,单击OK按钮,将在汇编窗口显示选定的数据空间的内容。当结果数据错误时,可检查源程序并进行修改。修改完毕,可重新汇编、链接,再加载运行.out文件,直到结果正确。,7.3 定点数的基本算术运算,7.3.1 加法、减法和乘法运算7.3.2 定点除法运算,7.3.1 加法、减法和乘法运算,1定点DSP中数据表示方法定点DSP芯片的数值表示是基于2的补码表示形式。数的定标有Q表示法和S表示法,表7-10列出了16位数的16种Q表示和S表示,以及它们所能表示的十进制数范围。16位中有一个符号位、Q个小数位和15-Q个整数位来表示一个数。,表7-10 Q表示、S表示及数值范围,图7-9 DSP定点运算中小数的表示,216位定点加法和16位定点减法,C54x中提供了多条用于加法的指令,如ADD、ADDC、ADDM和ADDS。其中,ADDS用于无符号数的加法运算,ADDC用于带进位的加法运算而ADDM专用于立即数的加法。 C54x中提供了多条用于减法的指令,如SUB、SUBB、SUBC和SUBS。其中,SUBS用于无符号数的减法运算,SUBB用于带进位的减法运算,而SUBC为条件减法指令。,316位定点整数乘法,C54x中提供了大量的乘法运算指令,其结果都是32位,放在累加器A或B中。乘数在C54x的乘法指令中很灵活,可以是T寄存器、立即数、存储单元和累加器A或B的高16位。在C54x中,一般对数据的处理都当做有符号数,如果是无符号数相乘,使用MPYU指令,这是一条专门用于无符号数乘法运算的指令,其他指令都是有符号数的乘法。,4Q15定点小数乘法运算,两个16位整数相乘,乘积总是“向左增长”,这就意味着多次相乘后乘积将会很快超出定点器件的数据范围。而且要将32位乘积保存到数据存储器,就要耗费两个机器周期以及两个字的程序和RAM单元。然而,两个Q15的小数相乘,乘积总是“向右增长”,这就意味着超出定点器件数据范围的将是不太感兴趣的部分。,5混合表示法,有些情况下,运算过程中为了既满足数值的动态范围又保证一定的精度,必须采用Q0与Q15之间的表示方法。在做加、减运算时,如果两个操作数的定标不一样,在运算前要进行小数点的调整,为保证运算精度,需要使Q值小的数调整为与另一个数的Q值一样大。,7.3.2 定点除法运算,在一般的DSP中,没有专门的除法指令。同样,在C54x中也没有提供专门的除法指令。一般有两种方法来完成除法。一种是用乘法来代替,除以某个数相当于乘以其倒数,所以先求出其倒数,然后相乘。这种方法对于除以常数特别适用。另一种方法是使用条件减法SUBC指令,加上重复指令RPT #15,重复16次减法完成无符号数除法运算。两种不同情况下的除法程序。1|被除数|ROM1PAGE 0.data : INTRAM1 PAGE 1FIR_COEF: INTRAM2 PAGE 1FIR_BFR : INTRAM3 PAGE 1.stack : B2B PAGE 1 ,5CCS集成开发环境下上机操作过程(1)在CCS上建立fir工程并运行fir.out程序。 (2)观察输入信号的波形及频谱(如图7-137-15所示)。(3)观察输出信号的波形及频谱(如图7-16、7-17所示 )。,例题1(5),图7-13 Graph 属性设置窗口,图7-14 输入信号的时域波形,图7-15 输入信号的频谱图,图7-16 滤波器输出信号时域波形,图7-17 滤波器输出信号频谱图,7.5.3 系数对称FIR滤波器的DSP实现(1),1在数据存储器中开辟两个循环缓冲区:New循环缓冲区中存放N/2=4个新数据(设N=8);Old循环缓冲区中存放4个老数据。循环缓冲区的长度为N/2。缓冲区指针AR2指向New 缓冲区中最新的数据;AR3指向Old 缓冲区中最老的数据,并在程序存储器中设置系数表,如图7-18所示。,7.5.3 系数对称FIR滤波器的DSP实现(2),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中)。,7.5.3 系数对称FIR滤波器的DSP实现(3),4修正数据指针将AR2和AR3分别指向New缓冲区中最新的数据和Old 缓冲区中最老的数据。用New 缓冲区最老的数据替代Old 缓冲区中最老的数据,如图7-18中箭头所示。Old 缓冲区指针减1。5输入一个新的数据替代New 缓冲区中最老的数据重复执行步骤25。,7.6 IIR数字滤波器的DSP实现,IIR数字滤波器的传递函数H(z)为:其对应的差分方程为:例如,对于直接形式的二阶IIR数字滤波器,其结构如图7-19所示,编程时,可以分别开辟四个缓冲区,存放输入、输出变量和滤波器的系数,如图7-20所示。,(7-4),(7-3),图7-19 直接形式的二阶IIR数字滤波器,图7-20 存放输入、输出变量和滤波器系数的缓冲区,例题2(1),【例7-15】设计一个三阶的切比雪夫型带通数字滤波器,其采样频率Fs =16kHz,其通频带3.2kHz5.6kHz为阻带,其衰减大于20dB。1IIR滤波器的设计在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=3 wn =0.4000 0.6000 b0=0.0114747a0=1.000000 b1=0 a1=0 b2=-0.034424 a2=2.13779 b3=0 a3=0 b4=0.034424 a4=1.76935 b5=0 a5=0 b6=-0.0114747 a6=0.539758,2产生滤波器输入信号的文件使用CCS的Simulator进行滤波器特性的测试时,需要输入时间信号x(n)。 #include #include void main() int i; double f256; FILE *fp; if(fp=fopen(iirin.inc,wt)=NULL) printf(cant open file! n); return; ,例题2(2),fprintf(fp,INPUT: .sect %cINPUT %cn,);for(i=0;iROM PAGE 0.data:DARAM PAGE 1BN:DARAM PAGE 1AN:DARAM PAGE 1 INBUF:RAM1 PAGE 1OUTPUT:RAM2 PAGE 1,7.7 FFT运算的DSP实现,7.7.1 基二实数FFT运算的算法7.7.2 FFT运算模拟信号的产生及输入7.7.3 实序列FFT汇编源程序及链接命令文件7.7.4 观察信号时域波形及其频谱,7.7.1 基二实数FFT运算的算法(1),该算法主要分为以下四步。第一步,输入数据的组合和位倒序把输入序列作位倒序是为了在整个运算最后的输出中得到的序列是自然顺序。如图7-21所示。第二步,N点复数FFT在DATA数据处理缓冲器里进行N点复数FFT运算。如图7-22所示。,7.7.1 基二实数FFT运算的算法(2),第三步,分离复数FFT的输出为奇部分和偶部分分离FFT输出为RP、RM、IP和IM四个序列,即偶实数、奇实数、偶虚数和奇虚数四部分。第四步,产生2N点的复数FFT输出序列产生2N=256个点的复数输出,它与原始的256个点的实输入序列的DFT一致。如图7-24所示。,7.7.2 FFT运算模拟信号的产生及输入,产生模拟输入信号可以有两种方法,第一种方法是用C语言程序产生mdata.inc文件,然后,在DSP汇编语言程序中通过.copy汇编命令将生成的数据文件mdata.inc复制到汇编程序中,如例7-12和例7-15,数据起始地址标号为INPUT,段名为INPUT。第二种方法是首先建立与输入信号对应的数据流文件mdata.dat,其数据格式如下: 1651 1 0 1 0 0x1f400x1f40 ,7.7.3 实序列FFT汇编源程序及链接命令文件,【例7-16】256点实序列FFT的DS
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 电子设备装接工安全生产能力考核试卷含答案
- 建设工程质量检测员岗前活动策划考核试卷含答案
- 橡胶制胶工岗前诚信考核试卷含答案
- 生物农药生产工创新应用能力考核试卷含答案
- 信息通信信息化系统管理员岗中技术管理考核试卷含答案
- 化工检修钳工岗位安全评优考核试卷含答案
- 广告合规审查员岗前安全实践考核试卷含答案
- 织布机操作工岗位操作考核试卷含答案
- 保健刮痧师操作技能知识考核试卷含答案
- 焙烧炉焙烧工岗位安全责任制能力考核试卷含答案
- 2026-2027学年第一学期二年级班主任工作计划
- 2026经常项目外汇业务知识竞赛题库及答案
- 2026 年教师节感恩师长弘扬尊师重教风尚课件
- 2026 年全民国防教育日增强国防观念厚植爱国情怀课件
- ISO 249142026 食物链微生物学 用于检测微生物和相关遗传标记的环介导等温扩增(LAMP) 一般要求和定义标准立项发展报告
- 抗菌药物耐药革兰阴性菌感染治疗指南总结2026
- 《地质公园拟建项目对地质遗迹及生态影响评价报告》编写提纲
- 玻璃安装安全技术交底
- 2023 单元式空气调节机
- 2026-2030浴霸行业市场发展现状分析及竞争格局与投资价值研究报告
- 2025高中语文新课标18个学习任务群及分类
评论
0/150
提交评论