《北邮dsp硬件实验(40页).doc》由会员分享,可在线阅读,更多相关《北邮dsp硬件实验(40页).doc(40页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、-DSP硬件实验报告 班级:2010211204 学号:10210992 姓名:许鹏 2012年12月15号实验一:常用指令实验一、 实验目的1.熟悉DSP开发系统的连接2.了解DSP开发系统的组成和结构和应用系统构成3.熟悉常用C54X系列指令的用法(程序寻址,寄存器,I/O口,定时器,中断控制)。二、 实验设备计算机,CCS 2.0版软件,DSP仿真器,实验箱。三、 实验操作方法1、 系统连接进行DSP实验之前,先必须连接好仿真器、实验箱及计算机,连接方法如下所示:在硬件安装完成后,接通仿真器电源或启动计算机,此时,仿真盒上的“红色小灯”应点亮,否则DSP开发系统与计算机连接有问题。2、
2、运行CCS程序先实验箱上电,然后启动CCS,此时仿真器上的“绿色小灯”应点亮,并且CCS正常启动,表明系统连接正常;否则仿真器的连接、JTAG接口或CCS相关设置存在问题,掉电,检查仿真器的连接、JTAG接口连接,或检查CCS相关设置是否正确。四、 实验步骤与内容(一) 简单指令程序运行实验1、 实验使用资源实验通过实验箱上的XF指示灯观察程序运行结果2、 实验过程启动CCS 2.0,并加载“exp01.out”;加载完毕后,单击“Run”运行程序;实验结果:可见XF灯以一定频率闪烁;单击“Halt”暂停程序运行,则XF灯停止闪烁,如再单击“Run”,则“XF”灯又开始闪烁;关闭所有窗口,本实
3、验完毕。源程序查看:用下拉菜单中Project/Open,打开“Exp01.pjt”,双击“Source”,双击“exp01.asm”可查看源程序。源程序注释如下:源程序:注释:;File Name:exp01.asm;the program is compiled at no autoinitialization mode.mmregs.global _main_main: stm#3000h,sp ssbx xf call delay rsbx xf call delay b _main nop nop ;delay .5 seconddelay: stm 270fh,ar3 loop1:
4、 stm 0f9h,ar4 loop2:banz loop2,*ar4-banz loop1,*ar3-ret nop nop ;stm2 cycles;banzwhen TRUE 4 cycles; FALSE 2 cycles;0f9h=249d;270fh=9999d.end定义存储器映像寄存器全局符号,可在外部定义;设置堆栈指针寄存器的值为3000h;置位状态寄存器xf;调用delay函数;复位状态寄存器xf;调用delay函数;无条件转移至_main;空指令;空指令;设置辅助寄存器ar3值为9999;设置辅助寄存器ar4值为249;寄存器ar4值减一,当其值不为0时跳转到loop2;
5、寄存器ar3值减一,当其值不为0时跳转到loop1;返回;空指令;空指令(二)资料存储实验1、 实验使用资源本实验指导书是以TMS32OVC5410为例,介绍相关的内部和外部内存资源。对于其它类型的CPU请参考查阅相关的资料手册。下面给出TMS32OVC5410的内存分配表:对于存储空间而言,映像表相对固定。值得注意的是内部寄存器与存储空间的映像关系。因此在编程应用时这些特定的空间不能作其它用途。对于程序存储空间而言,其映像表和CPU的工作模式有关。当MP/MC引脚为高电平时,CPU工作在微处理器模式;当MP/MC引脚低电平时,CPU工作在为计算机模式。具体的内存映像关系如上如所示。内存实验主
6、要了解内存的操作和DSP的内部双总线结构。并熟悉相关的指令代码和执行过程等。2、 实验过程连接好DSP开发系统,运行CCS软件;a) 在CCS的Memory窗口中查找C5410各个区段的数据存储器地址,在可以改变的存储器内容的地方,选定地址随意改变其中内容并观察结果;b) 在CCS中装载实验示范程序,单步执行程序,程序中写入和读出的数据存储地址的变化;c) 改变其它寻址方式,进行观察数据存储器地址与写入和读出数据的的变化。本实验说明:本实验程序将对0x1000开始的8个地址空间,填写入0xAAAA的数值,然后读出,并存储到0X1008开始的8个地址空间。在CCS中可以观察DATA内存空间地址0
7、X10000X100F值的变化。样例程序实验操作说明:启动CCS 2.0,并加载“exp02.out”,用“View”下拉菜单中的“Memory”查看内存单元,输入要查看的内存单元地址,本实验要查看0x1000H0x100FH单元的数值变化,输入地址0x1000H,查看0x1000H0x100FH单元的初始值,单击“Run”运行程序,也可以“单步”运行程序,单击“Halt”暂停程序运行,查看0x1000H0x100FH单元内数值的变化关闭各窗口,本实验完毕。源程序注释:源程序:注释:*File Name:exp02.asm;get some knowledge of the cmd file;
8、the program is compiled at no autoinitialization mode.mmregs.global _main _main: ;store datastm 1000h,ar1 rpt#07h st0aaaah,*ar1+ ;read data then re-store stm 7h,ar3 stm1000h,ar1 stm 1008h,ar2 loop:ld*ar1+,t stt,*ar2+ banz loop,*ar3- here:b here .end;将外部内存地址1000h赋给ar1;循环执行下一条指令8次;将0aaaah的值存储在ar1所对应内存
9、中,且ar1值加1 ;将7h赋给辅助寄存器ar3;将地址1000h赋给辅助寄存器ar1;将地址1008h赋给辅助寄存器ar2;将辅助寄存器ar1的值赋给t,且ar1内存地址加1;将t的值存储在ar2所对应内存中,且ar2内存地址加1;寄存器ar3值减1,当其值不为0时跳转到loop;无条件转移至here(三)I/O实验1、 实验使用资源数字量输入信号全部拓展出来,数字量输入接口主要由两个,D_Exp与扳东开关连接,PX4和PX5与电平转换芯片(74LVC245)连接,其功能分别为:D_Exp数字量输入扩展接口I0I1I2I3I4I5I6I7VCC电平转换扩展接口PX45VIN0IN1IN2IN
10、3PX53.3VOUT3OUT2OUT1OUT0通过PORTR,PORTW指令可以实现I/O口的输入输出功能,如数字量采集实验。实验说明:实验中采用简单的一一映像关系来对I/O口进行验证,目的是使实验者能够对I/O 有一目了然的认识。在本实验系统中,提供的IO空间分配如下:CPU1:0x0000 switch input (X) 80x0001 LED output(X) 8CPU2:0x0001DAC0x0004Read_Key0x0006Write_Key0x000FWrite_LCD0x8000 HPIC00x8001HPIC10x8002HPID0(AUTO)0x8003HPID1(A
11、UTO)0x8004HPIA00x8005HPIA10x8006HPID0(NO AUTO)0x8007HPID1(NO AUTO)实验程序框图注意: 电平转换接口主要考虑应用3.3V的中央处理器时,系统的电平兼容问题,用来保护CPU不受损坏。系统采用74LVC245电平兼容转换器件。2、 实验过程运行CCS程序,装载示范程序,调整K0K7的开关,观察LP1LP7 LED亮灭的变化,以及输入和输出状态是否一致。(注意:输出为0时点亮灯)例程序实验操作说明启动CCS 2.0,并加载“exp03.out”,单击“Run”运行程序,任意调整K0K7开关,可以观察到对应LP0LP7灯“亮”或“灭”;单
12、击“Halt”,暂停持续运行,开关将对灯失去控制。关闭所有窗口,本实验完毕。源程序查看:用下拉菜单中Project/Open,打开“Exp03.pjt”,双击“Source”,双击“exp03.asm”可查看源程序。代码如下:源程序:注释:;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:stm31
13、00h,sp stm1000h,ar1portr 00h,*ar1 nop nop portw*ar1,01h nop nop b_main nop nop .end;设置堆栈指针寄存器的值为3000h;设置辅助寄存器ar1值为1000h;从00h端口读数据传入ar1所指向的内存空间,读按键;空指令;空指令;将ar1所指向的内存空间的值赋给01h端口,控制led灯;空指令;空指令 ;无条件转移至_main,实现按键控制;空指令;空指令(四)定时器实验1、实验使用资源定时器实验时要用到C54芯片的定时器控制寄存器,定时器时间常数寄存器,定时器中断响应,寄存器定义详见C54芯片资料。C54的定时器
14、是一个20位的减法计数器,可以被特定的状态位实现停止、重新启动、重设置或禁止,可以使用该定时器产生周期性的CPU中断,控制定时器中断频率的两个寄存器是定时周期寄存器PRD和定时减法寄存器TDDR定时器实验通过 LED(LP1LP7)来显示。在本系统中,时钟频率为20MHZ,令PRD = 0x4e1f,这样得到每1/1000秒中断一次,通过累计1000次,就能定时1秒钟。2、实验过程调入样例程序,装载并运行;例程序实验操作说明启动CCS 2.0,并加载“exp04.out”,单击“Run”运行,可观察到LED灯(LP0LP7)以一定的间隔时间不停摆动,单击“Halt”,暂停程序运行,LED 灯停
15、止闪烁,单击“Run”,运行程序,LED灯又开始闪烁。关闭所有窗口,本实验完毕。源程序:exp04.c注释:#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+1if(*(int *)0x300=0x3e8)*(int *)0x300=0; *(int *)0x302=*(int *)0x302
16、+1; if(flag=0) flag=1;porta();else flag=0;portb(); return; main()initial(); 初始化while(1); ; 无限循环 ;定时不断加1;当定时器数值达到0x3e8,开始定时器中断为定时器重新赋予初值;如果flag为0,则将其变为1,执行porta();如果flag为1,则将其变为1,执行portb()源程序:initial.asm.mmregs.global _initial_initial:stm 300h,ar1 st #00h,*ar1stm 302h,ar1st #00h,*ar1stm200h,ar1st#555
17、5h,*ar1stm201h,ar1st#0aaaah,*ar1stm202h,ar1st#400h,*ar1 ssbx1,11 stm 0ffffh,ifrstm 00h,imr stm 410h,tcrstm 4e1fh,prdstm 420h,tcrstm 08h,imrrsbx 1,11 ret;将300h赋值给ar1;将00h赋值给内存地址为300h的空间里;将302h赋值给ar1;将00h赋值给内存地址为302h的空间里;为内存200h的内容赋予5555h;为内存201h的内容赋予aaaah;为内存202h的内容赋予400h;设置ST1.INTM=1,停止所有的中断;清除所有中断的
18、标志位,中断标志寄存器(IFR)用来指明各个中断的目前状态。; 停止所有的中断 中断屏蔽寄存器(IMR)在需要的时候独立地屏蔽特定的中断; 停止定时器; 设置定时器, 定时器周期计数器; 打开定时器 定时器控制寄存器;允许定时器中断;设置ST1.INTM=0,打开所有中断源程序:port.asm注释:.mmregs.global_porta.global_portb_porta:stm304h,ar1 st5555h,*ar1portw*ar1,01hret_portb:stm304h,ar1st0aaaah,*ar1portw*ar1,01hret ;将304h赋给辅助寄存器ar1;将内存3
19、04h的内容赋予5555h;将内存304h的值写入01h端口;将内存304h的内容赋予0aaaah;将内存304h的值写入01端口源程序:vectors.asm注释: .sect .vectors .ref _c_int00 .ref _timer .align 0x80 RESET: BD_c_int00 STM #200,SP stack size of 200nmi: RETE NOP NOP NOP sint17 .space 4*16sint18 .space 4*16sint19 .space 4*16sint20 .space 4*16sint21 .space 4*16sint
20、22 .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: R
21、ETE NOP NOP NOPxint1: RETE NOP NOP NOPint3: RETE NOP NOP NOP .end引用函数c_int00引用了c中的函数页边界排列reset vector,复位中断响应延迟分支到C主程序默认入口地址,c_int00是c程序的入口,这里即进入main函数中开辟堆栈空间栈的大小设置为200中断屏蔽置为0,响应中断,不可屏蔽中断产生时,使中断屏蔽取消,后返回。保留出中断向量的地址空间中断寄存器设置RETE返回并允许中断外部中断产生时,直接返回。定时器产生的时钟中断,返回到c中定义的timer程序,b即是跳转同步串口0(McBSP0)接受的中断,直接返回
22、同步串口0(McBSP0)发送的中断,直接返回同步串口1(McBSP1)接受的中断,直接返回同步串口1(McBSP1)发送的中断,直接返回(五)INT2中断实验1、实验使用资源本实验是进行C54芯片的INT2中断练习, C54芯片中断INT2是低电平单脉冲触发;实验采用导线一端连接D_Exp数字量输入扩展接口I0,经PX4的IN3,到PX5的OUT0电平转换,再与另一端连接INT2插孔;拨动开关K0一次,就产生一个低电平单脉冲;运行示范程序,观察LP1LP7 LED灯的输出变化;可观察到每拨动开关K0一次LP1LP7灯亮灭变化一次;2、实验过程样例程序实验操作说明启动CCS 2.0,并加载“e
23、xp05.out”,单击“Run”运行程序,反复拨动开关K0,观察LP1LP7 LED灯亮灭变化,单击“Halt”暂停程序运行,反复拨动开关K0,LP1LP7 LED灯亮灭不变化; 关闭所有窗口,本实验完毕。源程序查看:用下拉菜单中Project/Open,打开“Exp05.pjt”,双击“Source”,双击“int2.c”、“initial.asm”、“port.asm”以及“vectors.asm”可查看各源程序。源程序:int2.c注释:interrupt void int2c(); extern void initial();extern voidporta();extern voi
24、d portb();int flag=0;main()initial();while(1); interrupt void int2c() asm(nop); *(int *)0x300=*(int *)0x300+2if(flag=0)flag=1;porta();elseflag=0; portb(); ;/*break here to show if interrupt happened*/这是一个记录外部中断的标志,通过记录0x300h中的值来记录源程序:initial.asm注释:.mmregs.global _initial .text _initial:stm 300h,ar3
25、st #00h,*ar3stm 302h,ar4st #00h,*ar4ssbx1,11 stm 00h,imrstm 0ffffh,ifrstm 04h,imrrsbx 1,11ret .end;将00h存入地址为300h的内存中;将00h存入地址为302h的内存中;设置ST1.INTM=1,停止所有的中断;停止所有的中断,中断屏蔽寄存器(IMR)在需要的时候独立地屏蔽特定的中断;清除所有中断的标志位,中断标志寄存器(IFR)用来指明各个中断的目前状态。;开启int2的外部中断;打开所有中断总开关源程序:port.asm注释:.mmregs.global_porta.global_portb
26、_porta:stm304h,ar1 st5555h,*ar1portw*ar1,01hret_portb:stm304h,ar1st0aaaah,*ar1portw*ar1,01hret ; 将304h赋给辅助寄存器ar1;将内存304h的内容赋予5555h;将内存304h的值写入01h端口;将内存304h的内容赋予0aaaah;将内存304h的值写入01端口源程序:vectors.asm注释: .sect .vectors .ref _c_int00 .ref _int2c .align 0x80 RESET: BD_c_int00 STM #200,SP stack size of 20
27、0nmi: RETE NOP NOP NOP sint17 .space 4*16sint18 .space 4*16sint19 .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 NOPint
28、1: 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引用函数c_int00页边界排列reset vector,复位中断响应延迟分支到C主程序默认入口地址,c_int00是c程序的入口,这里即进入main函数中开辟堆栈空间中断屏蔽置为0,响应中断,不可屏蔽中断产生时,使中断屏蔽取消,后返回
29、。保留出中断向量的地址空间中断寄存器设置RETE返回并允许中断外部中断产生时,直接返回。定时器产生的时钟中断,返回到c中定义的timer程序,b即是跳转同步串口0(McBSP0)接受的中断,直接返回同步串口0(McBSP0)发送的中断,直接返回同步串口1(McBSP1)接受的中断,直接返回同步串口1(McBSP1)发送的中断,直接返回实验二 A/D采样实验一、 实验目的1 掌握利用TLV320AD50实现/转换的技术基本原理和常用方法。2 学会DSP的多信道缓冲串口的应用方法。3 掌握并熟练使用DSP和AD50的接口及其操作。4 通过实验加深对DSP系统频谱混叠认识。二、 实验设备计算机,CC
30、S 2.0软件,DSP仿真器,实验箱,示波器,连接导线。三、 实验步骤和内容1 实验连线 用短接块短接SS1的1,2脚,设置输出低频信号;短接S2 的Sin脚,设置输出正弦波信号,这时模拟信号产生单元SP1输出为低频正弦波。 JD跳线断开,设置语音处理单元输入信号为交流;并用导线连接SP1脚和JAD3的1脚,将模拟低频正弦波信号接入语音处理单元。 用导线连接JAD1的INP和INPF,以及JAD2的INM和INMF,将语音处理单元输出的差动模拟信号接入AD50输入端。2 运行 CCS 2.0软件, 装入“exp06.pjt”工程文件,双击“exp06.pjt”及“Source”3加载“exp0
31、6.out”示范程序,在“exp06.c”中“READAD50()”处,设置断点,运行程序,通过用下拉菜单中的View / Graph的“Time/Frequency”打开一个图形观察窗口,调节输入信号的频率或幅值, 观察图形情况(幅值和频率),设置该图形观察窗口的参数,观察起始地址为0x1000H,长度为256的内存单元内的数据,该资料为输入信号经A/D转换之后的数据,数据类型为16位整型,击“Animate”运行程序,在图形观察窗口观察A/D转换后的采样波形。在图形观察窗口观察A/D转换后的采样波形;旋转开发板上的电位器,使幅度调节到适当位置,得到波形如下:旋转开发板上的频率旋钮,得到波形
32、如下:继续改变频率,导致频谱混叠,波形如下:实验三:转换实验一、 实验目的1 掌握利用TLV320AD50实现/转换的技术基本原理和常用方法。2 进一步学习DSP的多信道缓冲串口的应用方法。3 掌握并熟练使用DSP和AD50的输出接口及其操作。二、 实验设备计算机,CCS 2.0版软件,DSP仿真器,实验箱,示波器。三、 实验步骤与内容1 不需联机,通过示波器观测输出波形情况;2 运行CCS软件,加载示范源程序,了解实验程序; 3 加载示范程序“exp07.out”,并通过File/Data/Load装载波形数据sin.dat。.按F5运行程序,用示波器检测JAD4的3脚AD50_DAout输
33、出一个正弦波;.在程序中,改变相应资料来实现改变波形和周期;得到的波形如下所示:在示波器观察的模拟信号波形如下,由以上两个波形图可以看出,数字信号周期为,模拟信号周期为。右由模拟角频率与数字角频率的关系=*T=可推导出采样频率为之后也是问了老师,得知示波器的采样频率大约是10K+实验四:数字滤波器(FIR算法实验)一实验目的1掌握用窗函数法设计FIR数字滤波器的原理和方法;2熟悉线性相位FIR数字滤波器特性;3了解各种窗函数对滤波特性的影响。二实验设备计算机,CCS 2.0 版软件,实验箱,DSP仿真器,短接块,导线。三实验原理1有限冲击响应数字滤波器的基础理论;2模拟滤波器原理(巴特沃斯滤波
34、器、切比雪夫滤波器、贝塞尔滤波器);3数字滤波器系数的确定方法。四实验步骤1复习如何设计FIR数字滤波。阅读本实验原理,掌握设计步骤;2阅读本实验所提供的样例子程序;3运行CCS软件,对样例程序进行跟踪,分析结果;4填写实验报告。5样例程序实验操作说明1)实验前准备在模拟信号产生单元中,一路信号源产生低频正弦波信号(S1 置“L”),另一路信号源产生高频正弦波信号(S11置“H”),检查模拟信号输出端口“A”与“B”应断开;实验箱上电,用示波器分别观测out1和out2输出的模拟信号,调节电位器SPR1、SPR2(out1输出信号的频率调节和幅值调节)和电位器SPR11、SPR12(out2输
35、出信号的频率调节和幅值调节),直至满意为止;本样例实验程序建议:1.低频正弦波信号为100Hz/1V;2.高频正弦波信号为6KHz/1V;3.实验箱掉电,做以下连接和检查:4.短接输出端口“A”与“B”;5.短接JAD1的INM、INMF;短接JAD2的INP、INPF;6.用导线连接out2(模拟信号输出)和JAD3 1脚(MIC_IN);7.检查:JD 是否断开。注:有关以上连接的说明,可参见第八章中语音接口跳线接输出接口配置使用说明以及信号产生单元配置说明。正确完成计算机、DSP仿真器和实验箱的连接后,系统上电。实验程序说明:该程序为51阶FIR低通滤波器算法程序,采用矩形窗函数实现,数
36、组h和xmid长度均为51,fs 为采样频率,fstop 为滤波器截止频率,可以修改以上参数来改变滤波器性能。重新“Rebuild All”后,并加载“Load”,单击“Animate”,可得到不同的实验结果;实验结果:在CCS2.0环境,同步观察输入信号及其FIR低通滤波结果。通过修改程序,使得滤波器变为高通滤波器。未修改的源程序中的文件代码如下:extern void InitC5402(void);extern void OpenMcBSP(void);extern void CloseMcBSP(void);extern void READAD50(void);extern void WRITEAD50(void);/*