DSP开发技术实验复习.doc_第1页
DSP开发技术实验复习.doc_第2页
DSP开发技术实验复习.doc_第3页
DSP开发技术实验复习.doc_第4页
DSP开发技术实验复习.doc_第5页
已阅读5页,还剩5页未读 继续免费阅读

下载本文档

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

文档简介

3.1.2 file#include FILE *fptr;void main() printf(Hello World!n); fptr = fopen(myfile.txt, wb+); if(fptr=NULL) puts(error); fprintf(fptr,Hello, world); fclose(fptr);3.1.3 addasm; ADD 简单程序的汇编实现 .fileaddasm.asm.mmregs .global _aadasm .text_aadasm: LD #10,A ;10-A ld #2,B add A,B loop:nopnopnopb loop .end3.1.4 CandASM/* ADD 简单程序的实现 */#include int add;void main()add=cadd(10,20);aadasm();for(;);int cadd(int a,int b) int result; result=a+b; return result;3.2.2片上存储器实验DARAM 读写实验TMS320VC5416 的片上 DARAM 大小为 64K16-bit(64K bytes)。DARAM 在一个机器 周期内能被访问两次,因此 DARAM 提高了系统的性能。DARAM 由 8 块 8K16-bit 模块组 成(见下图)。每个模块在一个周期内能够执行两次读取或一次读取一次写入或两次写入。4 块 DARAM 位于数据空间 000080h007FFFh 的地址范围内;其余四块 DARAM 位于程 序空间的 18000H-1FFFFH 的地址范围内,这四块 DARAM 通过控制 PMST 寄存器的 DROM 位可映射到数据空间。3.2.3SRAM 测试实验SRAM 地址分配SEED-DEC5416 模板上还外扩了 SRAM(基本配置为 64K x 16 位,最大可配 512K x16 位)。片外扩展的 SRAM 具体映射则由 SEED-DEC5416 模板上扩展的寄存器 memcntl控制。memcntl 位于VC5416 的 I/O 空间,其地址为 0x0000;其控制位定义如下:D7D6D5D4D3D2D1D0BootMMAP1MMAP0DPA19DPA18DPA17DPA16DPA15Boot:上电自举控制位,VC5416 数据空间高 32K 控制权的选择复位值为 00数据空间高 32K 由VC5416 的 MP/MC 引脚状态决定 MP/MC = 0:外扩的 FLASH 占用数据空间的高 32K MP/MC = 1:外扩的 SRAM 占用数据空间的高 32K1数据空间高 32K 由 MMAP1:0控制位决定MMAP1:0:VC5416 数据空间高 32K 映射选择 复位值为 00B00外扩的 SRAM 占用数据空间的高 32K01外扩的 FLASH 占用数据空间的高 32K10扩展总线的 CE0 空间占用数据空间的高 32K11保留DPA19:15:VC5416 数据空间的高 32K 扩展至 1M 的页地址 复位值为 00000BBoot = 0 时,储存空间根据 MP/MC 引脚状态自动配置MP/MC 引脚状态 = 0:外扩的 SRAM 占用程序空间的 1631 页MP/MC 引脚状态 = 1:外扩的 SRAM 占用数据空间的高 32K,页地址由 DPA19:15给出;Boot =1 时,存储空间的映射由 MMAP1:0控制位决定,与 MP/MC 引脚状态无关MMAP1:0 = 00B:外扩的 SRAM 占用数据空间的高 32K,页地址由 DPA19:15给出;外扩的FLASH 占用程序空间的015 页MMAP1:0 = 01B:外扩的 SRAM 占用程序空间的 1631 页;外扩的FLASH 占用数据空间的高32K,页地址由 DPA19:15给出MMAP1:0 = 10B:外扩的 SRAM 占用程序空间的 1631 页;外扩的FLASH 占用程序空间的015 页数据空间分配BOOT=1,DROM=0,MMAP1:0 = 00时0页SRAM地址:8000FFFFH1页0页SRAM地址:180001FFFFH3.3.1汇编语言基本程序设计(一)3.3.1.5.1实验项目(一)“程序的控制与转移”实验步骤:* * 学习循环操作指令:BANZ * *.title Exp3-1.asm.mmregs.def _c_int00STACK .usect STACK,10H;堆栈的设置.bss x,5;为变量分配6个字的存储空间.bss y,1.datatable: .word 10,20,3,4,5;x1,x2,x3,x4,x5.text_c_int00:STM #0,SWWSR;插入0个等待状态STM #STACK+10H,sp;设置堆栈指针STM #x,AR1;AR1指向xRPT #4;下一条被重复执行5遍MVPD table,*AR1+;把程序存储器中的数据传送到数据存储器LD #0,A;A清零CALL SUM;调用求和函数end: B endSUM:STM #x,AR3;AR3指向xSTM #4,AR2;AR2=4loop: ADD *AR3+,A;*AR3+A-A,然后AR3+BANZ loop,*AR2-;如果AR2的值不为0,则跳到loop处;否则执行下一条指令STL A,*(y);把A的低16位赋给变量yRET.end其它实验的链接配置文件都可以参考该实验的例程来完成:MEMORYPAGE 0: /*定义程序存贮区*/ EPROM:org=0090H len=0F70H/*定义EPROM区,起始地址0090H,长度0F70H*/ VECS: org=0080H len=0010H/*定义VECS区,起始地址0080H,长度0010H*/PAGE 1: /*定义数据存贮区*/ SPRAM:org=1000H len=1000H/*定义SPRAM区,起始地址1000H,长度1000H*/ DARAM:org=2000H len=2000H/*定义DARAM区,起始地址2000H,长度2000H*/SECTIONS.text :EPROM PAGE 0/*将.text段映射到PAGE0的EPROM区*/.data :EPROM PAGE 0/*将.text段映射到PAGE0的EPROM区*/.bss :SPRAM PAGE 1/*将.text段映射到PAGE1的SPRAM区*/STACK :DARAM PAGE 1/*将.text段映射到PAGE1的DARAM区*/.vectors :VECS PAGE 0 /*将中断向量表定位到PAGE0的VECS区*/7、编写中断向量表文件/* vectors.asm */.title vectors.asm/*中断向量表的文件名*/.ref_c_int00/*引用外部定义的标号*/.sect .vectors/*定义初始化的段名*/B_c_int00/*引用start*/.end3.3.1.5.2实验项目(一)“堆栈的使用方法”实验步骤:* 学习堆栈的使用方法* .title Exp3-2.asm .mmregs .def_c_int00size .set100stack .usectSTK,size;堆栈的设置 .bsslength,10H .text_c_int00:STM #0,SWWSR;插入0个等待状态 STM #stack+size,SP;设置堆栈的指针 LD#0DBFH,A ;随便设置一个数 STM #length,AR1 MVMMSP,AR7loop: STLA,*AR7- BANZloop,*AR1- LD #0,A ;A=0 CALL ADDONE ;调用子程序,观察堆栈内容here: B hereADDONE: ADD #1,A ;A+1-A RET ;返回主程序,观察堆栈变化 .end3.3.2汇编语言基本程序设计(二)编写程序,实现y=。用长字运算指令实现,用并行运算指令实现z=x+y和f=e+d。3.3.2.5.1实验项目(一)“双操作数乘法指令”实验步骤:* *用单操作数指令方案实现 *y=(a1*x1+a2*x2+a19*x19+a20*x20) * *.titleExp3a.asm.mmregsSTACK.usectSTACK,30H.bssa,20.bssx,20.bssy,2.datatable:.word1,2,3,4,5,6,7,8,9,10,11.word12,13,14,15,16,17,18,19,20.word21,22,23,24,25,26,27,28.word29,30,1,2,3,4,5,6,7,8,9,10.def start.textstart:STM#a,AR1;符号地址a的偏移放AR1RPT#39MVPDtable,*AR1+;转移数据,原因什么?LD#0,BSTM#a,AR2STM#x,AR3STM#19,BRC;19-BRC; PC+2-RSA(块首地址)RPTBdone-1LD*AR2+,T;单操作数指令MPY*AR3+,A;单操作数指令ADDA,Bdone:STHB,*(y)STLB,*(y+1)end:Bend.end*用进一步优化的方案实现 *y=(a1*x1+a2*x2+a19*x19+a20*x20) *.titleExp3b.asm.mmregsSTACK.usectSTACK,30H.bssa,20.bssx,20.bssy,2.datatable:.word1,2,3,4,5,6,7,8,9,10,11.word12,13,14,15,16,17,18,19,20.word21,22,23,24,25,26,27,28.word29,30,1,2,3,4,5,6,7,8,9,10.def start.textstart:STM#0,SWWSRSTM#STACK+30H,SPSTM#a,AR1RPT#39MVPDtable,*AR1+CALLSUM;调用中断子程序SUMend:BendSUM:STM#a,AR3;中断子程序SUMSTM#x,AR4RPTZA,#19;累加器A清零,并且重复执行下一条指令MAC*AR3+,*AR4+,A ;双操作数指令STLA,*(y)STHA,*(y+1)RET.end3.3.2.5.2实验项目(二)“长字运算和并行运算”实验步骤:*用长字运算实现32位加法运算Z=X+Y*.titleExp4.asm.mmregsSTACK.usectSTACK,10H.bssxhi,2,1,1.bssyhi,2,1,1.bsszhi,2,1,1.defstart.datatable:.long16782345H,10200345H.textstart:STM#0,SWWSRSTM#STACK+10H,SPSTM#xhi,AR1RPT#3MVPDtable,*AR1+DLD*(xhi),ADADD*(yhi),ADSTA,*(zhi)end:Bend.end用并行运算指令计算z=x+y和f=e+d.。建立项目工程文件Exp4-2,下面是源程序:*用并行指令计算z=x+y,f=e+d*.titleExp4-2.asm.mmregsSTACK.usectSTACK,10H.bssx,3.bssd,3.defstart.datatable:.word0123H,1027H,0,1020H,0345H,0.textstart:STM#0,SWWSRSTM#STACK+10H,SPSTM#x,AR1RPT#5MVPDtable,*AR1+STM#x,AR5STM#d,AR2LD#0,ASMLD*AR5+,16,AADD*AR5+,16,ASTA,*AR5;并行指令|LD*AR2+,BADD*AR2+,16,BSTHB,*AR2end:Bend.endExp5.asm.mmregs.def _c_int00.dataTBL:.word0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,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_c_int00b startnopnopstart: 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 ;1,1,1,1,1,1,1,1,1,1 MVPD TBL,*AR1+ STM #x,AR2 ; 将数据存储器中的数组x20复制到数组y20STM #y,AR3 STM #y,AR3 RPT #19 MVDD *AR2+,*AR3+STM #a,AR1;将数据存储器中的a20写入到程序存储器PROMLD #PROM,A STM #19,AR3LOOPP:WRITA *AR1+ADD #1,A,ABANZ LOOPP,*AR3-LD #PROM-1,A ; 读程序存储器PROM中20个数据存入数据存储器DATASTM #DATA,AR1ST #19,BRCRPTB LOOP2ADD #1,A,ALOOP2:READA *AR1+ WAIT:NOPB WAIT3.4.3有限冲击响应滤波器(FIR)算法实验3.4.3.2实验原理:设FIR滤波器的系数为h(0),h(1), .,h(N-1),X(n)表示滤波器在n时刻的输入,则n时刻的输出为: y(n) = h(0)x(n) + h(1)x(n-1) + . + h(N-1)xn-(N-1)使用MAC或FIRS指令可以方便地实现上面的计算。图1-1说明了使用循环寻址实现FIR滤波器的方法。为了能正确使用循环寻址,必须先初始化BK,块长为N。同时,数据缓冲区和冲激响应(FIR滤波器的系数)的开始地址必须是大于N的2的最小次方的倍数。例如,N=11,那么数据缓冲区的第一个地址应是16的倍数,开始地址的最低4位必须是0。图1-1 FIR滤波器线性缓存区的数据存储方式在图1-1中,滤波系数指针初始化时指向h(N-1),经过一次FIR滤波计算后,将缓存区的数据向下移位一次,输入新的数据样本x(n+2)到数据缓存区顶部,再将ARx指向缓存区底部。使用带MACD指令完成乘积累加后,将数据区整个下移动一次(输入数据在AL中,滤波结果在AH中)。 图1-2 FIR滤波器循环缓存区的数据存储方式 在图1-2中,滤波系数指针初始化时指向h(N-1),经过一次FIR滤波计算后,在循环寻址的作用下,仍然指向h(N-1)。而数据缓冲区指针指向的是需要更新的数据,如x(n+1)。在写入新数据并完,FIR运算后,该指针指向x(n-(N-2)。所以使用循环寻址可以方便地完成滤波窗口数据的自动更新。使用带MAC指令的循环寻址模式实现FIR滤波器的程序片段如下:(输入数据在AL中,滤波结果在AH中) STM #1,AR0; AR0=1 STM #N,BK; BK=N,循环寻址BUFFER大小为N STLA,*FIR_DATA_P+% ; 更新滤波窗口中的采样数据 RPTZ A,#(N-1);重复MAC指令N次,先将A清零 MAC *FIR_DATA_P+0%,*FIR_COFF_P+0%,A ; 完成滤波计算。注意FIR滤波系数存;放在数据存储区为FIR_COFF_P指定。在上面的程序片段中的MAC指令使用了两个操作数,DSP系统要求这两个操作数均在双访问数据空间中。许多应用场合,由于双访问存储器无法满足要求(如大小,资源紧张程度等等),而对DSP的滤波速度要求不高时,则可以使用MACP指令,用下面程序片段完成:STM#1,AR0;AR0=1STM#N,BK;BK=N, 循环寻址BUFFER大小为NSTLA,*FIR_DATA_P+% ; 更新滤波窗口中的采样数据RPTZ A,#(N-1);重复MACP指令N次,先将A清零 MACP *FIR_DATA_P+0%,COEFFS ,A; 完成滤波计算。注意FIR滤波系数存放;在程序存储区中,为COEFFS指定其首址3.4.3.5线性FIR实验步骤:1、编写源程序: 在工程管理器中双击Exp4-1.asm ,将出现文本编辑窗口,在该文本编辑窗口中输入如下内容: .titlefir filter .global_c_int00 .mmregsN.set64 ;64 taps FIR LOOP FilterDATACOUNT .set 200in_buffer.usect .in_dat, BUFFSIZE input .usect .in_dat, DATACOUNToutput .usect .out_dat,DATACOUNT .datacoeff:.word 19, 25, 31, 38, 43, 46, 43, 34.word 14, -17, -60, -113, -173, -234, -288, -326.word -338, -315, -246, -126, 49, 279, 558, 879.word 1226, 1583, 1931, 2251, 2524, 2732, 2862, 2906.word 2862, 2732, 2524, 2251, 1931, 1583, 1226, 879.word 558, 279, 49, -126, -246, -315, -338, -326.word -288, -234, -173, -113, -60, -17, 14, 34.word 43, 46, 43, 38, 31, 25, 19, 0 .text_c_int00: SSBX FRCT ;小数操作 STM #DATACOUNT,BK ;设置循环数据长度为200 fir_init:STM#in_buffer, AR3STM#input, AR2MVDD*AR2+,*AR3; 待滤波的数据开始进入循环缓冲区首位STM#output, AR5STM#in_buffer+N-1, AR1 ;AR1指示缓冲区最后一个数据FIR:RPTZ A,#(N-1)MACD *AR1-, coeff,A ;in_buffer整个下移STH A, *AR5+% ;乘积累加结果放入output,下移STM #in_buffer, AR3MVDD*AR2,*AR3 ;从input取新数据,放in_bufferMAR *AR2+% ; 输入input下移 STM#in_buffer+N-1, AR1 ;AR1指示缓冲区最后一个数据BFIR.end3.4.3.6循环FIR实验步骤:1、编写源程序: 在工程管理器中双击Exp4-2.asm ,将出现文本编辑窗口,在该文本编辑窗口中输入如下内容: ;* ;循环FIR滤波器源程序 fir.asm.mmregs.global start.def start,_c_int00 INDEX .set 1KS.set 256 ;模拟输入数据缓冲区大小N .set 17 COFF_FIR.sect COFF;FIR滤波器系数.word 0.word 158.word 264.word -290.word -1406.word -951.word 3187.w

温馨提示

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

评论

0/150

提交评论