版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、October 28, 2020,1,华中科技大学武昌分校,DSP原理及开发应用 黄向宇 ,October 28, 2020,2,第7章 汇编语言程序设计,7.1 程序流程控制 7.2 数据块传送 7.3 定点数的基本算术运算 7.4 长字运算和并行运算 7.5 FIR滤波器的DSP实现 7.6 IIR数字滤波器的DSP实现 7.7 FFT运算的DSP实现,October 28, 2020,3,7.1 程序流程控制,7.1.1 程序存储器地址生成 7.1.2 条件操作 7.1.3 分支转移 7.1.4 调用与返回 7.1.5 重复操作 7.1.6 TMS320C54x中断系统 7.1.7 堆栈
2、的使用,返回首页,October 28, 2020,4,7.1.1 程序存储器地址生成,程序存储器中存放指令代码、参数表和立即数。程序地址产生逻辑(PAGEN), 包括以下5个寄存器(如图7-1所示): 程序计数器(PC); 重复计数器(RC); 块重复计数器(BRC); 块重复起始地址寄存器(RSA); 块重复结束地址寄存器(REA)。,October 28, 2020,5,图7-1 程序地址产生逻辑(PAGEN)寄存器,返回本节,October 28, 2020,6,7.1.2 条件操作,表7-1 条件指令中的各种条件,October 28, 2020,7,表7-2 多条件指令中的条件组合
3、,返回本节,October 28, 2020,8,7.1.3 分支转移,表7-3 无条件分支转移指令,October 28, 2020,9,表7-4 条件分支转移指令,October 28, 2020,10,表7-5 远分支转移指令,返回本节,October 28, 2020,11,7.1.4 调用与返回,表7-6 无条件调用与返回指令,October 28, 2020,12,表7-7 条件调用与返回指令,October 28, 2020,13,表7-8 远调用和远返回指令,返回本节,October 28, 2020,14,7.1.5 重复操作,1单条指令的重复操作 RPT(重复执行下一条指令
4、)和RPTZ(累加器清0后重复执行下一条指令)可重复执行其后的一条指令,重复的次数是指令操作数加1,这个值保存在16位的重复计数寄存器(RC)中,这个值只能由重复指令(RPT或RPTZ)加载,而不能编程设置RC寄存器中的值,一次给定指令重复执行的最大次数是65536。,October 28, 2020,15,2块重复操作指令 块重复指令RPTB用于将一个码块重复执行N1次,N是装入块重复计数器(BRC)的值。一个码块可以有一条或多条指令。单条重复指令执行时关闭所有可屏蔽中断,而块重复操作执行期间可以响应中断。,返回本节,October 28, 2020,16,7.1.6 TMS320C54x中
5、断系统,1中断类型 C54x支持软件中断和硬件中断。软件中断由程序指令产生(INTR、TRAP或RESET)。硬件中断由设备的一个信号产生,包括两种类型:外部硬件中断由外部中断口的信号触发;内部硬件中断由片内外设的信号触发。无论是硬件中断还是软件中断,都属于以下两种类型: (1)可屏蔽中断 (2)非屏蔽中断,October 28, 2020,17,表7-9 C5402中断源的中断向量及硬件中断优先权,October 28, 2020,18,October 28, 2020,19,2中断标志寄存器(IFR)和中断屏蔽寄存器(IMR) 中断标志寄存器(IFR)是存储器映象的CPU寄存器。如图7-2
6、所示为C5402中断标志寄存器(IFR)结构图。中断屏蔽寄存器(IMR)也是存储器映象的CPU寄存器,用来屏蔽外部和内部的可屏蔽中断,其结构图同IFR完全一致。,October 28, 2020,20,图7-2 中断标志寄存器(IFR)结构图,October 28, 2020,21,3中断响应过程(如图7-3所示) (1)接受中断请求。 (2)响应中断。 (3)执行中断服务程序(ISR)。,October 28, 2020,22,图7-3 中断操作流程图,October 28, 2020,23,4重新映象中断向量地址 C54x的中断向量表是可重定位的,即在DSP复位时,中断向量表的起始地址固定
7、为0FF80H,复位后,此表的起始地址可由用户指定。 中断向量可重新被映象到程序存储器的任何一个128字页开始的地方(除保留区域外)。中断向量地址由PMST中的中断向量指针IPTR(9位)和中断向量号(031)左移两位后组成。如图7-4所示。,October 28, 2020,24,中断向量号左移两位后,中断向量地址,图7-4 中断向量地址的产生,返回本节,October 28, 2020,25,7.1.7 堆栈的使用,堆栈被用于保存中断程序、调用子程序的返回地址,也用于保护和恢复用户指定的寄存器和数据,还可用于程序调用时的参数传递。返回地址是由DSP自动保存的。 用户编写的压栈指令和出栈指令
8、将指定的内容压入和弹出堆栈,SP总是指向最后压入堆栈的数据,压栈之前SP减1,出栈之后SP加1。,October 28, 2020,26,C54x支持软件堆栈,在用户指定的存储区开辟一块存储区作为堆栈存储器。堆栈的定义及初始化步骤为: 1)声明具有适当长度的未初始化段; 2)将堆栈指针指向栈底; 3)在链接命令文件(.cmd)中将堆栈段放入内部数据存储区。,返回本节,October 28, 2020,27,7.2 数据块传送,C54x有10条数据传送指令,为: 数据存储器数据存储器:MVDK Smem,dmad MVKD dmad,Smem MVDD Xmem,Ymem 数据存储器MMR:MV
9、DM dmad,MMR MVMD MMR,dmad MVMM mmr,mmr,返回首页,October 28, 2020,28,程序存储器数据存储器: MVPD Pmad,Smem MVDP Smem,Pmad READA Smem WRITA Smem,October 28, 2020,29,1编写汇编源程序为 .mmregs .def _c_int00 .data TBL: .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,1 PROM:.u
10、sect PROM,20 .bss a,20 .bss x,20 .bss y,20 DATA:.usectDATA,20 .text,October 28, 2020,30,_c_int00 b start nop nop start: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
11、RPT #19 MVDD *AR2+,*AR3+,October 28, 2020,31,STM #a,AR1;将数据存储器中的a20写入到程序存储器PROM LD #PROM,A STM #19,AR3 LOOPP: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,A LOOP2: READA *AR1+ ;该指令为单字指令 WAIT: NOP B WAIT,October 28, 2020,
12、32,2建立汇编源程序 点击CCS C5000图标,进入CCS环境,再点击FileNewSource File菜单命令,打开一个空白文档,将汇编源程序逐条输入。 单击FileSave菜单命令,出现如图7-5所示的窗口,选择D:Program Filesti myprojcetsmymove子目录,在“文件名”一栏中输入mymove,并选择保存类型为Assembly Source Files(*.asm),单击“保存”按钮,以上汇编程序被存盘。,October 28, 2020,33,3建立链接命令文件 点击FileNewSource File菜单命令,打开一个空白文档,逐条输入链接命令文件。
13、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=100h DARAM2: origin=0200h,length=100h ,October 28, 2020,34,SECTIONS .data :RAM PAGE 0 .text :RAM PAGE 0 PROM:RAM1 PAGE 0 .bss:DARAM1 PAGE 1 DATA:DARAM
14、2 PAGE 1 点击FileSave菜单命令,如图7-5所示,选择D:Program Filestimyprojcetsmymove子目录,在“文件名”一栏中输入mymove,并选择保存类型为TI Command Language File(*.cmd),单击“保存”按钮,以上链接命令程序被存盘。,October 28, 2020,35,4创建一个新工程 在Project菜单中选择New项,弹出Project Creation(工程创建)窗口,如图7-6所示。在Project一栏键入mymove,然后单击“完成”按钮,CCS将创建一个名为mymove.pjt的工程,此文件保存了工程的设置信息
15、及工程中的文件引用情况。,October 28, 2020,36,图7-5 保存汇编源程序 图7-6 工程创建窗口,October 28, 2020,37,5将有关文件添加到工程中 从Project菜单中选取Add Files to Project命令,选择文件mymove.asm,双击将mymove.asm添加到工程中。 点击ProjectAdd Files to Project菜单命令,将mymove.cmd添加到工程文件中。 逐层打开如图7-7所示。双击mymove.asm打开文件,可以观察和修改mymove.asm文件的内容。,October 28, 2020,38,6汇编、编译和链接
16、产生.out文件 点击Project菜单中的Rebuild All。请注意在监视窗口显示的汇编、编译和链接的相关信息。如果没有错误,将产生mymove.out文件;如果有错,在监视窗口以红色字体显示出错行,用鼠标双击该行,光标跳将至源程序相应的出错行。修改错误后,重新汇编、链接。,October 28, 2020,39,7加载并运行.out文件 执行菜单命令FileLoad Program,选择mymove.out并打开,将Rebuild All生成的程序加载到DSP中。CCS将自动打开一个反汇编窗口,显示加载程序的反汇编指令。 点击DebugRun菜单命令运行程序,单步执行程序则点击Debu
17、gStepInto菜单命令,或按F8键。,October 28, 2020,40,8观察运行结果 点击ViewMemory菜单命令,将出现如图7-8所示的选项窗口,将Address改为0 x0100,单击OK按钮,将在汇编窗口显示选定的数据空间的内容。 当结果数据错误时,可检查源程序并进行修改。修改完毕,可重新汇编、链接,再加载运行.out文件,直到结果正确。,返回本节,October 28, 2020,41,7.3 定点数的基本算术运算,7.3.1 加法、减法和乘法运算 7.3.2 定点除法运算,返回首页,October 28, 2020,42,7.3.1 加法、减法和乘法运算,1定点DSP
18、中数据表示方法 定点DSP芯片的数值表示是基于2的补码表示形式。数的定标有Q表示法和S表示法,表7-10列出了16位数的16种Q表示和S表示,以及它们所能表示的十进制数范围。16位中有一个符号位、Q个小数位和15-Q个整数位来表示一个数。,October 28, 2020,43,表7-10 Q表示、S表示及数值范围,October 28, 2020,44,图7-9 DSP定点运算中小数的表示,October 28, 2020,45,216位定点加法和16位定点减法 C54x中提供了多条用于加法的指令,如ADD、ADDC、ADDM和ADDS。其中,ADDS用于无符号数的加法运算,ADDC用于带进
19、位的加法运算而ADDM专用于立即数的加法。 C54x中提供了多条用于减法的指令,如SUB、SUBB、SUBC和SUBS。其中,SUBS用于无符号数的减法运算,SUBB用于带进位的减法运算,而SUBC为条件减法指令。,October 28, 2020,46,316位定点整数乘法 C54x中提供了大量的乘法运算指令,其结果都是32位,放在累加器A或B中。乘数在C54x的乘法指令中很灵活,可以是T寄存器、立即数、存储单元和累加器A或B的高16位。在C54x中,一般对数据的处理都当做有符号数,如果是无符号数相乘,使用MPYU指令,这是一条专门用于无符号数乘法运算的指令,其他指令都是有符号数的乘法。,O
20、ctober 28, 2020,47,4Q15定点小数乘法运算 两个16位整数相乘,乘积总是“向左增长”,这就意味着多次相乘后乘积将会很快超出定点器件的数据范围。而且要将32位乘积保存到数据存储器,就要耗费两个机器周期以及两个字的程序和RAM单元。然而,两个Q15的小数相乘,乘积总是“向右增长”,这就意味着超出定点器件数据范围的将是不太感兴趣的部分。,October 28, 2020,48,5混合表示法 有些情况下,运算过程中为了既满足数值的动态范围又保证一定的精度,必须采用Q0与Q15之间的表示方法。 在做加、减运算时,如果两个操作数的定标不一样,在运算前要进行小数点的调整,为保证运算精度,
21、需要使Q值小的数调整为与另一个数的Q值一样大。,返回本节,October 28, 2020,49,7.3.2 定点除法运算,在一般的DSP中,没有专门的除法指令。同样,在C54x中也没有提供专门的除法指令。一般有两种方法来完成除法。一种是用乘法来代替,除以某个数相当于乘以其倒数,所以先求出其倒数,然后相乘。这种方法对于除以常数特别适用。另一种方法是使用条件减法SUBC指令,加上重复指令RPT #15,重复16次减法完成无符号数除法运算。两种不同情况下的除法程序。 1|被除数|除数|,商为小数 2|被除数|除数|,商为整数,返回本节,October 28, 2020,50,7.4 长字运算和并行
22、运算,7.4.1 长字运算 7.4.2 并行运算,返回首页,October 28, 2020,51,7.4.1 长字运算,C54x可以利用长操作数(32位)进行长字运算。如下所示为长字指令: DLDLmem,dst ;dst=Lmem DSTsrc,Lmem ;Lmem=src DADDLmem , src,dst;dst=src + Lmem DSUBLmem , src,dst ;dst=src Lmem DRSUBLmem , src,dst ;dst=Lmem - src,返回本节,October 28, 2020,52,7.4.2 并行运算,并行运算,就是同时利用D总线和E总线。其中
23、,D总线用来执行加载或算术运算,E总线用来存放先前的结果。在不引起硬件资源冲突的情况下,C54x允许某些指令并行执行(即同时执行),以提高执行速度。 并行指令有并行加载存储指令、并行加载乘法指令、并行存储乘法指令,以及并行存储加/减法指令,所有并行指令都是单字单周期指令。,返回本节,October 28, 2020,53,7.5 FIR滤波器的DSP实现,7.5.1 线性缓冲区法 7.5.2 循环缓冲区法 7.5.3 系数对称FIR滤波器的DSP实现,返回首页,October 28, 2020,54,数字滤波是DSP的最基本应用,利用MAC(乘、累加)指令和循环寻址可以方便地完成滤波运算。两种
24、常用的数字滤波器:FIR(有限冲激响应)滤波器和IIR(无限冲激响应)滤波器的DSP实现。 设FIR滤波器的系数为h(0),h(1), .,h(N-1),X(n)表示滤波器在n时刻的输入,则n时刻的输出为:,(7-1),October 28, 2020,55,其对应的滤波器传递函数为: 如图7-10所示为横截型(又称直接型或卷积型)FIR数字滤波器的结构图。,图7-10 横截型FIR数字滤波器的结构图,(7-2),October 28, 2020,56,线性缓冲区法又称延迟线法。其方法是:对于n=N的FIR滤波器,在数据存储器中开辟一个N单元的缓冲区,存放最新的N个样本;滤波时从最老的样本开始
25、,每读一个样本后,将此样本向下移位;读完最后一个样本后,输入最新样本至缓冲区的顶部。 以上过程,可以用N=6的线性缓冲区示意图来说明,如图7-11所示,7.5.1 线性缓冲区法,October 28, 2020,57,图7-11 N=6的线性缓冲区示意图,返回本节,October 28, 2020,58,7.5.2 循环缓冲区法,图7-12说明了使用循环寻址实现FIR滤波器的方法。对于N级FIR滤波器,在数据存储区开辟一个称为滑窗的具有N个单元的缓冲区,滑窗中存放最新的N个输入样本值。每次输入新的样本时,新的样本将改写滑窗中最老的数据,其他数据则不需要移动。,October 28, 2020,
26、59,图7-12 FIR滤波器循环缓冲区存储器图,October 28, 2020,60,【例7-12】用循环缓冲区和双操作数寻址方法编写实现FIR滤波的程序。 1FIR滤波器设计 设计一个FIR低通滤波器,通带边界频率为1500Hz,通带波纹小于1dB;阻带边界频率为2000Hz,阻带衰减大于40dB;采样频率为8000Hz。FIR滤波器的设计可以用MATLAB窗函数法进行。,October 28, 2020,61,2产生滤波器输入信号的文件 按照通常的程序调试方法,先用Simulator逐步调试各子程序模块,再用硬件仿真器在实际系统中与硬件仪器联调。使用CCS的Simulator进行滤波器
27、特性测试时,需要输入时间信号x(n)。本例设计一个采样频率Fs为8000Hz,输入信号频率为1000Hz和2500Hz的合成信号,通过设计的低通滤波器将2500Hz信号滤掉,余下1000Hz信号。,October 28, 2020,62,3编写FIR数字滤波器的汇编源程序 FIR数字滤波器汇编程序fir.asm如下: *一个FIR滤波器源程序 fir.asm* .mmregs .global start .def start,_c_int00 INDEX .set 1 KS.set 256 ;输入样本数据个数 COEF_FIR.sect COEF_FIR;FIR滤波器系数 N .set 17
28、;FIR滤波器阶数,October 28, 2020,63,.word 0,158,264,-290,-1406,-951,3187,9287,12272 .word9287,3187,-951,-1406,-290,264,158,0 .data INPUT.copy firin.inc;输入数据在数据区0 x2400 OUTPUT.space1024;输出数据在数据区0 x2500 COEFTAB .usectFIR_COEF,N DATABUF.usectFIR_BFR,N BOS.usectSTACK,0Fh TOS.usectSTACK,1 .text .asgAR0,INDEX_P
29、,October 28, 2020,64,.asgAR4,DATA_P;输入数据x(n)循环缓冲区指针 .asgAR5,COEF_P;FIR系数表指针 .asg AR6,INBUF_P;模拟输入数据指针 .asgAR7,OUTBUF_P ;FIR滤波器输出数据指针 _c_int00 b start nop nopstart: SSBxFRCT ;小数乘法编程时,设置FRCT(小数方式)位 MVPD#COEF_FIR,*COEF_P+ STM#INDEX,INDEX_P,October 28, 2020,65,STM#DATABUF,DATA_P;数据循环缓冲区清零 RPTZA,#N-1 STL
30、A,*DATA_P+ STM#(DATABUF+N-1),DATA_P;数据循环缓冲区指针指向xn-(N-1) STM#COEFTAB,COEF_P STM #COEFTAB,COEF_P;将FIR系数从程序存储器移到数据存储器 RPT #N-1 FIR_TASK: STM#INPUT,INBUF_P STM #OUTPUT,OUTBUF_P,October 28, 2020,66,STM#KS-1,BRC RPTBDLOOP-1 STM#N,BK;FIR循环缓冲区大小 LD*INBUF_P+,A;装载输入数据 FIR_FILTER: ;FIR滤波运算 STLA,*DATA_P+%;用最新的样
31、本值替代最旧的样本值 RPTZA,N-1 MAC*DATA_P+0%,*COEF_P+0%,A STHA,*OUTBUF_P+ LOOP: EENDB EEND .end,October 28, 2020,67,4编写FIR滤波器链接命令文件 对应以上汇编程序的链接命令文件fir.cmd如下: fir.obj -m fir.map -ofir.out MEMORY PAGE 0:ROM1(RIX):ORIGIN=0080H,LENGTH=100H PAGE 1:INTRAM1(RW) :ORIGIN=2400H,LENGTH=0200H INTRAM2(RW) :ORIGIN=2600H,LE
32、NGTH=0100H,October 28, 2020,68,INTRAM3(RW) :ORIGIN=2700H,LENGTH=0100H B2B(RW):ORIGIN=0070H,LENGTH=10H SECTIONS .text :ROM1PAGE 0 .data : INTRAM1 PAGE 1 FIR_COEF: INTRAM2 PAGE 1 FIR_BFR : INTRAM3 PAGE 1 .stack : B2B PAGE 1 ,October 28, 2020,69,5CCS集成开发环境下上机操作过程 (1)在CCS上建立fir工程并运行fir.out程序。 (2)观察输入信号的
33、波形及频谱(如图7-137-15所示)。 (3)观察输出信号的波形及频谱(如图7-16、7-17所示 )。,October 28, 2020,70,图7-13 Graph 属性设置窗口,October 28, 2020,71,图7-14 输入信号的时域波形,图7-15 输入信号的频谱图,October 28, 2020,72,图7-16 滤波器输出信号时域波形,图7-17 滤波器输出信号频谱图,返回本节,October 28, 2020,73,7.5.3 系数对称FIR滤波器的DSP实现,1在数据存储器中开辟两个循环缓冲区: New循环缓冲区中存放N/2=4个新数据(设N=8);Old循环缓冲
34、区中存放4个老数据。循环缓冲区的长度为N/2。缓冲区指针AR2指向New 缓冲区中最新的数据;AR3指向Old 缓冲区中最老的数据,并在程序存储器中设置系数表,如图7-18所示。,October 28, 2020,74,2.(AR2)+(AR3)AH(累加器A的高位) (AR2)-1AR2,(AR3)-1AR3 3将累加器B清0,重复执行以下操作N/2次(i=0,1,2,3): (AH)系数ai+(B)B,系数指针(PAR)加1 (AR2)+(AR3)AH,AR2 和AR3减1 并保存或输出结果(结果在BH中)。,October 28, 2020,75,4修正数据指针 将AR2和AR3分别指向
35、New缓冲区中最新的数据和Old 缓冲区中最老的数据。用New 缓冲区最老的数据替代Old 缓冲区中最老的数据,如图7-18中箭头所示。Old 缓冲区指针减1。 5输入一个新的数据替代New 缓冲区中最老的数据 重复执行步骤25。,返回本节,October 28, 2020,76,7.6 IIR数字滤波器的DSP实现,IIR数字滤波器的传递函数H(z)为: 其对应的差分方程为: 例如,对于直接形式的二阶IIR数字滤波器,其结构如图7-19所示,编程时,可以分别开辟四个缓冲区,存放输入、输出变量和滤波器的系数,如图7-20所示。,(7-4),(7-3),返回首页,October 28, 2020
36、,77,图7-19 直接形式的二阶IIR数字滤波器,October 28, 2020,78,图7-20 存放输入、输出变量和滤波器系数的缓冲区,October 28, 2020,79,【例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) 设计结果为:,October 28,
37、 2020,80,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,October 28, 2020,81,2产生滤波器输入信号的文件 使用CCS的Simulator进行滤波器特性的测试时,需要输入时间信号x(n)。 #include #include void main() int i; double f256; FILE *fp; if(fp=f
38、open(iirin.inc,wt)=NULL) printf(cant open file! n); return; ,October 28, 2020,82,fprintf(fp,INPUT: .sect %cINPUT %cn,); for(i=0;i=255;i+) fi=sin(2*3.14159*i*4000/16000)+sin(2*3.14159*i*6500/16000); fprintf(fp, .word%1dn,(long)(fi*32768/2); fclose(fp); ,October 28, 2020,83,该程序将产生名为iirin.inc的输入信号程序,内容
39、如下: INPUT:.sectINPUT .word0 .word25486 .word-15136 .word-314 .word-11585 .word19580 .word6270 .word-30006 .word16383 然后,在DSP汇编语言程序中通过.copy汇编命令将生成的数据文件iirin.inc复制到汇编程序中,作为IIR滤波器的输入数据。,October 28, 2020,84,3直接型IIR数字滤波器汇编源程序的编写 直接型IIR数字滤波器汇编程序diir.asm如下: *直接型IIR数字滤波器通用程序* .title diir.asm .mmregs .global
40、start .def start,_c_int00 N .set16 .copy iirin.inc;输入信号x(n)数据 table;IIR滤波器系数 .word 63, 0, -188, 0, 188, 0, -63 .word 0, 11675, 0, 9663, 0, 2948 .data,October 28, 2020,85,BN .usect BN,N+1 AN .usect AN,N+1 INBUF .usectINBUF,256;输入缓冲区在数据区0 x2400 OUTPUT .usect OUTPUT,256;输出缓冲区在数据区0 x2600 .text .asgAR0,I
41、NDEX_P .asgAR2,XN_P .asgAR3,ACOFF_P .asgAR4,YN_P .asgAR5,BCOFF_P _c_int00 b start nop nop start:SSBXFRCT,October 28, 2020,86,SSBX OVM SSBX SXM STM#BN+N,AR1 RPT#N MVPD#table,*AR1-; ;将bi由程序区存放到数据区 STM#AN+N-1,AR1 RPT#N-1 MVPD#table+N+1,*AR1- ;将ai由程序区存放到数据区 STM#OUTPUT,AR1 RPTZA,#255 STL A,*AR1+ ;输出数据缓冲区
42、清零 STM#INBUF,AR1 RPT#255 MVPD#INPUT,*AR1+ ;将输入数据由程序区,October 28, 2020,87,STM#OUTPUT,YN_P STM#INBUF,XN_P STM#N-1,INDEX_P STM#255,BRC RPTB LOOP-1 IIR: SUB A,A STM#BN,BCOFF_P STM#AN,ACOFF_P RPT#N-1;计算前向通道 MAC*XN_P+,*BCOFF_P+,A MAC*XN_P,*BCOFF_P,A,October 28, 2020,88,MAR *XN_P-0 ;将AR2指针指向x(n-N) RPT #N-1
43、;计算反馈通道 MAC*YN_P+,*ACOFF_P+,A STHA,*YN_P-0;保存y(n) LOOP: EEND B EEND .end,October 28, 2020,89,4IIR滤波器链接命令文件的编写 对应以上汇编程序的链接命令文件diir.cmd如下: diir.obj -o diir.out -m diir.map MEMORY PAGE 0: ROM: ORIGIN=0080H, LENGTH=1000H PAGE 1: SPRAM: ORIGIN=0060H,LENGTH=0020H DARAM: ORIGIN=0080H, LENGTH=1380H RAM1: OR
44、IGIN=2400H, LENGTH=0200H RAM2: ORIGIN=2600H, LENGTH=0200H SECTIONS,October 28, 2020,90, .text:ROM PAGE 0 .data:DARAM PAGE 1 BN:DARAM PAGE 1 AN:DARAM PAGE 1 INBUF:RAM1 PAGE 1 OUTPUT:RAM2 PAGE 1 ,返回本节,October 28, 2020,91,7.7 FFT运算的DSP实现,7.7.1 基二实数FFT运算的算法 7.7.2 FFT运算模拟信号的产生及输入 7.7.3 实序列FFT汇编源程序及链接命令文件 7.7.4 观察信号时域波形及其频谱,返回首页,October 28, 2020,92,7.7.1 基二实数FFT运算的算法,该算法主要分为以下四步。 第一步,输入数据的组合和位倒序 把输入序列作位倒序是为了在整个运算最后的输出中得到的序列是自然顺序。如图7-21所
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 会所包厢转让合同范本
- 合伙入股项目合同范本
- 合同审查法律服务协议
- 中心医院应聘笔试题及答案
- 印刷包装三方合同协议
- 农行提前还款合同范本
- 关于离职补偿金协议书
- 2026年一级注册建筑师之建筑结构考试题库300道附答案(培优a卷)
- 刷脸支付产品合同范本
- 公司汽车租凭合同范本
- 生产安全事故十大典型案例
- 《参与家乡文化建设》优秀导学案(统编版高一必修上)共3篇
- GA 1805-2022危险化学品经营企业反恐怖防范要求
- 工学院班团建设经费相关说明(含申报及报销所需材料模板).20211025194841
- 四级劳动关系协调员操作技能试题库
- GB/T 9446-1988焊接用插销冷裂纹试验方法
- GB/T 7701.1-2008煤质颗粒活性炭气相用煤质颗粒活性炭
- GB/T 475-2008商品煤样人工采取方法
- GB/T 3390.3-2013手动套筒扳手传动附件
- FZ/T 73019.2-2020针织塑身内衣调整型
- 《劳动合同法讲解》课件
评论
0/150
提交评论