过滤噪声 MATLAB实验报告.docx_第1页
过滤噪声 MATLAB实验报告.docx_第2页
过滤噪声 MATLAB实验报告.docx_第3页
过滤噪声 MATLAB实验报告.docx_第4页
过滤噪声 MATLAB实验报告.docx_第5页
已阅读5页,还剩19页未读 继续免费阅读

下载本文档

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

文档简介

DSP硬件实验报告 姓名 刘晓松 学号 08210929 班内序号 04 班级 2008211202 专业 电子信息科学与技术一. 简介 DSP芯片是比较复杂的高速微处理器。要开发基于DSP芯片的应用系统,从系统方案设计到具体的工程实现,是一个比较困难的工作,周期长,工作量大,成本高。为了深入学习DSP基础理论,掌握采用DSP进行系统设计的一般知识,提高开发DSP应用系统的能力,对DSP有一个深入全面的了解。我们采用理工达盛开发的EL-DSP-II实验教学系统。二 ,各部分实验程序代码的注释Exp1;File Name:exp01.asm;the program is compiled at no autoinitialization mode.mmregs.global _main_main: stm#3000h,sp;为sp堆栈指针寄存器赋予初值ssbxxf ;重新置位为xf,灯call delay ;调用延迟函数rsbxxf ;重置call delay ;调用延迟函数b _main nopnop ;delay .5 second延迟函数delay: stm 270fh,ar3 指定ar3寄存器地址loop1: stm 0f9h,ar4 指定矮人寄存器地址loop2:banz loop2,*ar4- 条件转移,每次转移ar4地址减一banz loop1,*ar3- 条件转移,每次转移ar3地址减一retnopnop;stm2 cycles;banzwhen TRUE 4 cycles; FALSE 2 cycles;0f9h=249d;270fh=9999d.endEXP2*File Name:exp02.asm;get some knowledge of the cmd file;the program is compiled at no autoinitialization mode.mmregs.global _main _main: ;store datastm 1000h,ar1 ;address of internal memory 指定内部寄存器ar1的地址为1000h;stm 5000h,ar1 ;address of exterior memory 指定外部寄存器ar1的地址为5000hrpt#07h ;循环执行下一条指令,循环次数07hst0aaaah,*ar1+ ;将ar1所指的内存赋予0aaaah,然后ar1所指地址加1 ;read data then re-store stm 7h,ar3 指定ar3地址7h;stm 5000h,ar1 ;address of exterior memory 指定外部存储地址为5000h;stm 5008h,ar2 ;address of exterior memory 指定外部存储地址为5008hstm1000h,ar1 寻址找到要读取的数据地址1000h1008hstm 1008h,ar2loop:ld*ar1+,t 循环读取1000h1008hstt,*ar2+ 赋予5000h5008hbanzloop,*ar3-here: b here.endEXP3;File Name :exp03.asm;learn how to operate the I/O ports;get some knowledge of the rts.lib file;in the I/O space 0x0000=8 switches; 0x0001=8 LEDs.mmregs.global_main.text_main: stm3100h,sp ; 将3100h赋予spstm1000h,ar1 ;define the addressportr00h,*ar1 ;将0x0000的值赋予*ar1,即8个开关状态nop nopportw*ar1,01h ;将*ar1的值赋予0x0001的值。即8个led的状态nopnop b _main nop nop .endEXP4#include interrupt void timer();/*extern void time();*/extern void initial();extern void porta();extern void portb();int flag=0;interrupt void timer() 定时器中断函数*(int *)0x300=*(int *)0x300+1; 定时不断加1if(*(int *)0x300=0x3e8) ;当定时器数值达到0x3e8,开始定时器中断*(int *)0x300=0; 为定时器重新赋予初值*(int *)0x302=*(int *)0x302+1; if(flag=0) ;如果flag为0,则将其变为1,执行porta()flag=1;porta();else ;如果flag为1,则将其变为1,执行portb()flag=0;portb(); return; main() 主函数initial(); 初始化while(1); ; 无限循环INITIAL.ASM.mmregs.global _initial_initial:stm 300h,ar1 ;initial 300h data addressst #00h,*ar1 ;为内存300h的内容赋予00hstm 302h,ar1 ;initial 302h data addressst #00h,*ar1 ;为内存302h的内容赋予00hstm200h,ar1st#5555h,*ar1 ;为内存200h的内容赋予5555h(0101010101010101)stm201h,ar1st#0aaaah,*ar1 为内存201h的内容赋予0aaaah(1010101010101010)stm202h,ar1st#400h,*ar1 为内存202h的内容赋予400h(0000010000000000)ssbx1,11 ;set ST1.INTM=1,stop all interrrupt 停止所有的中断stm 0ffffh,ifr;clear all interrupt indicate 清除所有中断的标志位 ,中断标志寄存器(IFR)用来指明各个中断的目前状态。stm 00h,imr ;set imr=0,stop all interrrupt 停止所有的中断 中断屏蔽寄存器(IMR)在需要的时候独立地屏蔽特定的中断stm 410h,tcr;stop timer 停止定时器stm 4e1fh,prd;set prd=4e1fh 设置定时器, 定时器周期计数器stm 420h,tcr;start timer 打开定时器 定时器控制寄存器stm 08h,imr ;allow timer interrupt 允许定时器中断rsbx 1,11 ;set ST1.INTM=0,start all interrrupt 打开所有中断retPORT.ASM.mmregs.global_porta.global_portb_porta:stm304h,ar1 st5555h,*ar1 ; 将内存304h的内容赋予5555h(0101010101010101)portw*ar1,01h ;将内存304h的值写入01h端口ret_portb:stm304h,ar1st0aaaah,*ar1;将内存304h的内容赋予0aaaah(1010101010101010)portw*ar1,01h;将内存304h的值写入01端口retVECTOR.ASM 中断向量函数 .sect .vectors .ref _c_int00 ; C entry point .ref _timer ;time interrupt point .align 0x80 ; must be aligned on page boundaryRESET: ; reset vector BD _c_int00 ; branch to C entry point STM #200,SP ; stack size of 200nmi: RETE ; enable interrupts and return from one NOP NOP NOP ;NMI ; software interruptssint17 .space 4*16sint18 .space 4*16 中断向量表sint19 .space 4*16sint20 .space 4*16sint21 .space 4*16sint22 .space 4*16sint23 .space 4*16sint24 .space 4*16sint25 .space 4*16sint26 .space 4*16sint27 .space 4*16sint28 .space 4*16sint29 .space 4*16sint30 .space 4*16int0: RETE NOP NOP NOPint1: RETE NOP NOP NOPint2: RETE NOP NOP NOPtint: b _timer 启动定时器中断 NOP NOPrint0: RETE NOP NOP NOPxint0: RETE NOP NOP NOPrint1: RETE NOP NOP NOPxint1: RETE NOP NOP NOPint3: RETE NOP NOP NOP .end EXP5interrupt void int2c(); extern void initial();extern voidporta();extern void portb();int flag=0;main()initial(); 初始化while(1); 无限循环 interrupt void int2c() 外部中断函数 asm(nop); 不采取任何函数*(int *)0x300=*(int *)0x300+2;/*break here to show if interrupt happened*/这是一个记录外部中断的标志,通过记录0x300h中的值来记录if(flag=0)flag=1; 如果flag为0,则将其变为1,执行porta()porta();elseflag=0; 如果flag为1,则将其变为1,执行portb()portb();INITIAL.ASM.mmregs.global _initial .text _initial:stm 300h,ar3 ;initial data 300hst #00h,*ar3 为内存300h赋予00hstm 302h,ar4st #00h,*ar4 为内存302h赋予00hssbx1,11 ; set m=1 stop all interrupt 启动st1,停止所有中断stm 00h,imr;stop all interrupt 为imr寄存器赋予00h,停止所有中断stm 0ffffh,ifr;clear all interrupt sign 为ifr寄存器赋予0ffffh,清除所有中断stm 04h,imr;allow int2 interrupt 开启int2的外部中断rsbx 1,11 ;allow all interrupt 打开所有中断总开关ret .endPORT.ASM 端口函数.mmregs.global_porta.global_portb_porta:stm304h,ar1st5555h,*ar1 为内存304h赋予5555h(0101010101010101)portw*ar1,01h 将5555h赋予端口01hret_portb:stm304h,ar1st0aaaah,*ar1 为内存304h赋予0aaaah(1010101010101010)portw*ar1,01h 将aaaah赋予端口01hretVECTOR.ASM 中断向量表 .sect .vectors .ref _c_int00 ; C entry point .ref _int2c .align 0x80 ; must be aligned on page boundaryRESET: ; reset vector BD _c_int00 ; branch to C entry point STM #200,SP ; stack size of 200nmi: RETE ; enable interrupts and return from one NOP NOP NOP ;NMI ; software interruptssint17 .space 4*16sint18 .space 4*16sint19 .space 4*16 中断向量表sint20 .space 4*16sint21 .space 4*16sint22 .space 4*16sint23 .space 4*16sint24 .space 4*16sint25 .space 4*16sint26 .space 4*16sint27 .space 4*16sint28 .space 4*16sint29 .space 4*16sint30 .space 4*16int0: RETE NOP NOP NOPint1: RETE NOP NOP NOPint2: 启动int2 外部中断b _int2c NOP NOPtint: RETE NOP NOP NOPrint0: RETE NOP NOP NOPxint0: RETE NOP NOP NOPrint1: RETE NOP NOP NOPxint1: RETE NOP NOP NOPint3: RETE NOP NOP NOP EXP6 AD采样实验extern void InitC5402(void);extern void OpenMcBSP(void);extern void CloseMcBSP(void);extern void READAD50(void);/* Main Function Program*/void main(void)主函数InitC5402(); /* initialize C5402 DSP */ 初始化c5402OpenMcBSP(); 打开McBSP()while (1) 无限循环READAD50(); /*mainloop */ 采样读取函数 /* End of File exp06.c*/.global _InitC5402 .global _OpenMcBSP.global _CloseMcBSP .global _READAD50 .global _WRITEAD50.include MMRegs.h_InitC5402:NOPLD #0, DP ; reset datapage pointeSTM #0, CLKMD ; software setting of DSP clock 软件设置DSP时钟STM #0, CLKMD ; (to divider mode before setting)STM #0x4007, CLKMD ; set C5402 DSP clock to 40MHz* STM #0x4007, CLKMD ; set C5402 DSP clock to 100MHz 设置时钟频率; (based on DSK crystal at 20MHz)* Configure C5402 System Registers *STM #0x2000, SWWSR ; 2 wait cycle for IO space &; 0 wait cycle for data&prog spaces (swwsr 外部总线S/W等待状态寄存器)STM #0x0000,BSCR ; set wait states for bank switch:; 64k mem bank, extra 0 cycle between ( bscr 外部总线块转换控制寄存器); consecutive prog/data readSTM #0x1800,ST0 ; ST0 at default setting 设置状态寄存器ST0,ST1STM #0x2900,ST1 ; ST1 at default setting(note:INTX=1)STM #0x00A0,PMST ; MC mode & OVLY=1, vectors at 0080h (PMST包括了存储器配置状态和控制信息)* Set up Timer Control Registers *STM #0x0010, TCR ; stop onchip timer0 设置timer0为主要的时钟寄存器;STM #0x0010, TCR1 ; stop onchip timer1; Timer0 is used as main loop timer;STM #2499, PRD ; timer0 rate=CPUCLK/1/(PRD+1) 定时器周期计数器; =40M/2500=16KHz* STM #6249, PRD ; if CPU at 100M/6250=16KHz * Initialize McBSP2 Registers *STM SPCR1, McBSP2_SPSA ; register subaddr of SPCR1 串口控制寄存器1置位0000hSTM #0000h, McBSP2_SPSD ; McBSP2 recv = leftjustify; RINT generated by frame syncSTM SPCR2, McBSP2_SPSA ; register subaddr for SPCR2 串口控制寄存器2置位0000h; XINT generated by frame syncSTM #0000h, McBSP2_SPSD ; McBSP2 Tx = FREE(clock stops; to run after SW breakpointSTM RCR1, McBSP2_SPSA ; register subaddr of RCR1 接收控制寄存器1置位0040hSTM #0040h, McBSP2_SPSD ; recv frame1 Dlength = 16 bitsSTM RCR2, McBSP2_SPSA ; register subaddr of RCR2 接收控制寄存器2置位0040hSTM #0040h, McBSP2_SPSD ; recv Phase = 1; ret frame2 Dlength = 16bitsSTM XCR1, McBSP2_SPSA ; register subaddr of XCR1 发送控制寄存器1置位0040hSTM #0040h, McBSP2_SPSD ; set the same as recvSTM XCR2, McBSP2_SPSA ; register subaddr of XCR2 发送控制寄存器2置位0040hSTM #0040h, McBSP2_SPSD ; set the same as recvSTM PCR, McBSP2_SPSA ; register subaddress of PCR 引脚控制寄存器置位000ehSTM #000eh, McBSP2_SPSD ; clk and frame from external (slave); FS at pulsemode(00)* Finish DSP Initialization * 完成初始化dspSTM #0x0000, IMR ; disable peripheral interrupts 禁止外部中断STM #0xFFFF, IFR ; clear the intrupts flags 重置中断标志位RET ; return to main 返回主函数NOPNOP * Waiting for McBSP0 RX Finished * 等待mcbsp0 接收采样数据完成IfRxRDY1:NOPSTM SPCR1, McBSP2_SPSA ; enable McBSP2 Rx 使能MCBSP2的接收LDM McBSP2_SPSD, AAND #0002h, A ; mask RRDY bit 标明RRDY的接收器的准备状态 复位BC IfRxRDY1, AEQ ; keep checking 如果RRDY为1,接收器准备就绪,可以采样接收数据NOPNOPRET ; returnNOPNOP* Waiting for McBSP0 TX Finished * 等待MCDSP0的TX完成IfTxRDY1:NOPSTM SPCR2, McBSP2_SPSA ; enable McBSP2 Tx 使能MCBSP2的发送LDM McBSP2_SPSD, AAND #0002h, A ; mask TRDY bit 标明TXDY,发送器的准备状态BC IfTxRDY1, AEQ ; keep checking 如果TXDY为1,发送器准备就绪,可以发送NOPNOPRET ; returnNOPNOP*_OpenMcBSP:rsbx xf ;状态寄存器重置call wait ; 转移到waitNOPSTM SPCR1, McBSP2_SPSA ; enable McBSP0 RX for ADC data in 使McBSP0 RX 接收AD采样数据LDM McBSP2_SPSD,AOR #0x0001, A ;接收控制寄存器 准备就绪STLM A, McBSP2_SPSD ;STM SPCR2, McBSP2_SPSA ; enable McBSP0 TX for DTMF out 允许McBSP0 发送DTMF到pcLDM McBSP2_SPSD,AOR #0x0001, A ;发送控制寄存器 准备就绪STLM A, McBSP2_SPSD ;LD #0h, DP ; load data page 0rpt #23 ;循环下一条指令 23次NOP ssbx xf;状态寄存器置位NOPNOP;CALL IfTxRDY1;STM #0x0101, McBSP2_DXR1;CALL IfTxRDY1;STM #0x0208, McBSP2_DXR1;rsbxxf; NOP;NOP CALL IfTxRDY1 ;转移到 IfTxRDY1STM #0x0001, McBSP2_DXR1;request secondary communication 要求第二次通信NOPCALL IfTxRDY1 STM #0100h, McBSP2_DXR1;write 00h to register 1 将00h写入mcbsp2的寄存器1CALL IfTxRDY1 ;发送数据STM #0000h, McBSP2_DXR1 ; 重置寄存器的数值NOPNOPrpt #20hnop CALL IfTxRDY1STM #0x0001, McBSP2_DXR1;request secondary communicationCALL IfTxRDY1 STM #0200h, McBSP2_DXR1;write 00h to register 2 将00h写入寄存器2CALL IfTxRDY1STM #0000h, McBSP2_DXR1 ;重置寄存器的数值 CALL IfTxRDY1STM #0x0001, McBSP2_DXR1;request secondary communicationCALL IfTxRDY1 STM #0300h, McBSP2_DXR1;write 00h to register 3 将00h写入寄存器3CALL IfTxRDY1STM #0000h, McBSP2_DXR1 ;重置寄存器的数值 CALL IfTxRDY1STM #0x0001, McBSP2_DXR1;request secondary communicationCALL IfTxRDY1 STM #0490h, McBSP2_DXR1;write 00h to register 4 将00h写入寄存器4 决定采样频率;bypass internal DPLL;and select the Sample Frequency CALL IfTxRDY1STM #0000h, McBSP2_DXR1 ;CALL IfTxRDY1;STM #0x0001, McBSP2_DXR1;CALL IfTxRDY1;STM #0102h, McBSP2_DXR1 ;enable digital loopback ;CALL IfTxRDY1;STM #0x0001, McBSP2_DXR1;CALL IfTxRDY1;STM #0208h, McBSP2_DXR1 ;enable analog loopbackRETNOPNOP *_CloseMcBSP:STM SPCR1, McBSP2_SPSA ; disable McBSP0 RXLDM McBSP2_SPSD,A; 把存储器映射寄存器值装入到累加器中AND #0xFFFE, ASTLM A, McBSP2_SPSD ;把累加器的低端存放到存储器中 即把mcbsp2_SPSD置为00000001STM SPCR2, McBSP2_SPSA ; disable McBSP0 TXLDM McBSP2_SPSD,AAND #0xFFFE, ASTLM A, McBSP2_SPSDRPT #5 ;循环执行下一条语句,循环次数为5次RETNOP ;不做任何操作NOP_READAD50: ;AD采样数据stm0x00ff,ar3 ;指定循环次数,即采样数据的长度 所存放的地址stm0x1000,ar2 ;指定所采样数据的存放地址loopa:CALL IfRxRDY1ldm McBSP2_DRR1,b ;将采样数据赋予bstl b,*ar2+ ;将b传送到*ar中,ar地址加一 banz loopa,*ar3- ;循环直到采样结束 nopnop retnopnop_WRITEAD50: ;写入数据 stm0x037b,ar3 ;指定循环次数,即采样数据的长度 所存放的地址stm0x38a3,ar2 ;指定所采样数据的存放地址loopb:CALL IfTxRDY1 ;判断是否可以与pc通信ldu*ar2+,B ;把B存储到累加器中,ar2地址自动加1and #0fffeh,b ;mask the LSBstlm B, McBSP2_DXR1 ;把B存入存储器映射寄存器中banzloopb,*ar3- ;(ar3中的地址,每循环一次减1,不为0时)的转移到loopbnopnopretnopnop wait: ;等待延迟函数stm 20h,ar3loop1: stm 020h,ar4loop2:banz loop2,*ar4-banz loop1,*ar3-ret nopnopnopnop.end* End of File InitC5402.asm*EXP7/*you must load the data file wave.dat before your running the program!*/extern void InitC5402(void);extern void OpenMcBSP(void);extern void CloseMcBSP(void);extern void WRITEAD50(void);/* Main Function Program*/void main(void) InitC5402(); /* initialize C5402 DSP */ 初始化C5402OpenMcBSP(); 打开McBSPwhile (1) 无限循环WRITEAD50(); /* mainloop */ DA转换过程函数 /* End of File exp07.c*/.global _InitC5402 .global _OpenMcBSP.global _CloseMcBSP .global _READAD50 .global _WRITEAD50.include MMRegs.h_InitC5402:NOPLD #0, DP ; reset datapage pointeSTM #0, CLKMD ; software setting of DSP clock 软件设置DSP时钟STM #0, CLKMD ; (to divider mode before setting)STM #0x4007, CLKMD ; set C5402 DSP clock to 40MHz* STM #0x4007, CLKMD ; set C5402 DSP clock to 100MHz 设置时钟频率; (based on DSK crystal at 20MHz)* Configure C5402 System Registers *STM #0x2000, SWWSR ; 2 wait cycle for IO space &; 0 wait cycle for data&prog spaces (swwsr 外部总线S/W等待状态寄存器)STM #0x0000,BSCR ; set wait states for bank switch:; 64k mem bank, extra 0 cycle between ( bscr 外部总线块转换控制寄存器); consecutive prog/data readSTM #0x1800,ST0 ; ST0 at default setting 设置状态寄存器ST0,ST1STM #0x2900,ST1 ; ST1 at default setting(note:INTX=1)STM #0x00A0,PMST ; MC mode & OVLY=1, vectors at 0080h (PMST包括了存储器配置状态和控制信息)* Set up Timer Control Registers *STM #0x0010, TCR ; stop onchip timer0 设置timer0为主要的时钟寄存器;STM #0x0010, TCR1 ; stop onchip timer1; Timer0 is used as main loop timer;STM #2499, PRD ; timer0 rate=CPUCLK/1/(PRD+1) 定时器周期计数器; =40M/2500=16KHz* STM #6249, PRD ; if CPU at 100M/6250=16KHz * Initialize McBSP2 Registers *STM SPCR1, McBSP2_SPSA ; register subaddr of SPCR1 串口控制寄存器1置位0000hSTM #0000h, McBSP2_SPSD ; McBSP2 recv = leftjustify; RINT generated by frame syncSTM SPCR2, McBSP2_SPSA ; register subaddr for SPCR2 串口控制寄存器2置位0000h; XINT generated by frame syncSTM #0000h, McBSP2_SPSD ; McBSP2 Tx = FREE(clock stops; to run after SW breakpointSTM RCR1, McBSP2_SPSA ; registe

温馨提示

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

评论

0/150

提交评论