DSP硬件实验报告-2_第1页
DSP硬件实验报告-2_第2页
DSP硬件实验报告-2_第3页
DSP硬件实验报告-2_第4页
DSP硬件实验报告-2_第5页
已阅读5页,还剩47页未读 继续免费阅读

付费下载

下载本文档

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

文档简介

PAGE5DSP硬件课程实验报告实验一:常用指令实验实验目的1.熟悉DSP开发系统的连接2.了解DSP开发系统的组成和结构和应用系统构成3.熟悉常用C54X系列指令的用法(程序寻址,寄存器,I/O口,定时器,中断控制)。实验设备计算机,CCS2.0版软件,DSP仿真器,实验箱。实验操作方法系统连接进行DSP实验之前,先必须连接好仿真器、实验箱及计算机,连接方法如下所示:PCI/USB/EPPPCI/USB/EPP接口JTAG接口计算机仿真器用户开发板在硬件安装完成后,接通仿真器电源或启动计算机,此时,仿真盒上的“红色小灯”应点亮,否则DSP开发系统与计算机连接有问题。运行CCS程序先实验箱上电,然后启动CCS,此时仿真器上的“绿色小灯”应点亮,并且CCS正常启动,表明系统连接正常;否则仿真器的连接、JTAG接口或CCS相关设置存在问题,掉电,检查仿真器的连接、JTAG接口连接,或检查CCS相关设置是否正确。实验步骤与内容简单指令程序运行实验实验使用资源实验通过实验箱上的XF指示灯观察程序运行结果实验过程启动CCS2.0,并加载“exp01.out”;加载完毕后,单击“Run”运行程序;实验结果:可见XF灯以一定频率闪烁;单击“Halt”暂停程序运行,则XF灯停止闪烁,如再单击“Run”,则“XF”灯又开始闪烁;关闭所有窗口,本实验完毕。源程序查看:用下拉菜单中Project/Open,打开“Exp01.pjt”,双击“Source”,双击“exp01.asm”可查看源程序。源程序注释如下:;FileName:exp01.asm;theprogramiscompiledatnoautoinitializationmode .mmregs ;定义存储器映像寄存器 .global_main ;全局符号,可在外部定义_main: stm #3000h,sp ;设置堆栈指针寄存器的值为3000h ssbx xf ;置位状态寄存器xf call delay ;调用delay函数 rsbx xf ;复位状态寄存器xf call delay ;调用delay函数 b _main ;无条件转移至_main nop ;空指令 nop ;delay.5second delay: stm 270fh,ar3 ;设置辅助寄存器ar3值为9999loop1: stm 0f9h,ar4 ;设置辅助寄存器ar4值为249loop2: banz loop2,*ar4- ;寄存器ar4值减一,当其值不为0时跳转到loop2 banz loop1,*ar3- ;寄存器ar3值减一,当其值不为0时跳转到loop1 ret ;返回 nop ;空指令 nop;stm 2cycles;banz whenTRUE4cycles;FALSE2cycles;0f9h=>249d;270fh=>9999d .end (二)资料存储实验实验使用资源本实验指导书是以TMS32OVC5410为例,介绍相关的内部和外部内存资源。对于其它类型的CPU请参考查阅相关的资料手册。下面给出TMS32OVC5410的内存分配表:对于存储空间而言,映像表相对固定。值得注意的是内部寄存器与存储空间的映像关系。因此在编程应用时这些特定的空间不能作其它用途。对于程序存储空间而言,其映像表和CPU的工作模式有关。当MP/MC引脚为高电平时,CPU工作在微处理器模式;当MP/MC引脚低电平时,CPU工作在为计算机模式。具体的内存映像关系如上如所示。内存实验主要了解内存的操作和DSP的内部双总线结构。并熟悉相关的指令代码和执行过程等。实验过程连接好DSP开发系统,运行CCS软件;在CCS的Memory窗口中查找C5410各个区段的数据存储器地址,在可以改变的存储器内容的地方,选定地址随意改变其中内容并观察结果;在CCS中装载实验示范程序,单步执行程序,程序中写入和读出的数据存储地址的变化;改变其它寻址方式,进行观察数据存储器地址与写入和读出数据的的变化。本实验说明:本实验程序将对0x1000开始的8个地址空间,填写入0xAAAA的数值,然后读出,并存储到0X1008开始的8个地址空间。在CCS中可以观察DATA内存空间地址0X1000~0X100F值的变化。样例程序实验操作说明:启动CCS2.0,并加载“exp02.out”,用“View”下拉菜单中的“Memory”查看内存单元,输入要查看的内存单元地址,本实验要查看0x1000H~0x100FH单元的数值变化,输入地址0x1000H,查看0x1000H~0x100FH单元的初始值,单击“Run”运行程序,也可以“单步”运行程序,单击“Halt”暂停程序运行,查看0x1000H~0x100FH单元内数值的变化关闭各窗口,本实验完毕。源程序注释:*FileName:exp02.asm ;getsomeknowledgeofthecmdfile;theprogramiscompiledatnoautoinitializationmode .mmregs .global_main_main:;storedata stm 1000h,ar1;addressofinternalmemory ;将外部内存地址1000h赋给ar1; stm5000h,ar1;addressofexteriormemory rpt #07h ;循环执行下一条指令8次 st 0aaaah,*ar1+;data ;将0aaaah的值存储在ar1所对应内存中且 ;ar1值加1 ;readdatathenre-store stm 7h,ar3 ;将7h赋给辅助寄存器ar3; stm5000h,ar1;addressofexteriormemory; stm5008h,ar2;addressofexteriormemory stm 1000h,ar1 ;将地址1000h赋给辅助寄存器ar1 stm 1008h,ar2 ;将地址1008h赋给辅助寄存器ar2loop: ld *ar1+,t ;将辅助寄存器ar1的值赋给t,且ar1值加1 st t,*ar2+ ;将t的值存储在ar2所对应内存中,且 ar2值加1 banz loop,*ar3- ;寄存器ar3值减1,当其值不为0时跳转 ;到loophere: bhere ;无条件转移至here .end(三)I/O实验实验使用资源数字量输入信号全部拓展出来,数字量输入接口主要由两个,D_Exp与扳东开关连接,PX4和PX5与电平转换芯片(74LVC245)连接,其功能分别为:D_Exp—数字量输入扩展接口123456789I0I1I2I3I4I5I6I7VCC电平转换扩展接口1234PX4—5VIN0IN1IN2IN3PX5—3.3VOUT3OUT2OUT1OUT0通过PORTR,PORTW指令可以实现I/O口的输入输出功能,如数字量采集实验。实验说明:实验中采用简单的一一映像关系来对I/O口进行验证,目的是使实验者能够对I/O有一目了然的认识。在本实验系统中,提供的IO空间分配如下:CPU1:0x0000 switchinput(X)80x0001 LEDoutput(X)8CPU2: 0x0001 DAC0x0004 Read_Key0x0006 Write_Key0x000F Write_LCD0x8000 HPIC00x8001 HPIC10x8002 HPID0(AUTO)0x8003 HPID1(AUTO)0x8004 HPIA00x8005 HPIA10x8006 HPID0(NOAUTO)0x8007 HPID1(NOAUTO)实验程序框图开始开始始初始化读入I/O00h地址的内容输出到I/O01h地址注意:电平转换接口主要考虑应用3.3V的中央处理器时,系统的电平兼容问题,用来保护CPU不受损坏。系统采用74LVC245电平兼容转换器件。实验过程运行CCS程序,装载示范程序,调整K0~K7的开关,观察LP1~LP7LED亮灭的变化,以及输入和输出状态是否一致。(注意:输出为0时点亮灯)例程序实验操作说明启动CCS2.0,并加载“exp03.out”,单击“Run”运行程序,任意调整K0~K7开关,可以观察到对应LP0~LP7灯“亮”或“灭”;单击“Halt”,暂停持续运行,开关将对灯失去控制。关闭所有窗口,本实验完毕。源程序查看:用下拉菜单中Project/Open,打开“Exp03.pjt”,双击“Source”,双击“exp03.asm”可查看源程序。代码如下:;FileName:exp03.asm;learnhowtooperatetheI/Oports;getsomeknowledgeoftherts.libfile;intheI/Ospace0x0000=>8switches; 0x0001=>8LEDs .mmregs .global _main .text_main: stm 3100h,sp ;设置堆栈指针寄存器的值为3000h stm 1000h,ar1 ;definetheaddress ;设置辅助寄存器ar1值为1000h portr 00h,*ar1 ;从00h端口读数据传入ar1所指向的内存空间, ;读按键 nop ;空指令 nop portw *ar1,01h ;将ar1所指向的内存空间的值赋给01h端口,控 ;制led灯 nop ;空指令 nopb_main ;无条件转移至_main,实现按键控制nopnop.end(四)定时器实验1、实验使用资源定时器实验时要用到C54芯片的定时器控制寄存器,定时器时间常数寄存器,定时器中断响应,寄存器定义详见C54芯片资料。C54的定时器是一个20位的减法计数器,可以被特定的状态位实现停止、重新启动、重设置或禁止,可以使用该定时器产生周期性的CPU中断,控制定时器中断频率的两个寄存器是定时周期寄存器PRD和定时减法寄存器TDDR定时器实验通过LED(LP1~LP7)来显示。在本系统中,时钟频率为20MHZ,令PRD=0x4e1f,这样得到每1/1000秒中断一次,通过累计1000次,就能定时1秒钟。2、实验过程调入样例程序,装载并运行;例程序实验操作说明启动CCS2.0,并加载“exp04.out”,单击“Run”运行,可观察到LED灯(LP0~LP7)以一定的间隔时间不停摆动,单击“Halt”,暂停程序运行,LED灯停止闪烁,单击“Run”,运行程序,LED灯又开始闪烁。关闭所有窗口,本实验完毕。VECTOR.asm.sect".vectors".ref_c_int00;Centrypoint ;引用函数c_int00.ref_timer;timeinterruptpoint ;引用了c中的函数.align0x80;mustbealignedonpageboundary;页边界排列RESET:;resetvector ;resetvector,复位中断响应BD_c_int00;branchtoCentrypointSTM#200,SP;stacksizeof200nmi:RETE;enableinterruptsandreturnfromoneNOPNOPNOP;NMI~ ;延迟分支到C主程序默认入口地址,c_int00是c程序的;入口,这里即进入main函数中 ;开辟堆栈空间;softwareinterruptssint17.space4*16 ;保留出中断向量的地址空间sint18.space4*16sint19.space4*16sint20.space4*16sint21.space4*16sint22.space4*16sint23.space4*16sint24.space4*16sint25.space4*16sint26.space4*16sint27.space4*16sint28.space4*16sint29.space4*16sint30.space4*16int0:RETE ;中断寄存器设置RETE返回并允许中断外部中断产生 ;时,直接返回。NOPNOPNOPint1:RETENOPNOPNOPint2:RETENOPNOPNOPtint:b_timer ;定时器产生的时钟中断,返回到c中定义的timer ;程序,b即是跳转NOPNOPrint0:RETE ;同步串口0(McBSP0)接受的中断,直接返回NOPNOPNOPxint0:RETE ;同步串口0(McBSP0)发送的中断,直接返回NOPNOPNOPrint1:RETE ;同步串口1(McBSP1)接受的中断,直接返回NOPNOPNOPxint1:RETE ;同步串口1(McBSP1)发送的中断,直接返回NOPNOPNOPint3:RETENOPNOPNOP.endExp04.c#include<stdio.h>interruptvoidtimer();/*externvoidtime();*/externvoidinitial();externvoidporta();externvoidportb();intflag=0;interruptvoidtimer(){ *(int*)0x300=*(int*)0x300+1; ;定时不断加1 if(*(int*)0x300==0x3e8) ;当定时器数值达到0x3e8,开始定时器中断 { *(int*)0x300=0; ;为定时器重新赋予初值 *(int*)0x302=*(int*)0x302+1; if(flag==0) ;如果flag为0,则将其变为1,执行porta() {flag=1; porta(); } else {flag=0; ;如果flag为1,则将其变为1,执行portb() portb(); } } return;}main(){ initial(); ;初始化 while(1){;} ;无限循环}initial.asm .mmregs .global_initial_initial: stm 300h,ar1;initial300hdataaddress ;将300h赋值给ar1 st #00h,*ar1 ;将00h赋值给内存地址为300h的空间里 stm 302h,ar1;initial302hdataaddress ;将302h赋值给ar1 st #00h,*ar1 ;将00h赋值给内存地址为302h的空间里 stm 200h,ar1 st #5555h,*ar1 ;为内存200h的内容赋予5555h stm 201h,ar1 st #0aaaah,*ar1 ;为内存201h的内容赋予aaaah stm 202h,ar1 st #400h,*ar1 ;为内存202h的内容赋予400h ssbx 1,11;setST1.INTM=1,stopallinterrrupt ;设置ST1.INTM=1,停止所有的中断 stm 0ffffh,ifr;clearallinterruptindicate ;清除所有中断的标志位,中断标志寄存器 ;(IFR)用来指明各个中断的目前状态。 stm 00h,imr;setimr=0,stopallinterrrupt ;停止所有的中断中断屏蔽寄存器(IMR) ;在需要的时候独立地屏蔽特定的中断 stm 410h,tcr;stoptimer stm 4e1fh,prd;setprd=4e1fh ;停止定时器 stm 420h,tcr;starttimer ;设置定时器,定时器周期计数器 stm 08h,imr;allowtimerinterrupt ;打开定时器定时器控制寄存器 rsbx 1,11;setST1.INTM=0,startallinterrrupt ;允许定时器中断 ret ;设置ST1.INTM=0,打开所有中断Port.asm .mmregs .global _porta .global _portb _porta: stm 304h,ar1 ;将304h赋给辅助寄存器ar st 5555h,*ar1 ;将内存304h的内容赋予5555h portw *ar1,01h ;将内存304h的值写入01h端口 ret _portb: stm 304h,ar1 st 0aaaah,*ar1 ;将内存304h的内容赋予0aaaah portw *ar1,01h ;将内存304h的值写入01端口 ret(五)INT2中断实验1、实验使用资源本实验是进行C54芯片的INT2中断练习,C54芯片中断INT2是低电平单脉冲触发;实验采用导线一端连接D_Exp—数字量输入扩展接口I0,经PX4的IN3,到PX5的OUT0电平转换,再与另一端连接INT2插孔;拨动开关K0一次,就产生一个低电平单脉冲;运行示范程序,观察LP1~LP7LED灯的输出变化;可观察到每拨动开关K0一次LP1~LP7灯亮灭变化一次;2、实验过程样例程序实验操作说明启动CCS2.0,并加载“exp05.out”,单击“Run”运行程序,反复拨动开关K0,观察LP1~LP7LED灯亮灭变化,单击“Halt”暂停程序运行,反复拨动开关K0,LP1~LP7LED灯亮灭不变化;关闭所有窗口,本实验完毕。源程序查看:用下拉菜单中Project/Open,打开“Exp05.pjt”,双击“Source”,双击“int2.c”、“initial.asm”、“port.asm”以及“vectors.asm”可查看各源程序。Vector.asm.sect".vectors".ref_c_int00;Centrypoint ;引用函数c_int00.ref_int2c.align0x80;mustbealignedonpageboundary ;页边界排列RESET:;resetvector ;resetvector,复位中断响应BD_c_int00;branchtoCentrypointSTM#200,SP;stacksizeof200 ;延迟分支到C主程序默认入口地址,c_int00 ;是c程序的入口,这里即进入main函数中 ;开辟堆栈空间nmi: ;中断屏蔽置为0,响应中断,不可屏蔽中断产生时,使中 ;断屏蔽取消,后返回。 RETE;enableinterruptsandreturnfromoneNOPNOPNOP;NMI~;softwareinterruptssint17.space4*16 ;保留出中断向量的地址空间sint18.space4*16sint19.space4*16sint20.space4*16sint21.space4*16sint22.space4*16sint23.space4*16sint24.space4*16sint25.space4*16sint26.space4*16sint27.space4*16sint28.space4*16sint29.space4*16sint30.space4*16int0: RETE ;中断寄存器设置RETE返回并允许中断外部中断产生 ;时,直接返回。NOPNOPNOPint1: RETENOPNOPNOPint2: b_int2cNOPNOPtint: RETENOPNOPNOPrint0: ;同步串口0(McBSP0)接受的中断,直接返回 RETENOPNOPNOPxint0: ;同步串口0(McBSP0)发送的中断,直接返回 RETENOPNOPNOPrint1: ;同步串口1(McBSP1)接受的中断,直接返回 RETENOPNOPNOPxint1: ;同步串口1(McBSP1)发送的中断,直接返回 RETENOPNOPNOPint3: RETENOPNOPNOPInt2.cinterruptvoidint2c();externvoidinitial();externvoid porta();externvoidportb();intflag=0;main(){ initial(); while(1){;}}interruptvoidint2c(){ asm("nop"); *(int*)0x300=*(int*)0x300+2; ;/*breakheretoshowifinterrupthappened*/;这是一个记录外部中断的标志,通过记录0x300h中的值来记录 if(flag==0) { flag=1; porta(); } else { flag=0; portb(); }}Initial.asm .mmregs .global_initial.text_initial: stm 300h,ar3;initialdata300h st #00h,*ar3 ;将00h存入地址为300h的内存中 stm 302h,ar4 st #00h,*ar4 ;将00h存入地址为302h的内存中 ssbx 1,11;setm=1stopallinterrupt ;设置ST1.INTM=1,停止所有的中断 stm 00h,imr;stopallinterrupt ;停止所有的中断,中断屏蔽寄存器 ;(IMR)在需要的时候独立地屏蔽特定的中断 stm 0ffffh,ifr;clearallinterruptsign ;清除所有中断的标志位,中断标志寄存器(IFR);用来指明各个中断的目前状态。 stm 04h,imr;allowint2interrupt ;开启int2的外部中断 rsbx 1,11;allowallinterrupt ;打开所有中断总开关 ret .end Port.asm .mmregs .global _porta .global _portb _porta: stm 304h,ar1 ;将304h赋给辅助寄存器ar1 st 5555h,*ar1 ;将内存304h的内容赋予5555h portw *ar1,01h ;将内存304h的值写入01h端口 ret _portb: stm 304h,ar1 st 0aaaah,*ar1 ;将内存304h的内容赋予0aaaah portw *ar1,01h ;将内存304h的值写入01端口 ret 实验二A/D采样实验实验目的掌握利用TLV320AD50实现A/D转换的技术基本原理和常用方法。学会DSP的多信道缓冲串口的应用方法。掌握并熟练使用DSP和AD50的接口及其操作。通过实验加深对DSP系统频谱混叠认识。实验设备计算机,CCS2.0软件,DSP仿真器,实验箱,示波器,连接导线。实验步骤和内容实验连线用短接块短接SS1的1,2脚,设置输出低频信号;短接S2的Sin脚,设置输出正弦波信号,这时模拟信号产生单元SP1输出为低频正弦波。JD跳线断开,设置语音处理单元输入信号为交流;并用导线连接SP1脚和JAD3的1脚,将模拟低频正弦波信号接入语音处理单元。用导线连接JAD1的INP和INPF,以及JAD2的INM和INMF,将语音处理单元输出的差动模拟信号接入AD50输入端。运行CCS2.0软件,装入“exp06.pjt”工程文件,双击“exp06.pjt”及“Source”3.加载“exp06.out”示范程序,在“exp06.c”中“READAD50()”处,设置断点,运行程序,通过用下拉菜单中的View/Graph的“Time/Frequency”打开一个图形观察窗口,调节输入信号的频率或幅值,观察图形情况(幅值和频率),设置该图形观察窗口的参数,观察起始地址为0x1000H,长度为256的内存单元内的数据,该资料为输入信号经A/D转换之后的数据,数据类型为16位整型,击“Animate”运行程序,在图形观察窗口观察A/D转换后的采样波形。在图形观察窗口观察A/D转换后的采样波形;源代码:exp06.cexternvoidInitC5402(void);externvoidOpenMcBSP(void);externvoidCloseMcBSP(void);externvoidREADAD50(void);/*************************************************************************MainFunctionProgram***********************************************************************/voidmain(void){InitC5402();/*initializeC5402DSP*/OpenMcBSP();while(1){READAD50();/*main–loop*/}}/*************************************************************************EndofFile––exp06.c***********************************************************************/InitC5402.asm .global_InitC5402 .global_OpenMcBSP .global_CloseMcBSP .global_READAD50 .global_WRITEAD50 .includeMMRegs.h_InitC5402: NOP LD#0,DP;resetdata–pagepointer ;把立即数0装到数据页指针(DP) STM#0,CLKMD;softwaresettingofDSPclock STM#0,CLKMD;(todividermodebeforesetting) STM#0x4007,CLKMD;setC5402DSPclockto40MHz *STM#0x4007,CLKMD;setC5402DSPclockto100MHz;(basedonDSKcrystalat20MHz)*******ConfigureC5402SystemRegisters******* STM#0x2000,SWWSR;2waitcycleforIOspace& ;SWWSR外部总线S/W等待状态寄存器;0waitcyclefordata&progspaces STM#0x0000,BSCR;setwaitstatesforbankswitch: ;bscr外部总线块转换控制寄存器;64kmembank,extra0cyclebetween;consecutiveprog/dataread STM#0x1800,ST0;ST0atdefaultsetting STM#0x2900,ST1;ST1atdefaultsetting(note:INTX=1) STM#0x00A0,PMST;MCmode&OVLY=1,vectorsat0080h ;pmst处理器方式状态寄存器*******SetupTimerControlRegisters******* STM#0x0010,TCR;stopon–chiptimer0 ;TCR定时器控制寄存器; STM#0x0010,TCR1;stopon–chiptimer1;Timer0isusedasmainlooptimer; STM#2499,PRD;timer0rate=CPUCLK/1/(PRD+1) ;prd定时器周期计数器;=40M/2500=16KHz*STM#6249,PRD;ifCPUat100M/6250=16KHz *******InitializeMcBSP2Registers******* STMSPCR1,McBSP2_SPSA;registersubaddrofSPCR1 STM#0000h,McBSP2_SPSD;McBSP2recv=left–justify;RINTgeneratedbyframesync STMSPCR2,McBSP2_SPSA;registersubaddrforSPCR2;XINTgeneratedbyframesync STM#0000h,McBSP2_SPSD;McBSP2Tx=FREE(clockstops;torunafterSWbreakpoint STMRCR1,McBSP2_SPSA;registersubaddrofRCR1 STM#0040h,McBSP2_SPSD;recvframe1Dlength=16bits STMRCR2,McBSP2_SPSA;registersubaddrofRCR2 STM#0040h,McBSP2_SPSD;recvPhase=1;retframe2Dlength=16bits STMXCR1,McBSP2_SPSA;registersubaddrofXCR1 STM#0040h,McBSP2_SPSD;setthesameasrecv STMXCR2,McBSP2_SPSA;registersubaddrofXCR2 STM#0040h,McBSP2_SPSD;setthesameasrecv STMPCR,McBSP2_SPSA;registersubaddressofPCR STM#000eh,McBSP2_SPSD;clkandframefromexternal(slave);FSatpulse–mode(00)*******FinishDSPInitialization******* STM#0x0000,IMR;disableperipheralinterrupts STM#0xFFFF,IFR;cleartheintrupts’flags RET;returntomain NOP NOP *******WaitingforMcBSP0RXFinished*******IfRxRDY1: NOP STMSPCR1,McBSP2_SPSA;enableMcBSP2Rx LDMMcBSP2_SPSD,A ;把存储器McBSP2_SPSD映射寄存器值装入累加器A AND#0002h,A;maskRRDYbit BCIfRxRDY1,AEQ;keepchecking ;BC可选择延迟的条件转移 NOP NOP RET;return ;可选择延迟的返回 NOP NOP*******WaitingforMcBSP0TXFinished*******IfTxRDY1: NOP STMSPCR2,McBSP2_SPSA;enableMcBSP2Tx LDMMcBSP2_SPSD,A AND#0002h,A;maskTRDYbit BCIfTxRDY1,AEQ;keepchecking NOP NOP RET;return NOP NOP************************************************************************************_OpenMcBSP: rsbxxf ;rsbx状态寄存器位复位 ;XF转移控制输入。BIO(_____)为低,执行一个条件转移指令。 ;外部标志输出(软件可控信号)XF可用于在多处理器结构中相互通信,也可作通用输出 ;脚。 callwait NOP STMSPCR1,McBSP2_SPSA;enableMcBSP0RXforADCdatain LDMMcBSP2_SPSD,A OR#0x0001,A STLMA,McBSP2_SPSD ;使用存储器映射寄存器寻址 STMSPCR2,McBSP2_SPSA;enableMcBSP0TXforDTMFout LDMMcBSP2_SPSD,A OR#0x0001,A STLMA,McBSP2_SPSD LD#0h,DP;loaddatapage0 rpt#23 NOP ssbxxf ;状态寄存器位置位 NOP NOP ; CALLIfTxRDY1 ;CALL非条件调用,可选择延迟; STM#0x0101,McBSP2_DXR1 ; CALLIfTxRDY1; STM#0x0208,McBSP2_DXR1;; rsbx xf;;NOP;;NOPCALLIfTxRDY1 STM#0x0001,McBSP2_DXR1;requestsecondarycommunication NOP CALLIfTxRDY1 STM#0100h,McBSP2_DXR1;write00htoregister1 CALLIfTxRDY1 STM#0000h,McBSP2_DXR1 NOP NOP rpt#20h nop CALLIfTxRDY1 STM#0x0001,McBSP2_DXR1;requestsecondarycommunication CALLIfTxRDY1 STM#0200h,McBSP2_DXR1;write00htoregister2 CALLIfTxRDY1 STM#0000h,McBSP2_DXR1 CALLIfTxRDY1 STM#0x0001,McBSP2_DXR1;requestsecondarycommunication CALLIfTxRDY1 STM#0300h,McBSP2_DXR1;write00htoregister3 CALLIfTxRDY1 STM#0000h,McBSP2_DXR1CALLIfTxRDY1 STM#0x0001,McBSP2_DXR1;requestsecondarycommunication CALLIfTxRDY1 STM#0490h,McBSP2_DXR1;write00htoregister4 ;bypassinternalDPLL ;andselecttheSampleFrequency CALLIfTxRDY1 STM#0000h,McBSP2_DXR1 ; CALLIfTxRDY1; STM#0x0001,McBSP2_DXR1; CALLIfTxRDY1; STM#0102h,McBSP2_DXR1;enabledigitalloopback ; CALLIfTxRDY1; STM#0x0001,McBSP2_DXR1; CALLIfTxRDY1; STM#0208h,McBSP2_DXR1;enableanalogloopback RET NOP NOP*********************_CloseMcBSP: STMSPCR1,McBSP2_SPSA;disableMcBSP0RX LDMMcBSP2_SPSD,A AND#0xFFFE,A STLMA,McBSP2_SPSD STMSPCR2,McBSP2_SPSA;disableMcBSP0TX LDMMcBSP2_SPSD,A AND#0xFFFE,A STLMA,McBSP2_SPSD RPT#5 RET NOP NOP_READAD50: stm 0x00ff,ar3 stm 0x1000,ar2 loopa: CALLIfRxRDY1 ldm McBSP2_DRR1,b stl b,*ar2+banzloopa,*ar3- nop nop ret nop nop _WRITEAD50: stm 0x037b,ar3 stm 0x38a3,ar2loopb: CALL IfTxRDY1 ldu *ar2+,B ;把不带符号的存储器装入到累加器中 and#0fffeh,b;masktheLSB stlmB,McBSP2_DXR1 banz loopb,*ar3- nop nop ret nop nop wait: stm 20h,ar3loop1: stm 020h,ar4loop2: banz loop2,*ar4- banz loop1,*ar3- ret nop nop nop nop .end**************************************************************************EndofFile––InitC5402.asm************************************************************************实验三D/A采样实验实验目的掌握利用TLV320AD50实现D/A转换的技术基本原理和常用方法。学会DSP的多信道缓冲串口的应用方法。掌握并熟练使用DSP和AD50的接口及其操作。通过实验加深对DSP系统频谱混叠认识。实验设备计算机,CCS2.0软件,DSP仿真器,实验箱,示波器,连接导线。实验步骤和内容实验连线用短接块短接SS1的1,2脚,设置输出低频信号;短接S2的Sin脚,设置输出正弦波信号,这时模拟信号产生单元SP1输出为低频正弦波。JD跳线断开,设置语音处理单元输入信号为交流;并用导线连接SP1脚和JAD3的1脚,将模拟低频正弦波信号接入语音处理单元。用导线连接JAD1的INP和INPF,以及JAD2的INM和INMF,将语音处理单元输出的差动模拟信号接入AD50输入端。运行CCS2.0软件,装入“exp06.pjt”工程文件,双击“exp06.pjt”及“Source”3.加载“exp06.out”示范程序,在“exp06.c”中“READAD50()”处,设置断点,运行程序,通过用下拉菜单中的View/Graph的“Time/Frequency”打开一个图形观察窗口,调节输入信号的频率或幅值,观察图形情况(幅值和频率),设置该图形观察窗口的参数,观察起始地址为0x1000H,长度为256的内存单元内的数据,该资料为输入信号经A/D转换之后的数据,数据类型为16位整型,击“Animate”运行程序,在图形观察窗口观察A/D转换后的采样波形。实际效果图:源代码:exp06.cexternvoidInitC5402(void);externvoidOpenMcBSP(void);externvoidCloseMcBSP(void);externvoidREADAD50(void);/*************************************************************************MainFunctionProgram***********************************************************************/voidmain(void){InitC5402();/*initializeC5402DSP*/OpenMcBSP();while(1){READAD50();/*main–loop*/}}/*************************************************************************EndofFile––exp06.c***********************************************************************/ InitC5402.asm.global_InitC5402 .global_OpenMcBSP .global_CloseMcBSP .global_READAD50 .global_WRITEAD50 .includeMMRegs.h_InitC5402: NOP LD#0,DP;resetdata–pagepointer ;把立即数0装到数据页指针(DP) STM#0,CLKMD;softwaresettingofDSPclock STM#0,CLKMD;(todividermodebeforesetting) STM#0x4007,CLKMD;setC5402DSPclockto40MHz *STM#0x4007,CLKMD;setC5402DSPclockto100MHz;(basedonDSKcrystalat20MHz)*******ConfigureC5402SystemRegisters******* STM#0x2000,SWWSR;2waitcycleforIOspace& ;SWWSR外部总线S/W等待状态寄存器;0waitcyclefordata&progspaces STM#0x0000,BSCR;setwaitstatesforbankswitch: ;bscr外部总线块转换控制寄存器;64kmembank,extra0cyclebetween;consecutiveprog/dataread STM#0x1800,ST0;ST0atdefaultsetting STM#0x2900,ST1;ST1atdefaultsetting(note:INTX=1) STM#0x00A0,PMST;MCmode&OVLY=1,vectorsat0080h ;pmst处理器方式状态寄存器*******SetupTimerControlRegisters******* STM#0x0010,TCR;stopon–chiptimer0 ;TCR定时器控制寄存器; STM#0x0010,TCR1;stopon–chiptimer1;Timer0isusedasmainlooptimer; STM#2499,PRD;timer0rate=CPUCLK/1/(PRD+1) ;prd定时器周期计数器;=40M/2500=16KHz*STM#6249,PRD;ifCPUat100M/6250=16KHz *******InitializeMcBSP2Registers******* STMSPCR1,McBSP2_SPSA;registersubaddrofSPCR1 STM#0000h,McBSP2_SPSD;McBSP2recv=left–justify;RINTgeneratedbyframesync STMSPCR2,McBSP2_SPSA;registersubaddrforSPCR2;XINTgeneratedbyframesync STM#0000h,McBSP2_SPSD;McBSP2Tx=FREE(clockstops;torunafterSWbreakpoint STMRCR1,McBSP2_SPSA;registersubaddrofRCR1 STM#0040h,McBSP2_SPSD;recvframe1Dlength=16bits STMRCR2,McBSP2_SPSA;registersubaddrofRCR2 STM#0040h,McBSP2_SPSD;recvPhase=1;retframe2Dlength=16bits STMXCR1,McBSP2_SPSA;registersubaddrofXCR1 STM#0040h,McBSP2_SPSD;setthesameasrecv STMXCR2,McBSP2_SPSA;registersubaddrofXCR2 STM#0040h,McBSP2_SPSD;setthesameasrecv STMPCR,McBSP2_SPSA;registersubaddressofPCR STM#000eh,McBSP2_SPSD;clkandframefromexternal(slave);FSatpulse–mode(00)*******FinishDSPInitialization******* STM#0x0000,IMR;disableperipheralinterrupts STM#0xFFFF,IFR;cleartheintrupts’flags RET;returntomain NOP NOP *******WaitingforMcBSP0RXFinished*******IfRxRDY1: NOP STMSPCR1,McBSP2_SPSA;enableMcBSP2Rx LDMMcBSP2_SPSD,A ;把存储器McBSP2_SPSD映射寄存器值装入累加器A AND#0002h,A;maskRRDYbit BCIfRxRDY1,AEQ;keepchecking ;BC可选择延迟的条件转移 NOP NOP RET;return ;可选择延迟的返回 NOP NOP*******WaitingforMcBSP0TXFinished*******IfTxRDY1: NOP STMSPCR2,McBSP2_SPSA;enableMcBSP2Tx LDMMcBSP2_SPSD,A AND#0002h,A;maskTRDYbit BCIfTxRDY1,AEQ;keepchecking NOP NOP RET;return NOP NOP************************************************************************************_OpenMcBSP: rsbxxf ;rsbx状态寄存器位复位 ;XF转移控制输入。BIO(_____)为低,执行一个条件转移指令。 ;外部标志输出(软件可控信号)XF可用于在多处理器结构中相互通信,也可作通用输出 ;脚。 callwait NOP STMSPCR1,McBSP2_SPSA;enableMcBSP0RXforADCdatain LDMMcBSP2_SPSD,A OR#0x0001,A STLMA,McBSP2_SPSD ;使用存储器映射寄存器寻址 STMSPCR2,McBSP2_SPSA;enableMcBSP0TXforDTMFout LDMMcBSP2_SPSD,A OR#0x0001,A STLMA,McBSP2_SPSD LD#0h,DP;loaddatapage0 rpt#23 NOP ssbxxf ;状态寄存器位置位 NOP NOP ; CALLIfTxRDY1 ;CALL非条件调用,可选择延迟; STM#0x0101,McBSP2_DXR1 ; CALLIfTxRDY1; STM#0x0208,McBSP2_DXR1;; rsbx xf;;NOP;;NOPCALLIfTxRDY1 STM#0x0001,McBSP2_DXR1;requestsecondarycommunication NOP CALLIfTxRDY1 STM#0100h,McBSP2_DXR1;write00htoregister1 CALLIfTxRDY1 STM#0000h,McBSP2_DXR1 NOP NOP rpt#20h nop CALLIfTxRDY1 STM#0x0001,McBSP2_DXR1;requestsecondarycommunication CALLIfTxRDY1 STM#0200h,McBSP2_DXR1;write00htoregister2 CALLIfTxRDY1 STM#0000h,McBSP2_DXR1 CALLIfTxRDY1 STM#0x0001,McBSP2_DXR1;requestsecondarycommunication CALLIfTxRDY1 STM#0300h,McBSP2_DXR1;write00htoregister3 CALLIfTxRDY1 STM#0000h,McBSP2_DXR1CALLIfTxRDY1 STM#0x0001,McBSP2_DXR1;requestsecondarycommunication CALLIfTxRDY1 STM#0490h,McBSP2_DXR1;write00htoregister4 ;bypassinternalDPLL ;andselecttheSampleFrequency CALLIfTxRDY1 STM#0000h,McBSP2_DXR1 ; CALLIfTxRDY1; STM#0x0001,McBSP2_DXR1; CALLIfTxRDY1; STM#0102h,McBSP2_DXR1;enabledigitalloopback ; CALLIfTxRDY1; STM#0x0001,McBSP2_DXR1; CALLIfTxRDY1; STM#0208h,McBSP2_DXR1;enableanalogloopback RET NOP NOP*********************_CloseMcBSP: STMSPCR1,McBSP2_SPSA;disableMcBSP0RX LDMMcBSP2_SPSD,A AND#0xFFFE,A STLMA,McBSP2_SPSD STMSPCR2,McBSP2_SPSA;disableMcBSP0TX LDMMcBSP2_SPSD,A AND#0xFFFE,A STLMA,McBSP2_SPSD RPT#5 RET NOP NOP_READAD50: stm 0x00ff,ar3 stm 0x1000,ar2 loopa: CALLIfRxRDY1 ldm McBSP2_DRR1,b stl b,*ar2+banzloopa,*ar3- nop nop ret nop nop _WRITEAD50: stm 0x037b,ar3 stm 0x38a3,ar2loopb: CALL IfTxRDY1 ldu *ar2+,B ;把不带符号的存储器装入到累加器中 and#0fffeh,b;masktheLSB stlmB,McBSP2_DXR1 banz loopb,*ar3- nop nop ret nop nop wait: stm 20h,ar3loop1: stm 020h,ar4loop2: banz loop2,*ar4- banz loop1,*ar3- ret nop nop nop nop .end**************************************************************************EndofFile––InitC5402.asm************************************************************************滤波器有限冲击响应滤波器(FIR)算法实验一.实验目的1.掌握用窗函数法设计FIR数字滤波器的原理和方法;2.熟悉线性相位FIR数字滤波器特性;3.了解各种窗函数对滤波特性的影响。二.实验设备计算机,CCS2.0版软件,实验箱,DSP仿真器,短接块,导线。三.实验原理1.有限冲击响应数字滤波器的基础理论;2.模拟滤波器原理(巴特沃斯滤波器、切比雪夫滤波器、贝塞尔滤波器);3.数字滤波器系数的确定方法。四.实验步骤1.复习如何设计FIR数字滤波。阅读本实验原理,掌握设计步骤;2.阅读本实验所提供的样例子程序;3.运行CCS软件,对样例程序进行跟踪,分析结果;4.填写实验报告。5.样例程序实验操作说明1)实验前准备在模拟信号产生单元中,一路信号源产生低频正弦波信号(S1置“L”),另一路信号源产生高频正弦波信号(S11置“H”),检查模拟信号输出端口“A”与“B”应断开;实验箱上电,用示波器分别观测out1和out2输出的模拟信号,调节电位器SPR1、SPR2(out1输出信号的频率调节和幅值调节)和电位器SPR11、SPR12(out2输出信号的频率调节和幅值调节),直至满意为止;本样例实验程序建议:低频正弦波信号为100Hz/1V;高频正弦波信号为6KHz/1V;实验箱掉电,做以下连接和检查:短接输出端口“A”与“B”;短接JAD1的INM、INMF;短接JAD2的INP、INPF;用导线连接out2(模拟信号输出)和JAD31脚(MIC_IN);检查:JD是否断开。注:有关以上连接的说明,可参见第八章中语音接口跳线接输出接口配置使用说明以及信号产生单元配置说明。正确完成计算机、DSP仿真器和实验箱的连接后,系统上电。实验程序说明:该程序为51阶FIR低通滤波器算法程序,采用矩形窗函数实现,数组h和xmid长度均为51,fs为采样频率,fstop为滤波器截止频率,可以修改以上参数来改变滤波器性能。重新“RebuildAll”后,并加载“Load”,单击“Animate”,可得到不同的实验结果;实验结果:在CCS2.0环境,同步观察输入信号及其FIR低通滤波结果。实验滤波结果图入下图所示:低通结果高通结果源代码低通FIRtestN01.CexternvoidInitC5402(void);externvoidOpenMcBSP(void);externvoidCloseMcBSP(void);externvoidREADAD50(void);externvoidWRITEAD50(void);/*************************************************************************MainFunctionProgram***********************************************************************/#include"stdio.h"#include"math.h"#definepi3.1415927doublenpass,h[51],x,y,xmid[51];intm=50;intn=256;voidfirdes(intm,doublenpass);main(){ intxm,ym; int*px=(int*)0x3000; int*py=(int*)0x3100; doublefs,fstop,r,rm; inti,j,p,k,s; k=0; fs=16000; fstop=1000; npass=fstop/fs; for(i=0;i<=m;i++) { xmid[i]=0; } firdes(m,npass);for(;;){ OpenMcBSP(); for(s=0;s<=4;s++) { READAD50(); for(i=0;i<=n-1;i++) { px=(int*)(0x3000+i); xm=*px; x=xm/32768.0; for(p=0;p<=m;p++) { xmid[m-p]=xmid[m-p-1]; } xmid[0]=x; r=0; rm=0; for(j=0;j<=m;j++) { r=xmid[j]*h[j]; rm=rm+r; } y=rm; py=(int*)(0x3100+i); ym=(int)(32768.0*

温馨提示

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

评论

0/150

提交评论