范文一:北邮dsp硬件实验
DSP硬件告实实实实
班:级级2010211204
学号:10210992
姓名:级级
2012年12月15号
实实实实一:常用指令一、目的 实实
1.熟悉DSP级级级级级级系的接
2.了解DSP级级级级级级级级级级级级级级级级系的成和构和用系构成
3.熟悉常用C54X系列指令的用法(程序址,寄存器,级级级级级级级I/O口,定器,中断控制级级级级级级级)。二、 实实实实
级算机,CCS 2.0版件,级级级DSP仿真器,箱。级级级级
三、操作方法 实实
1、系接 级级级
级行DSP级级级级级级级级级级级级级级级级级级级级级级级级级级级之前,先必接好仿真器、箱及算机,接方法如下所示:
在硬件安装完成后,接通仿真器源或启算机,此,仿真级级级级级级级级级级级级级级
盒上的“实色小灯”级级点亮,否DSP级级级级级级级级级级级级级系与算机接有。
2、运行 CCS程序
先箱上,然后启级级级级级级级级级级CCS,此仿真器上的级级级级级级“实”色小灯级点亮,并且CCS正常启
级级级级级级级级级级级级级级级级,表明系接正常,否仿真器的接、JTAG接口或CCS相置存在,级级级级级级级
掉,仿真器的接、级级级级级级级级级级级JTAG接口接,或级级级级级级CCS相置是否正确。级级级级级级级级
四、与内容 实实实步
,一, 简简指令程序行简简运
1、使用源 级级级级
级级级级级级级级通箱上的XF指示灯察程序运行果级级级级级级级级
2、程 级级级
启级CCS 2.0,并加级“exp01.out”,加完后,级级级级级级级“Run”运行程序,
实实实果:可级XF灯以一定率,级级级级级级级“Halt”级级停程序运行,XF灯停止,级级级如再级级“Run”,级“XF”灯又始,级级级级级
级级级级级级级所有窗口,本完。
源程序看:实实实用下拉菜中级级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 ;级级级级级级级级级级置堆指寄存器的3000hssbx xf ;置位状寄存器级级级级xfcall delay ;级用delay函数rsbx xf ;级级级级级位状寄存器xfcall delay ;级用delay函数b _main ;无条件移至级级级_mainnop ;空指令nop ;空指令;delay .5 second
delay:
stm 270fh,ar3 ;级级级级级级置助寄存器ar3级级9999loop1:
stm 0f9h,ar4
;级级级级级级置助寄存器ar4级级249loop2:
banz loop2,*ar4-
;寄存器ar4级级级级减一,当其不0级级级跳到
loop2banz loop1,*ar3-
;寄存器ar3级级级级减一,当其不0级级级跳到
loop1ret ;返回nop ;空指令nop
;空指令;stm2 cycles
;banzwhen TRUE 4 cycles
; FALSE 2 cycles;0f9h=>249d
;270fh=>9999d
.end
;二,简料存简简简
1、使用源 级级级级
本指是以级级级级级级级TMS32OVC5410级级级级级级级级级级级级例,介相的内部和外部内存级级级级级级级级源。于其它型的CPU级级级级级级级级级级级级级级级参考相的料手册。下面出TMS32OVC5410的内
存分配表:
级级级级级级级级级级级级级级级级级级级于存空而言,映像表相固定。得注意
的是内部寄存器与存空的映像系。因此在程用级级级级级级级级级级级级级级级级级级级级级级级级级级级级级级级级级级级级级级级级级级级些特定的空不能作其它用途。于程序存空而言,其映像表和CPU的工作模式有。当级级级MP/MC引脚高平,级级级级级级CPU工作在微理器模级级级级式,当MP/MC引脚低平,级级级级CPU工作在算机模式。具体级级级级级级级级级的内存映像系如上如所示。级级级级级级级级
内存主要了解内存的操作和级级级级级级级级级级级级DSP的内部双构。并熟悉相的级级级级级级级级级级级指令代和行程等。级级级级级级级级
2、程 级级级
级接好DSP级级级级级级系,运行CCS级件,
a) 在CCS的Memory窗口中找级级C5410各个区段的数据存器地址,级级级级级
在可以改的存器内容的地方级级级级级级级级级级,级级级级级级级级级级级级定地址随意改其中内容并察果,
b) 在CCS中装示范程序,级级级级级级级级级级级级级级行程序,程序中写入步
和出的数据存地址的化,级级级级级级级级级级级级级
c) 改其它址方式,行察数据存器地址与级级级级级级级级级级级级级级级级级级级级
写入和出数据的的化。级级级级级级级级级
本明:实实实实实
本程序将级级级级级级0x1000级始的8个地址空,填写入级级级级级0xAAAA的数,然后出,级级级级级级
并存到级级0X1008级始的8个地址空。在级级级CCS中可以察级级DATA内存空地址级级级
0X1000~0X100F级级级级的化。
实实实实实实实实例程序操作明:
启级CCS 2.0,并加级“exp02.out”,用“View”下拉菜中的级级级“Memory”级级看内存元,入要看的内存元地址,本要看级级级级级级级级级级级级级级级级级级级0x1000H~0x100FH级级级级级元的数化,级入地址0x1000H,看级级0x1000H~0x100FH级级级级级“元的初始,Run”运行程序,也可以运行程序,“级”级级“步Halt”级级级停程序运行,看0x1000H~0x100FH级级级级级元内数的化
级级级级级级级各窗口,本完。
源程序注:实实
源程序:注:级级
*File Name:exp02.asm
;get some knowledge of the cmd file;the program is compiled at no autoinitialization mode
.mmregs
.global _main
_main:
;store data
stm 1000h,ar1
;将外部内存地址1000h级级ar1rpt#07h
;循行下一条指令级级级级级级级级8次st0aaaah,*ar1+
;将0aaaah的存在级级级级ar1所内存中,且级级级级级级级;read data then re-store ar1级加1
stm 7h,ar3
stm1000h,ar1 ;将7h级级级助寄存器ar3
stm 1008h,ar2 ;将地址1000h级级级助寄存器ar1loop:;将地址1008h级级级助寄存器ar2
ld*ar1+,t
stt,*ar2+ ;将助寄存器级级级级级ar1的级级级t,且ar1内存地址
加1
banz loop,*ar3- ;将t的存在级级级级ar2所内存中,且级级级级级级级ar2
内存地址加1
here:;寄存器ar3级减1,当其不级级级0级级级跳到loop
b here
.end;无条件移至级级级here;三,I/O简简
1、使用源 实实实实
数字量入信号全部拓展出来,数字量入接口主要由两个,级级级级级级级级级级级级级级级级级级级级级级级级D_Exp与扳接,级级级级级PX4和PX5与平芯片,级级级级级级级74LVC245,接,其功能分:级级级级级级级级级级
D_Exp—数字量入展接口级级级级级级
,,,,,,:,,
I0I1I2I3I4I5I6I7VCC
级级级级级级级平展接口
,,,,
PX4—5VIN0IN1IN2IN3
PX5—3.3VOUT3OUT2OUT1OUT0
通级PORTR,PORTW指令可以级级I/O口的入出功能,如数字量采集。级级级级级级级级级级级级级级级级
实实实明:
级级级级级级级级级级级级级中采用的一一映像系来I/O口行,目的是使者能级级级级级级级级级级级级级级级I/O 有一
目了然的。在本系中,提供的级级级级级级级级级级级级级级IO空分配如下:级级级级级级
CPU1:
0x0000 switch input (X) 8
0x0001 LED output(X) 8
CPU2:
0x0001DAC
0x0004Read_Key
0x0006Write_Key
0x000FWrite_LCD
0x8000 HPIC0
0x8001HPIC1
0x8002HPID0(AUTO)
0x8003HPID1(AUTO)
0x8004HPIA0
0x8005HPIA1
0x8006HPID0(NO AUTO)
0x8007HPID1(NO AUTO)
实实实程序框
注意: 级级级级级级级级级级级平接口主要考用3.3V的中央理器,系的平兼容,用来保级级级级级级级级级级级级级级级级级级级
CPU不受坏。系采用级级级级级级级74LVC245级级级级级级平兼容器件。2、程 实实实
运行CCS程序,装示范程序,整级级级级级级级级K0,K7的,察级级级级级LP1~LP7 LED亮的级级级
化,以及入和出状是否一致。,级级级级级级级级级级级级注意:出实实实0实点亮灯,例程序操作明实实实实实实
启级CCS 2.0,并加级“exp03.out”,级级“Run”运行程序,任意整级级K0~K7级级,
可以察到级级级级级LP0~LP7灯亮或,“”“级”级级“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:
;级级级级级级级级级级置堆指寄存器的3000hstm3100h,sp
;级级级级级级置助寄存器ar1级级1000hstm1000h,ar1
portr 00h,*ar1 ;从00h端口数据入级级级级级ar1所指向的内存空
级级级级,按
;空指令nop
;空指令 nop
;将ar1所指向的内存空的级级级级级01h端口,控制portw*ar1,01h
led灯
;空指令nop
;空指令 nop
;无条件移至级级级_main,按控制级级级级级级b_main
;空指令nop
;空指令 nop
.end
;四,定简器简简
1、使用源实实实实实实
定器要用到级级级级级级级级C54芯片的定器控制寄存器,定器常数级级级级级级级级级级级级级级级寄存器,定器中断响,寄存器定级级级级级级级级级级级级级级C54芯片料。级级级C54的定器是一个级级级级级20位的减法级数器,可以被特定的状位停止、级级级级级级级级级级级级级级级级级级级重新启、重置或禁止,可以使用定器级级级级级级级级级级生周期性的CPU中断,控制定器中断率的两个寄级级级级级级级级级级存器是定级级级级级级周期寄存器PRD和定减法寄存器级级级级级级TDDR
定器通级级级级级级 LED,LP1~LP7,来示。在本系中,率级级级级级级级级级级级级级级20MHZ,令PRD = 0x4e1f,得到级级级级级每1/1000秒中断一次,通级级级累1000次,就能定级1秒级级。2、程实实实实
级级级级级级级级级级级级入例程序,装并运行,
例程序操作明实实实实实实
启级CCS 2.0,并加级“exp04.out”,级级“Run”运行,可察到级级级LED灯,LP0~LP7,以一定的级级级级级级级级级级级“隔不停,Halt”,停程序运行,级级级级级级级LED 灯停止,级级级级级“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+1 ;定不断加级级级级1if(*(int *)0x300==0x3e8) ;当定器数级级级级级级达到0x3e8,始定器中断级级级级级级级{ *(int *)0x300=0; 级级级级级级级级级定器重新予初*(int *)0x302=*(int *)0x302+1; if(flag==0) {flag=1;;如果flag级0,将其级级级级级1,行级级porta,, porta(); } else {flag=0; portb(); };如果flag级1,将其级级级级级1,行级级portb,,} return; } main() {initial(); 初始化 while(1){;} ; 无限循级 } 源程序:initial.asm .mmregs .global _initial _initial: stm 300h,ar1 ;将300h级级级ar1st #00h,*ar1;将00h级级级级内存地址300h的空级级里stm 302h,ar1;将302h级级级ar1st #00h,*ar1;将00h级级级级内存地址302h的空级级里stm200h,ar1 st#5555h,*ar1;级内存200h的内容级级予5555hstm201h,ar1 st#0aaaah,*ar1;级内存201h的内容级级予aaaahstm202h,ar1 st#400h,*ar1 ;级内存202h的内容级级予400hssbx1,11 ;级置ST1.INTM=1,停止所有的中断stm 0ffffh,ifr;清除所有中断的级级级级级级级志位,中断 志寄存器,IFR,用来指明各个中断的目前stm 00h,imr 状。级级 ; 停止所有的中断中断 屏蔽寄存器stm 410h,tcr,IMR,在需要的级级级级级级级候独立地屏蔽stm 4e1fh,prd特定的中断stm 420h,tcr; 停止定器级级stm 08h,imr; 级级 级级级级级级级置定器,定器周期数器rsbx 1,11 ; 打定器级级 级级级级级级级定器控制寄存器ret;允级级级级级级定器中断 ;级置ST1.INTM=0,打所有中断级级级级级 注:级级源程序:port.asm .mmregs .global_porta .global_portb _porta: stm304h,ar1 ;将304h级级级助寄存器ar1st5555h,*ar1;将内存304h的内容级级予5555hportw*ar1,01h;将内存304h的写入级级级01h端口ret _portb: stm304h,ar1 st0aaaah,*ar1 ;将内存304h的内容级级予0aaaahportw*ar1,01h ret;将内存304h的写入级级级01端口 注:级级源程序:vectors.asm .sect ".vectors" .ref _c_int00 引用函数c_int00 .ref _timer 引用了c中的函数 .align 0x80 级级界排列 RESET: reset vector,位中断响级级级级级级 BD_c_int00 STM 延级级级级分支到C主程序默级级级级级级入口地址,c_int00 #200,SP 是c程序的入口,级级级级级里即入main函数中 级级级级辟堆空 级级级级的大小置200 stack size of 200 中断屏蔽置级0,响中断,不可级级级级级级级屏nmi: 蔽中断级级级级级级级级级级级级级级级级生,使中断屏蔽取消,后返回。 RETE NOP NOP NOP sint17 .space 4*16保留出中断向量的地址空级sint18 .space 4*16 sint19 .space 4*16 sint20 .space 4*16 sint21 .space 4*16 sint22 .space 4*16 sint23 .space 4*16 sint24 .space 4*16 sint25 .space 4*16 sint26 .space 4*16 sint27 .space 4*16 sint28 .space 4*16 sint29 .space 4*16 sint30 .space 4*16 int0: RETE中断寄存器置级级RETE返回并允级级级中断 NOP外部中断级级级级级级级级级生,直接返回。 NOP NOP int1: RETE NOP NOP NOP int2: RETE NOP NOP NOP tint: b _timer NOP NOP rint0: RETE定器级级级级级级级级级级级级级生的中断,返回到c中定的级级 NOPtimer程序,b即是跳级 NOP NOP同串步口0,McBSP0,接受的中断,直接xint0: RETE返回 NOP NOP NOP同串步口0,McBSP0,级级级级级送的中断,rint1: RETE直接返回 NOP NOP NOP同串步口1,McBSP1,接受的中断,直接xint1: RETE返回 NOP NOP NOP同串步口1,McBSP1,级级级级级送的中断,int3: RETE直接返回 NOP NOP NOP .end ;五,INT2中简简断 1、使用源实实实实实实 本是行级级级级级C54芯片的INT2中断,级级级 C54芯片中断INT2是低平级级级级脉 冲触级级级级级级级级级级级级,采用一端接D_Exp—数字量入展接口级级级级级级I0,实PX4的IN3,到 PX5的OUT0实实实平,再与另一端接级级INT2插孔,级级级级K0一次,就生级级级级一个 低平级级级级级级级级级级级级级级级脉冲,运行示范程序,察LP1~LP7 LED灯的出化,可察到级级级级级级级级级级级级级级每K0一 次LP1~LP7灯亮化一次,级级级级级级 2、程实实实实 实实实实实实实例程序操作明 启级CCS 2.0,并加级“exp05.out”,级级“Run”运行程序,反级级级级级K0,察级级 LP1~LP7 LED灯亮化,级级级级级级“Halt”级级级级级级停程序运行,反K0,LP1~LP7 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 void portb();int flag=0; main() { initial(); while(1){;} } interrupt void int2c(){ asm("nop"); *(int *)0x300=*(int *)0x300+2 if(flag==0) {;/*break here to show if interrupt flag=1;happened*/级级级级级级级级是一个外部中断的porta();级级级级志,通0x300h中的来级级级级} else { flag=0; portb(); } } 源程序:initial.asm注:级级 .mmregs .global _initial .text _initial: stm 300h,ar3 st #00h,*ar3;将00h存入地址级300h的内存中stm 302h,ar4 st #00h,*ar4;将00h存入地址级302h的内存中ssbx1,11 ;级置ST1.INTM=1,停止所有的中断stm 00h,imr;停止所有的中断,中断屏蔽寄存器,IMR, 在需要的级级级级级级级级级级级级候独立地屏蔽特定的中断stm 0ffffh,ifr;清除所有中断的级级级级级级级志位,中断 志寄存器,IFR,用来指明各个中断的目前stm 04h,imr状。级级rsbx 1,11;级启int2的外部中断ret ;打所有中断级级级级级级级级.end 注:级级源程序:port.asm .mmregs .global_porta .global_portb _porta: stm304h,ar1 ; 将304h级级级助寄存器ar1st5555h,*ar1;将内存304h的内容级级予5555hportw*ar1,01h;将内存304h的写入级级级01h端口ret _portb: stm304h,ar1 st0aaaah,*ar1;将内存304h的内容级级予0aaaah portw*ar1,01h;将内存304h的写入级级级01端口ret 注:级级源程序:vectors.asm .sect ".vectors" .ref _c_int00 引用函数c_int00 .ref _int2c .align 0x80 级级界排列 RESET: reset vector,位中断响级级级级级级 BD_c_int00 STM 延级级级级分支到C主程序默级级级级级级入口地址,c_int00 #200,SP 是c程序的入口,级级级级级里即入main函数中 级级级级辟堆空 stack size of 200 中断屏蔽置级0,响中断,不可级级级级级级级屏nmi: 蔽中断级级级级级级级级级级级级级级级级生,使中断屏蔽取消,后返回。 RETE NOP NOP NOP sint17 .space 4*16保留出中断向量的地址空级sint18 .space 4*16 sint19 .space 4*16 sint20 .space 4*16 sint21 .space 4*16 sint22 .space 4*16 sint23 .space 4*16 sint24 .space 4*16 sint25 .space 4*16 sint26 .space 4*16 sint27 .space 4*16 sint28 .space 4*16 sint29 .space 4*16 sint30 .space 4*16 int0: RETE 中断寄存器置级级RETE返回并允级级级中断 NOP 外部中断级级级级级级级级级生,直接返回。 NOP NOP int1: RETE NOP NOP NOP int2: RETE NOP NOP NOP tint: b _timer NOP NOP rint0: RETE定器级级级级级级级级级级级级级生的中断,返回到c中定的级级 NOPtimer程序,b即是跳级 NOP NOP同串步口0,McBSP0,接受的中断,直接xint0: RETE返回 NOP NOP NOP同串步口0,McBSP0,级级级级级送的中断,rint1: RETE直接返回 NOP NOP NOP同串步口1,McBSP1,接受的中断,直接xint1: RETE返回 NOP NOP NOP同串步口1,McBSP1,级级级级级送的中断,int3: RETE直接返回 NOP NOP NOP .end 简简二 A/D采简简简 一、目的 级级 1,掌握利 用TLV320AD50级级,/,级级级级级级级级级级级级级级级的技基本原理和常用方法。 2, 学会DSP的多信道冲串级级级级级级级级级级口的用方法。 3,掌握 级级级并熟使用DSP和AD50的接口及其操作。 4, 级级级级级级通加深DSP系级级级级级级级级混叠。 二、 级级级级 级算机,CCS 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,加级“exp06.out”示范程序,在“exp06.c”中“READAD50,,,置断”级级级级 点,运行程序,通用下拉菜中的级级级级级级级级View / Graph的“Time/Frequency”打一个级级级 级级级级级级级 级级级级级级级级级级形察窗口,入信号的率或察形情况幅,,幅和 率,,置级级级级级级级级级级级级级级级级级级级级形察窗口的参数,察起始地址0x1000H,级级级度256的内存级 元内的数据,料入信号级级级级级级级级级A/D级级级级级之后的数据,数据型16位整型,级 “Animate”运行程序,在级级级级级级级级形察窗口察A/D级级级级级级后的采波形。 在级级级级级级级级形察窗口察A/D级级级级级级后的采波形, 旋板级级级级级级级级级级级级级级级级级级级级级级级级级级级级上的位器,使幅度到适当位置,得到波形如下: 旋板级级级级级级级级级级级级级级级级级级上的率旋,得到波形如下: 级级级级级级级级级级级级级级级级级级改率,致混叠,波形如下: 简简三,,,,简简简简 一、目的 级级 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级出一个正弦波, ,.在程序中,改相料来改级级级级级级级级级级级级级级级级波形和周期, 得到的波形如下所示: 在示波器察的模信号级级级级级级级级级级级级波形如下, 由以上两个波形实实实实实实实实实实实可以看出,数字信号周 期实实实实实实实实实实实实实实实,,,,,,模信号周期, :,。右由模实实实实实实实实实实实实实角率与数字角率的系Ω, =ω*T=ω,,可推实实实实实实实实实实实出采率,,,,, ,,之后也是了实实实实实实实实实实实实实实实实实实老,得知示波器的采率大是 10K+ 简简四,字简波器;数FIR算法简简,一,实实实实目的 1,掌握用窗函数法级级FIR数字级级级级级级级级级级波器的原理和方法, 2,熟悉级级级级性相位FIR数字级级级级级级波器特性, 3,了解各窗函数级级级级级级级级级级级级级波特性的影响。 二,实实实实 级算机,CCS 2.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级级级级级级级级级级级级级出信号的率和幅,,直至意止,级级级级级 本例程序级级级级级级级级级建: 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低通级级级级级级级级级级级波器算法程序,采用矩形窗函数,数级级级级级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); /*********************************************************************** ** Main Function Program ***********************************************************************/ #include "stdio.h" #include "math.h" #define pi 3.1415927 double npass,h[51], x, y, xmid[51]; int m=50; int n=256; void firdes (int m, double npass); main () { int xm,ym; int *px = (int*)0x3000; int *py = (int*)0x3100; double fs,fstop,r,rm; int i,j,p,k,s; k=0; fs = 16000; fstop = 2000; npass = fstop/fs; for (i=0; i<=m;>=m;> { xmid[i]=0; } firdes(m, npass); for (; ; ) { OpenMcBSP(); for (s=0; s<=4;>=4;> { READAD50(); for (i=0; i<=n-1;>=n-1;> { px = (int*)(0x3000+i); xm = *px; x = xm/32768.0; for (p=0; p<=m;>=m;> { xmid[m-p] = xmid[m-p-1]; } xmid[0] = x; r = 0; rm= 0; for (j=0; j<=m;>=m;> { r = xmid[j] * h[j]; rm = rm + r; } y = rm; py = (int*)(0x3100+i); ym = (int)(32768.0 * y); *py = ym; } WRITEAD50(); k++; } } /*void PROCESSING(void) { do the necessery operations here!*/ } void firdes(int m, double npass) { int t; for (t=0; t<=m;>=m;> { h[t] = sin((t-m/2.0)*npass*pi)/(pi*(t-m/2.0)); } if (t=m/2) h[t]=npass; } /************************************************************************* End of File exp08.c–– ***********************************************************************/低通级级级级级级级级级级级波器出波形如下: 级级级级级级级级级级级级级级级级级级级级级级级在要改成高通波器,可以在原来的程序中影部分那一行改 h[t] = (sin((t-m/2.0)*pi)-sin((t-m/2.0)*npass*pi))/(pi*(t-m/2.0)); 修改后的高通级级级级级级级级级级级波器波形如下所示: 实实实实: 首先来级级级级级级级级级级级级级级级级级级几个吧,前五个都是入,级级级级级级级级级级级级级级级级级级级级级我自己看懂代,于言的找确是 很人级级级级级级级级级级级级级级级,个必要,不想里面的.C文件那级级级级级级容易看懂,级级级级级级级级级级级级级级级也算是我第一次接触吧。然后就是AD,DA级级级级级的了,按照要求的方式接级级级级级级级级级级级级级级板上的接口,做起来也不。不在个程中,级级级级级级级级级级级级级级级级级级级级我于采有了更深的,因级级级级级级级级级级级级级级级级级级自己算除了机器的采率, 很有成就感。最后就是低通高通级级级级级级级级级级级波器了,老已了我级级级级级级级级级级级级级级级级级级一个低通波器,把代中的函数部分和端口改一下就能高通了,得级级级级级级级级级级级级级级级我是用宁窗级级级级级级级级级级级是高通波器,也我dsp所学知级级级级级级级级级有了一定的用。 级级级级级级级级级级级级级级级级级级级级级级级的来,次硬件,我于硬件的底构和CPU以及内存地址的操作有了一定的了解,于言也有了级级级级级级级级级一定的,然不上完全级级级级级级级级级级级级级级级级级级级掌握些知,但是于级级级级级级级级级级级级级级级级级级级我以后自学或者自己展方向也是有一定的帮助的。确要成一名好的工程,级级级级级级级级级级级级级件和硬件必得兼通。级级级级级 DSP 班级:2010211204 学号:10210992 姓名:许鹏 2012年12月15号 实验一:常用指令实验 一、 实验目的 1.熟悉DSP开发系统的连接 2.了解DSP开发系统的组成和结构和应用系统构成 3.熟悉常用C54X系列指令的用法(程序寻址,寄存器,I/O口,定时器,中 断控制)。 二、 实验设备 计算机,CCS 2.0版软件,DSP仿真器,实验箱。 三、 实验操作方法 1、 系统连接 进行DSP实验之前,先必须连接好仿真器、实验箱及计算机,连接方法如下所示: 在硬件安装完成后,接通仿真器电源或启动计算机,此时,仿真盒上的“红 色小灯”应点亮,否则DSP开发系统与计算机连接有问题。 2、 运行CCS程序 先实验箱上电,然后启动CCS,此时仿真器上的“绿色小灯”应点亮,并 且CCS正常启动,表明系统连接正常;否则仿真器的连接、JTAG接口或CCS 相关设置存在问题,掉电,检查仿真器的连接、JTAG接口连接,或检查CCS 相关设置是否正确。 四、 实验步骤与内容 (一) 简单指令程序运行实验 1、 实验使用资源 实验通过实验箱上的XF指示灯观察程序运行结果 2、 实验过程 启动CCS 2.0,并加载“exp01.out”;加载完毕后,单击“Run”运行程序; 实验结果:可见XF灯以一定频率闪烁;单击“Halt”暂停程序运行,则XF灯停止闪烁,如再单击“Run”,则“XF”灯又开始闪烁; 关闭所有窗口,本实验完毕。 源程序查看:用下拉菜单中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 ;设置堆栈指针寄存器的值为3000h ssbx xf ;置位状态寄存器xf call delay ;调用delay函数 rsbx xf ;复位状态寄存器xf call delay ;调用delay函数 b _main ;无条件转移至_main nop ;空指令 nop ;空指令 ;delay .5 second delay: stm 270fh,ar3 ;设置辅助寄存器ar3值为9999 loop1: stm 0f9h,ar4 ;设置辅助寄存器ar4值为249 loop2: ;寄存器ar4值减一,当其值不为0时跳转到 banz loop2,*ar4- loop2 banz loop1,*ar3- ;寄存器ar3值减一,当其值不为0时跳转到 loop1 ret ;返回 nop ;空指令 nop ;空指令 ;stm 2 cycles ;banz when TRUE 4 cycles ; FALSE 2 cycles ;0f9h=>249d ;270fh=>9999d .end (二)资料存储实验 1、 实验使用资源 本实验指导书是以TMS32OVC5410为例,介绍相关的内部和外部内存资源。对于其它类型的CPU请参考查阅相关的资料手册。下面给出TMS32OVC5410的内存分配表: 对于存储空间而言,映像表相对固定。值得注意的是内部寄存器与存储空间的映像关系。因此在编程应用时这些特定的空间不能作其它用途。对于程序存储空间而言,其映像表和CPU的工作模式有关。当MP/MC引脚为高电平时,CPU工作在微处理器模式;当MP/MC引脚低电平时,CPU工作在为计算机模式。具体的内存映像关系如上如所示。 内存实验主要了解内存的操作和DSP的内部双总线结构。并熟悉相关的指令代码和执行过程等。 2、 实验过程 连接好DSP开发系统,运行CCS软件; a) 在CCS的Memory窗口中查找C5410各个区段的数据存储器地址, 在可以改变的存储器内容的地方,选定地址随意改变其中内容并观察 结果; b) 在CCS中装载实验示范程序,单步执行程序,程序中写入和读出的 数据存储地址的变化; c) 改变其它寻址方式,进行观察数据存储器地址与写入和读出数据的的 变化。 本实验说明: 本实验程序将对0x1000开始的8个地址空间,填写入0xAAAA的数值,然 后读出,并存储到0X1008开始的8个地址空间。在CCS中可以观察 DATA内存空间地址0X1000~0X100F值的变化。 样例程序实验操作说明: 启动CCS 2.0,并加载“exp02.out”,用“View”下拉菜单中的“Memory”查看内存单元,输入要查看的内存单元地址,本实验要查看0x1000H~0x100FH 单元的数值变化,输入地址0x1000H,查看0x1000H~0x100FH单元的初始值,单击“Run”运行程序,也可以“单步”运行程序,单击“Halt”暂停程序运行,查看0x1000H~0x100FH单元内数值的变化 关闭各窗口,本实验完毕。 源程序注释: 源程序: 注释: *File Name:exp02.asm ;get some knowledge of the cmd file ;the program is compiled at no autoinitialization mode .mmregs .global _main _main: ;store data stm 1000h,ar1 ;将外部内存地址1000h赋给ar1 rpt #07h ;循环执行下一条指令8次 st 0aaaah,*ar1+ ;将0aaaah的值存储在ar1所对应内存 中,且ar1值加1 ;read data then re-store stm 7h,ar3 ;将7h赋给辅助寄存器ar3 stm 1000h,ar1 ;将地址1000h赋给辅助寄存器ar1 stm 1008h,ar2 ;将地址1008h赋给辅助寄存器ar2 loop: ld *ar1+,t ;将辅助寄存器ar1的值赋给t,且ar1内存地 st t,*ar2+ 址加1 ;将t的值存储在ar2所对应内存中,且ar2 banz loop,*ar3- 内存地址加1 ;寄存器ar3值减1,当其值不为0时跳转到 here: loop b here .end ;无条件转移至here (三)I/O实验 1、 实验使用资源 数字量输入信号全部拓展出来,数字量输入接口主要由两个,D_Exp与扳东开关连接,PX4和PX5与电平转换芯片(74LVC245)连接,其功能分别为: D_Exp—数字量输入扩展接口 , , , , , , , , , I0 I1 I2 I3 I4 I5 I6 I7 VCC 电平转换扩展接口 , , , , PX4—5V IN0 IN1 IN2 IN3 PX5—3.3V OUT3 OUT2 OUT1 OUT0 通过PORTR,PORTW指令可以实现I/O口的输入输出功能,如数字量采集 实验。 实验说明: 实验中采用简单的一一映像关系来对I/O口进行验证,目的是使实验者 能够对I/O 有一目了然的认识。在本实验系统中,提供的IO空间分配如下: CPU1: 0x0000 switch input (X) 8 0x0001 LED output(X) 8 CPU2: 0x0001 DAC 0x0004 Read_Key 0x0006 Write_Key 0x000F Write_LCD 0x8000 HPIC0 0x8001 HPIC1 0x8002 HPID0(AUTO) 0x8003 HPID1(AUTO) 0x8004 HPIA0 0x8005 HPIA1 0x8006 HPID0(NO AUTO) 0x8007 HPID1(NO AUTO) 实验程序框图 注意: 电平转换接口主要考虑应用3.3V的中央处理器时,系统的电平兼容问题,用来保护CPU不受损坏。系统采用74LVC245电平兼容转换器件。 2、 实验过程 ,K7的开关,观察LP1~LP7 LED运行CCS程序,装载示范程序,调整K0 亮灭的变化,以及输入和输出状态是否一致。(注意:输出为0时点亮灯) 例程序实验操作说明 启动CCS 2.0,并加载“exp03.out”,单击“Run”运行程序,任意调 整K0~K7开关,可以观察到对应LP0~LP7灯“亮”或“灭”;单击“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: stm 3100h,sp ;设置堆栈指针寄存器的值为3000h stm 1000h,ar1 ;设置辅助寄存器ar1值为1000h portr 00h,*ar1 ;从00h端口读数据传入ar1所指向的内存空 间,读按键 nop ;空指令 nop ;空指令 portw *ar1,01h ;将ar1所指向的内存空间的值赋给01h端 口,控制led灯 nop ;空指令 nop ;空指令 b_main ;无条件转移至_main,实现按键控制 nop ;空指令 nop ;空指令 .end (四)定时器实验 1、实验使用资源 定时器实验时要用到C54芯片的定时器控制寄存器,定时器时间常数寄存器,定时器中断响应,寄存器定义详见C54芯片资料。C54的定时器是一个20位的减法计数器,可以被特定的状态位实现停止、重新启动、重设置或禁止,可以使用该定时器产生周期性的CPU中断,控制定时器中断频率的两个寄存器是定时周期寄存器PRD和定时减法寄存器TDDR LED(LP1~LP7)来显示。在本系统中,时钟频率为定时器实验通过 20MHZ,令PRD = 0x4e1f,这样得到每1/1000秒中断一次,通过累计1000次,就能定时1秒钟。 2、实验过程 调入样例程序,装载并运行; 例程序实验操作说明 启动CCS 2.0,并加载“exp04.out”,单击“Run”运行,可观察到LED灯(LP0~LP7)以一定的间隔时间不停摆动,单击“Halt”,暂停程序运行,LED 灯停止闪烁,单击“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+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 ;将300h 赋值给ar1 st #00h,*ar1 ;将00h赋值给内存地址为300h的空间里 stm 302h,ar1 ;将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 ;设置ST1.INTM=1,停止所有的中断 stm 0ffffh,ifr ;清除所有中断的标志位,中断标志寄存器 (IFR)用来指明各个中断的目前状态。 stm 00h,imr ; 停止所有的中断 中断屏蔽寄存器(IMR) 在需要的时候独立地屏蔽特定的中断 stm 410h,tcr ; 停止定时器 stm 4e1fh,prd ; 设置定时器, 定时器周期计数器 stm 420h,tcr ; 打开定时器 定时器控制寄存器 stm 08h,imr ;允许定时器中断 rsbx 1,11 ;设置ST1.INTM=0,打开所有中断 ret 源程序: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 注释: 源程序:vectors.asm .sect ".vectors" .ref _c_int00 引用函数c_int00 .ref _timer 引用了c中的函数 .align 0x80 页边界排列 RESET: reset vector,复位中断响应 BD_c_int00 延迟分支到C主程序默认入口地址,c_int00 STM #200,SP 是c程序的入口,这里即进入main函数中 开辟堆栈空间 stack size of 200 栈的大小设置为200 nmi: 中断屏蔽置为0,响应中断,不可屏蔽中断产 RETE 生时,使中断屏蔽取消,后返回。 NOP NOP NOP sint17 .space 4*16 保留出中断向量的地址空间 sint18 .space 4*16 sint19 .space 4*16 sint20 .space 4*16 sint21 .space 4*16 sint22 .space 4*16 sint23 .space 4*16 sint24 .space 4*16 sint25 .space 4*16 sint26 .space 4*16 sint27 .space 4*16 sint28 .space 4*16 sint29 .space 4*16 sint30 .space 4*16 中断寄存器设置RETE返回并允许中断外部 int0: RETE 中断产生时,直接返回。 NOP NOP NOP int1: RETE NOP NOP NOP int2: RETE NOP NOP NOP tint: b _timer 定时器产生的时钟中断,返回到c中定义的 NOP timer程序,b即是跳转 NOP rint0: RETE 同步串口0(McBSP0)接受的中断,直接返 NOP 回 NOP NOP xint0: RETE 同步串口0(McBSP0)发送的中断,直接返 NOP 回 NOP NOP rint1: RETE 同步串口1(McBSP1)接受的中断,直接返 NOP 回 NOP NOP xint1: RETE 同步串口1(McBSP1)发送的中断,直接返 NOP 回 NOP NOP int3: RETE NOP NOP NOP .end (五)INT2中断实验 1、实验使用资源 本实验是进行C54芯片的INT2中断练习, C54芯片中断INT2是低电平 单脉冲触发;实验采用导线一端连接D_Exp—数字量输入扩展接口I0,经PX4 的IN3,到PX5的OUT0电平转换,再与另一端连接INT2插孔;拨动开关K0 一次,就产生一个低电平单脉冲;运行示范程序,观察LP1~LP7 LED灯的输 出变化;可观察到每拨动开关K0一次LP1~LP7灯亮灭变化一次; 2、实验过程 样例程序实验操作说明 启动CCS 2.0,并加载“exp05.out”,单击“Run”运行程序,反复拨动 开关K0,观察LP1~LP7 LED灯亮灭变化,单击“Halt”暂停程序运行,反 复拨动开关K0,LP1~LP7 LED灯亮灭不变化; 关闭所有窗口,本实验完毕。 源程序查看: 用下拉菜单中Project/Open,打开“Exp05.pjt”,双击“Source”,双击“int2.c”、 initial.asm”、“port.asm”以及“vectors.asm”可查看各源程序。 “ 源程序:int2.c 注释: interrupt void int2c(); extern void initial(); extern void porta(); extern void portb(); int flag=0; main() { initial(); while(1){;} } interrupt void int2c() { asm("nop"); *(int *)0x300=*(int *)0x300+2 if(flag==0) ; /*break here to show if interrupt { happened*/这是一个记录外部中断的标志, flag=1; 通过记录0x300h中的值来记录 porta(); } else { flag=0; portb(); } } 源程序:initial.asm 注释: .mmregs .global _initial .text _initial: stm 300h,ar3 st #00h,*ar3 ;将00h存入地址为300h的内存中 stm 302h,ar4 st #00h,*ar4 ;将00h存入地址为302h的内存中 ssbx 1,11 ;设置ST1.INTM=1,停止所有的中断 stm 00h,imr ;停止所有的中断,中断屏蔽寄存器(IMR) 在需要的时候独立地屏蔽特定的中断 stm 0ffffh,ifr ;清除所有中断的标志位,中断标志寄存器 (IFR)用来指明各个中断的目前状态。 stm 04h,imr ;开启int2的外部中断 rsbx 1,11 ;打开所有中断总开关 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 注释: 源程序:vectors.asm .sect ".vectors" .ref _c_int00 引用函数c_int00 .ref _int2c .align 0x80 页边界排列 RESET: reset vector,复位中断响应 BD_c_int00 延迟分支到C主程序默认入口地址,c_int00 STM #200,SP 是c程序的入口,这里即进入main函数中 开辟堆栈空间 stack size of 200 nmi: 中断屏蔽置为0,响应中断,不可屏蔽中断产 RETE 生时,使中断屏蔽取消,后返回。 NOP NOP NOP sint17 .space 4*16 保留出中断向量的地址空间 sint18 .space 4*16 sint19 .space 4*16 sint20 .space 4*16 sint21 .space 4*16 sint22 .space 4*16 sint23 .space 4*16 sint24 .space 4*16 sint25 .space 4*16 sint26 .space 4*16 sint27 .space 4*16 sint28 .space 4*16 sint29 .space 4*16 sint30 .space 4*16 中断寄存器设置RETE返回并允许中断外部int0: RETE 中断产生时,直接返回。 NOP NOP NOP int1: RETE NOP NOP NOP int2: RETE NOP NOP NOP tint: b _timer 定时器产生的时钟中断,返回到c中定义的 NOP timer程序,b即是跳转 NOP rint0: RETE 同步串口0(McBSP0)接受的中断,直接返 NOP 回 NOP NOP xint0: RETE 同步串口0(McBSP0)发送的中断,直接返 NOP 回 NOP NOP rint1: RETE 同步串口1(McBSP1)接受的中断,直接返 NOP 回 NOP NOP xint1: RETE 同步串口1(McBSP1)发送的中断,直接返 NOP 回 NOP NOP int3: RETE NOP NOP NOP .end 实验二 A/D采样实验 一、 实验目的 1( 掌握利用TLV320AD50实现,/,转换的技术基本原理和常用方法。 2( 学会DSP的多信道缓冲串口的应用方法。 ( 掌握并熟练使用DSP和AD50的接口及其操作。 3 4( 通过实验加深对DSP系统频谱混叠认识。 二、 实验设备 计算机,CCS 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(加载“exp06.out”示范程序,在“exp06.c”中“READAD50()”处,设置断点, 运行程序,通过用下拉菜单中的View / Graph的“Time/Frequency”打开一个图 形观察窗口,调节输入信号的频率或幅值, 观察图形情况(幅值和频率),设置 该图形观察窗口的参数,观察起始地址为0x1000H,长度为256的内存单元内的数 据,该资料为输入信号经A/D转换之后的数据,数据类型为16位整型,击“Animate” 运行程序,在图形观察窗口观察A/D转换后的采样波形。 在图形观察窗口观察A/D转换后的采样波形; 旋转开发板上的电位器,使幅度调节到适当位置,得到波形如下: 旋转开发板上的频率旋钮,得到波形如下: 继续改变频率,导致频谱混叠,波形如下: 实验三:,,,转换实验 一、 实验目的 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输出一个正弦波; ,.在程序中,改变相应资料来实现改变波形和周期; 得到的波形如下所示: 在示波器观察的模拟信号波形如下, 由以上两个波形图可以看出,数字信号周期为,(,,,,模拟 信号周期为,,,。右由模拟角频率与数字角频率的关系Ω, =ω*T=ω,,可推导出采样频率为,,,,,(之后也是问, 了老师,得知示波器的采样频率大约是10K+ 实验四:数字滤波器(FIR算法实验) 一(实验目的 1(掌握用窗函数法设计FIR数字滤波器的原理和方法; 2(熟悉线性相位FIR数字滤波器特性; 3(了解各种窗函数对滤波特性的影响。 二(实验设备 计算机,CCS 2.0 版软件,实验箱,DSP仿真器,短接块,导线。 三(实验原理 1(有限冲击响应数字滤波器的基础理论; 2(模拟滤波器原理(巴特沃斯滤波器、切比雪夫滤波器、贝塞尔滤波器); 3(数字滤波器系数的确定方法。 四(实验步骤 1(复习如何设计FIR数字滤波。阅读本实验原理,掌握设计步骤; 2(阅读本实验所提供的样例子程序; 3(运行CCS软件,对样例程序进行跟踪,分析结果; 4(填写实验报告。 5(样例程序实验操作说明 1)实验前准备 置“L”),在模拟信号产生单元中,一路信号源产生低频正弦波信号(S1 另一路信号源产生高频正弦波信号(S11置“H”),检查模拟信号输出端口“A”与“B”应断开;实验箱上电,用示波器分别观测out1和out2输出的模拟信号,调节电位器SPR1、SPR2(out1输出信号的频率调节和幅值调节)和电位器SPR11、SPR12(out2输出信号的频率调节和幅值调节),直至满意为止; 本样例实验程序建议: 1.低频正弦波信号为100Hz/1V; 2.高频正弦波信号为6KHz/1V; 3.实验箱掉电,做以下连接和检查: 4.短接输出端口“A”与“B”; 5.短接JAD1的INM、INMF;短接JAD2的INP、INPF; (模拟信号输出)和JAD3 1脚(MIC_IN); 6.用导线连接out2 7.检查:JD 是否断开。 注:有关以上连接的说明,可参见第八章中语音接口跳线接输出接口配置使用 说明以及信号产生单元配置说明。 正确完成计算机、DSP仿真器和实验箱的连接后,系统上电。 实验程序说明:该程序为51阶FIR低通滤波器算法程序,采用矩形窗函数实现,数组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); /*********************************************************************** ** Main Function Program ***********************************************************************/ #include "stdio.h" #include "math.h" #define pi 3.1415927 double npass,h[51], x, y, xmid[51]; int m=50; int n=256; void firdes (int m, double npass); main () { int xm,ym; int *px = (int*)0x3000; int *py = (int*)0x3100; double fs,fstop,r,rm; int i,j,p,k,s; k=0; fs = 16000; fstop = 2000; npass = fstop/fs; for (i=0; i<=m; i++)="">=m;> { xmid[i]=0; } firdes(m, npass); for (; ; ) { OpenMcBSP(); for (s=0; s<=4; s++)="">=4;> { READAD50(); for (i=0; i<=n-1; i++)="">=n-1;> { px = (int*)(0x3000+i); xm = *px; x = xm/32768.0; for (p=0; p<=m; p++)="">=m;> { xmid[m-p] = xmid[m-p-1]; } xmid[0] = x; r = 0; rm= 0; for (j=0; j<=m; j++)="">=m;> { r = xmid[j] * h[j]; rm = rm + r; } y = rm; py = (int*)(0x3100+i); ym = (int)(32768.0 * y); *py = ym; } WRITEAD50(); k++; } } /*void PROCESSING(void) { do the necessery operations here!*/ } void firdes(int m, double npass) { int t; for (t=0; t<=m; t++)="">=m;> { h[t] = sin((t-m/2.0)*npass*pi)/(pi*(t-m/2.0)); } if (t=m/2) h[t]=npass; } /*********************************************************************** ** End of File –– exp08.c ***********************************************************************/ 低通滤波器输出波形图如下: 现在要改成高通滤波器,可以在原来的程序中阴影部分那一行改为 h[t] = (sin((t-m/2.0)*pi)-sin((t-m/2.0)*npass*pi))/(pi*(t-m/2.0)); 修改后的高通滤波器波形图如下所示: 实验总结: 首先来说说这几个实验吧,前五个都是入门实验,让我们自己看懂代码,对于汇编语言的查找确实是很烦人,这个必须要记,不想里面的.C文件那样容易看懂,这也算是我们第一次接触汇编吧。然后就是AD,DA转换的实验了,按照要求的方式连接开发板上的接口,做起来也不复杂。不过在这个过程中,我对于采样有了更深的认识,因为自己算除了机器的采样频率,很有成就感。最后就是低通高通滤波器了,老师已经给了我们一个低通滤波器,把代码中的函数部分和端口改一下就能实现高通了,记得我们是用汉宁窗实现是高通滤波器,这也对我们dsp所学知识有了一定的应用。 总的来说,这次硬件实验,让我们对于硬件的底层结构和CPU以及内存地址的操作有了一定的了解,关于汇编语言也有了一定的认识,虽然还谈不上完全掌握这些知识,但是对于我们以后自学或者选择自己发展方向也是有一定的帮助的。确实要成为一名好的工程师,软件和硬件必须得兼通。 北京邮电大学 数字信号处理 硬件实验 学院: 班级: 学号: 姓名: 班内序号 实验一:常用指令实验 一、 实验目的 1. 熟悉 DSP 开发系统的连接 2. 了解 DSP 开发系统的组成和结构和应用系统构成 3. 熟悉常用 C54X 系列指令的用法 (程序寻址,寄存器, I/O口, 定时器,中断控制 ) 。 二、 实验设备 计算机, CCS 2.0版软件, DSP 仿真器,实验箱。 三、 实验操作方法 1、 系统连接 进行 DSP 实验之前,先必须连接好仿真器、实验箱及计算机,连 接方法如下所示: 在硬件安装完成后,接通仿真器电源或启动计算机,此时,仿 真盒上的 “红色小灯” 应点亮, 否则 DSP 开发系统与计算机连接有 问题。 2、 运行 CCS 程序 先实验箱上电,然后启动 CCS ,此时仿真器上的 “ 绿色小灯 ” 应点亮, 并且 CCS 正常启动, 表明系统连接正常; 否则仿真器的连 接、 JTAG 接口或 CCS 相关设置存在问题,掉电,检查仿真器的连 接、 JTAG 接口连接,或检查 CCS 相关设置是否正确。 四、 实验步骤与内容 (一) 简单指令程序运行实验 1、 实验使用资源 实验通过实验箱上的 XF 指示灯观察程序运行结果 2、 实验过程 启动 CCS 2.0,并加载“ exp01.out ”;加载完毕后,单击“ Run ” 运行程序; 实验结果:可见 XF 灯以一定频率闪烁;单击“ Halt ”暂停程序运 行,则 XF 灯停止闪烁,如再单击“ Run ”,则“ XF ”灯又开始闪烁; 关闭所有窗口,本实验完毕。 源程序查看:用下拉菜单中 Project/Open,打开“ Exp01.pjt ” 双击“ Source ”,双击“ exp01.asm ”可查看源程序。 源程序注释如下: .mmregs .global _main _main: stm #3000h,sp ssbx xf ;将 XF 置 1 call delay ;调用延时子程序 , 延时 rsbx xf ;将 XF 置 0 call delay ;调用延时子程序 , b _main ;程序跳转到 nop nop ; 延时子程序 delay: stm 270fh,ar3 ;设置辅助寄存器 ar3 loop1: ;循环开始 stm 0f9h,ar4 ;设置辅助寄存器 ar4 loop2: banz loop2,*ar4- ;跳转指令 ar4做自减,在减到零之前一直 做 loop2 banz loop1,*ar3- ;跳转指令, ar3做自减, 在 ar3减到零之前, 一直做 loop1 ret ; 返回指令 nop nop .end 实验截图 (二)资料存储实验 1、 实验使用资源 本实验指导书是以 TMS32OVC5410为例,介绍相关的内部和外部 内存资源。对于其它类型的 CPU 请参考查阅相关的资料手册。下面 给出 TMS32OVC5410的内存分配表: 对于存储空间而言,映像表相对固定。值得注意的是内部寄存 器与存储空间的映像关系。因此在编程应用时这些特定的空间不 能作其它用途。对于程序存储空间而言,其映像表和 CPU 的工作 模式有关。当 MP/MC引脚为高电平时, CPU 工作在微处理器模式; 当 MP/MC引脚低电平时, CPU 工作在为计算机模式。 具体的内存映 像关系如上如所示。 内存实验主要了解内存的操作和 DSP 的内部双总线结构。并熟 悉相关的指令代码和执行过程等。 2、 实验过程 连接好 DSP 开发系统,运行 CCS 软件; a) 在 CCS 的 Memory 窗口中查找 C5410各个区段的数据存储器 地址, 在可以改变的存储器内容的地方 , 选定地址随意改变 其中内容并观察结果; b) 在 CCS 中装载实验示范程序,单步执行程序,程序中写入 和读出的数据存储地址的变化; c) 改变其它寻址方式,进行观察数据存储器地址与写入和读 出数据的的变化。 本实验说明: 本实验程序将对 0x1000开始的 8个地址空间,填写入 0xAAAA 的 数值,然后读出,并存储到 0X1008开始的 8个地址空间。在 CCS 中可以观察 DATA 内存空间地址 0X1000~0X100F值的变化。 样例程序实验操作说明: 启动 CCS 2.0,并加载“ exp02.out ”,用“ View ”下拉菜单中 的“ Memory ”查看内存单元,输入要查看的内存单元地址,本实验 要查看 0x1000H~0x100FH单元的数值变化,输入地址 0x1000H ,查 看 0x1000H~0x100FH单元的初始值,单击“ Run ”运行程序,也可以 “单步”运行程序,单击“ Halt ”暂停程序运行,查看 0x1000H~0x100FH单元内数值的变化 关闭各窗口,本实验完毕。 源程序注释: ;get some knowledge of the cmd file ;the program is compiled at no autoinitialization mode .mmregs .global _main _main: ;store data stm 1000h,ar1 ;address of internal memory rpt #07h st 0aaaah,*ar1+ ; 将 数 据 ;read data then re-store stm 7h,ar3 stm 1000h,ar1 stm 1008h,ar2 loop: ;循环的将 1000H~1007H的八个单元中 的数据 COPY 到 1008H~100F的 ;八个存储单元中 . ld *ar1+,t ; 将辅助寄存器 ar1的值赋给 t , 且 ar1地址 加 1 st t,*ar2+ ;存储 T 寄存器的值 . 将 t 的值存储在 ar2所对应内存 中,且 ar2地址加 1 banz loop,*ar3- here: ;寄存器 ar3地址减 1, 当其值不为 0时跳转到 loop 无条件转移至 here b here .end 实验截图 nop nop tint0: b _timer0 ;检测到定时器产生中断 时,返回到 c 程序中的 timer () nop nop brint0: rete nop nop nop bxint0: rete nop nop nop dmac0: rete nop nop nop tint1_dmac1: rete nop nop nop int3: rete nop nop nop hpint: rete nop nop nop brint1_dmac2: rete nop nop nop bxint1_dmac3: rete nop nop nop dmac4: rete nop nop nop dmac5: rete nop nop nop } 实验截图 (五) INT2中断实验 1、实验使用资源 本实验是进行 C54芯片的 INT2中断练习, C54芯片中断 INT2是低电平单脉冲触发;实验采用导线一端连接 D_Exp—数字量输 入扩展接口 I0, 经 PX4的 IN3, 到 PX5的 OUT0电平转换 , 再与另一 端连接 INT2插孔; 拨动开关 K0一次, 就产生一个低电平单脉冲; 运行示范程序,观察 LP1~LP7 LED灯的输出变化;可观察到每拨 动开关 K0一次 LP1~LP7灯亮灭变化一次; 2、实验过程 样例程序实验操作说明 启动 CCS 2.0,并加载“ exp05.out ”,单击“ Run ”运行程序, 反复拨动开关 K0,观察 LP1~LP7 LED灯亮灭变化,单击“ Halt ” 暂停程序运行,反复拨动开关 K0, LP1~LP7 LED灯亮灭不变化; 关闭所有窗口,本实验完毕。 源程序查看: 用下拉菜单中 Project/Open,打开“ Exp05.pjt ”,双击 “ Source ”,双击“ int2.c ”、“ initial.asm ”、“ port.asm ” 以及“ vectors.asm ”可查看各源程序。 int2.c interrupt void int2c(); extern void initial(); extern void porta(); extern void portb(); int flag=0,i=0; main() { initial();//初始化 while(1) //死循环 { ; //空语句 } } interrupt void int2c() //中断子程序 { i=i+1; if(i==1) ;当 i 为 1时,让灯点亮,否则让 i 为零 { if(flag==0) { flag=1; ;当 flag 为 1时,执行 portb(),让 ar1的值为 aaaah ,即第二四六八个灯亮 orta(); i=0; } else { flag=0; 当 flag 为 0时,执行 porta(),让 ar1的值 为 5555h ,即第一三五七个灯亮 portb(); i=0; } } else { i=0; } return; } initial.asm .mmregs .global _initial .text _initial: NOP LD #0, DP ;将 0装入数据页指针(DP )中 STM #0, CLKMD STM #0, CLKMD ; 设置 pll 为 div 分频模式 TstStatu1: LDM CLKMD, A AND #01b, A ;将 A 中数据和 01b 求与之后存入 A 中 BC TstStatu1, ANEQ ; ANEQ , A 不等于 0时程序跳转到 TstStatu1 STM #0xF7FF, CLKMD ; 设置 C5402 DSP 时钟到 10MHz STM 0x3FA0, PMST ; vectors at 3F80h ARAM映射到数据和 程序存储空间 ssbx 1,11 ; 设置 ST1.INTM=1,停止所有的中断 stm #00h,imr ; 停止所有的中断 stm #0ffffh,ifr ; 清除所有中断的标志位 stm #04h,imr ; 开启 int2的外部中断 rsbx 1,11 ; 开启所有中断 ret .end port.asm .mmregs .global _porta .global _portb _porta: ; stm 304h,ar1 ;将 304h 赋值给辅助寄存器 ar1 st 5555h,*ar1 ;将内存 304h 的内容赋值给 5555h , 2468灯亮 portw *ar1,8001h ;将内存 304h 的值写入 8001h 端口 ret _portb: stm 304h,ar1 st 0aaaah,*ar1 ;将内存 304h 的内容赋值给 0aaaah , 1257灯亮 portw *ar1,8001h ;将内存 304h 的值写入 8001h 端口 ret Vector.asm .sect .ref _c_int00 ; 引用函数 c_int100 .ref _int2c .align 0x80 ; 页边界排列 RESET: ;复位中断响应 BD _c_int00 ; 延迟分支到 C 程序默认入口地址 c_int00是 C 程序的入口 STM #200,SP ; 将堆栈寄存器 SP 的值设为 200 nmi: RETE ;中断屏蔽置为 0,响应中断,不可屏蔽中断是,是中断屏蔽 取消后返回。 NOP NOP NOP sint17 .space 4*16 ; 保留中断向量的地址空间 sint18 .space 4*16 sint19 .space 4*16 sint20 .space 4*16 sint21 .space 4*16 sint22 .space 4*16 sint23 .space 4*16 sint24 .space 4*16 sint25 .space 4*16 sint26 .space 4*16 sint27 .space 4*16 sint28 .space 4*16 sint29 .space 4*16 sint30 .space 4*16 int0: ;中断寄存器设置 rete 返回并允许中断外 部中断产生时,直接返回。 RETE NOP NOP NOP int1: RETE NOP NOP NOP int2: b _int2c ;定时器产生中断时,返回到 C 程序中的 timer 函数。 NOP NOP tint: RETE NOP NOP NOP rint0: ;同步串口 0(McBSP0)接受的中断,直接返回 RETE NOP NOP NOP xint0: ;同步串口 0(McBSP0)发送的中断,直接返回 RETE NOP NOP NOP rint1: ; 同步串口 1(McBSP1) 接受的中断, 直接返回 RETE NOP NOP NOP xint1: ;同步串口 1(McBSP1)发送的中断,直接返回 RETE NOP NOP NOP int3: RETE NOP NOP NOP 实验截图 (六) A/D采样实验 一、 实验目的 1. 掌握利用 TLV320AD50实现A /D转换的技术基本原理和常用 方法。 2. 学会 DSP 的多信道缓冲串口的应用方法。 3. 掌握并熟练使用 DSP 和 AD50的接口及其操作。 4. 通过实验加深对 DSP 系统频谱混叠认识。 二、 实验设备 计算机, CCS 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.加载“ exp06.out ”示范程序,在“ exp06.c ”中“ READAD50 ()”处,设置断点,运行程序,通过用下拉菜单中的 View / Graph 的“ Time/Frequency”打开一个图形观察窗口,调节输 入信号的频率或幅值, 观察图形情况(幅值和频率),设置 该图形观察窗口的参数, 观察起始地址为 0x1000H , 长度为 256的内存单元内的数据, 该资料为输入信号经 A/D转换之后的数 据,数据类型为 16位整型,击“ Animate ”运行程序,在图形 观察窗口观察 A/D转换后的采样波形。 在图形观察窗口观察 A/D转换后的采样波形; 源程序查看 exp06.c #include ioport unsigned port8008; ; 全局变量定义与初始化 //ad7822的地址 unsigned int data_buff[256]; unsigned int j=0; 函数、子程序声明与定义 void sys_ini() //系统初始化子程序 { //全局禁止所有可屏蔽中断 asm( PMST&=0x00FF ; //io 空间 7个等待周期,程序与数据空间 0个等待周期 SWWSR=0x7000 ;//设置 pll 为 div 模式 CLKMD=0x0000 ; //等待设置完成 while(CLKMD==0x0001); { } //CLKOUT=(3+1)*CLKIN=40M,自动延时最长时间 CLKMD=0x37FA; //CLKOUT=(1+1)*CLKIN=20M,自动延时最长时间 //CLKMD=0x17FA; } void int1_ini() { IMR=0x0002; //使能外部中断 1 IFR=0xFFFF; //清除所有中断标志位 asm( 中断服务子程序声明与定义 interrupt void int1() //int1中断子程序 { data_buff[j]=port8008&0x00FF; //读取 ad7822转换数据 j++; if(j==255) { j=0; } return; } 主程序 void main(void) { sys_ini(); int1_ini(); for(;;) { } vector.asm .global _main,_int1 .sect reset: b_main ;复位中断时跳转到 c 程序主函数 (branch to C entry point 延迟分支到 c 程序, 默认入口地址 c_int00) nop nop nmi: rete ;NMI 非屏蔽外部中断输入引脚,不可屏蔽 中断时,返回并允许产生该中断 nop nop nop ; 保留中断地址的空间 sin17: .space 4*16 sin18: .space 4*16 sin19: .space 4*16 sin20: .space 4*16 sin21: .space 4*16 sin22: .space 4*16 sin23: .space 4*16 sin24: .space 4*16 sin25: .space 4*16 sin26: .space 4*16 sin27: .space 4*16 sin28: .space 4*16 sin29: .space 4*16 sin30: .space 4*16 int0: rete nop nop nop int1: b _int1 ; 跳转 int1中断子程序 nop nop int2: rete ;中断寄存器设置为 rete 返回, 允许中断 外部产生中断,并且直接返回 nop nop nop tint0: rete ;TIMER0 INTERRUPT nop nop brint0: rete ;BcBSP0 RECEIVE INTERRUPT nop nop nop bxint0: rete ;BcBSP0 TRANSMIT INTERRUPT nop nop nop dmac0: rete ;RESERVED OR DMA CHANNEL0 INTERRUPT nop nop nop tint1_dmac1: rete ;TIMER1 INTERRUPT OR DMA CHANNEL1 INTERRUPT nop nop int3: rete ;EXTERNAL INT3 nop nop nop hpint: rete ;HPI INTERRUPT nop nop nop brint1_dmac2: rete ;McBSP1 RECEIVE INTERRUPT OR DMA CHANNEL 2 INTERRUPT nop nop nop bxint1_dmac3: rete ;McBSP1 TRANSMIT INTERRUPT OR DMA CHANNEL 3 INTERRUPT nop nop nop dmac4: rete ;DMA CHANNEL 4 INTERRUPT nop nop nop dmac5: rete ;DMA CHANNEL 5 INTERRUP T nop nop nop .end 实验七:D/A转换实验 一、 实验目的 1. 掌握利用 TLV320AD50实现D /A转换的技术基本原理和常用 方法。 2. 进一步学习 DSP 的多信道缓冲串口的应用方法。 3. 掌握并熟练使用 DSP 和 AD50的输出接口及其操作。 二、 实验设备 计算机, CCS 2.0版软件, DSP 仿真器,实验箱,示波器。 三、 实验步骤与内容 1. 不需联机,通过示波器观测输出波形情况; 2. 运行 CCS 软件,加载示范源程序,了解实验程序; 3. 加载示范程序“ exp07.out ”,并通过 File/Data/Load装载 波形数据 sin.dat 。 4. 按 F5运行程序,用示波器检测 JAD4的 3脚 AD50_DAout输出 一个正弦波; 5. 在程序中,改变相应资料来实现改变波形和周期; 得到的波形如下所示: 查看源程序 vector.asm ;----------------------------------------------------- .def Interrupt_Vectors ; .ref nNMI_SINT16 ; .ref SINT17 ; .ref SINT18 ; .ref SINT19 ; .ref SINT20 ; .ref SINT21 ; .ref SINT22 ; .ref SINT23 ; .ref SINT24 ; .ref SINT25 ; .ref SINT26 ; .ref SINT27 ; .ref SINT28 ; .ref SINT29 ; .ref SINT30 ; .ref _ExtInt0 ; .ref _ExtInt1 ; .ref _Tint0 ; .ref BRINT0_SINT4 ; .ref BXINT0_SINT5 ; .ref _Tint1 ; .ref _ExtInt3 ; .ref _mcbsp1_read ; .ref _mcbsp1_write ; .ref _ExtInt2 .ref _c_int00 ;***************************************************** STACK_LEN .set 100 STACK .usect ;******************************************************* .sect .align 0x80 ; must be aligned on page boundary ;**************************************** ; the Interrutp table see spru13lg:P182 ;************************************** Interrupt_Vectors: nRS_SINTR: ; Reset Interrupt vector(vector_base + 0x00) stm #STACK+STACK_LEN,SP b _c_int00 nNMI_SINT16: ; Non-maskable Interrupt Vector (vector_base + 0x04) ;b nNMI_SINT16 rete nop nop ; nop ; SINT17: ; Software Interrupt 17 Vector (vector_base + 0x08) ;b SINT17 ; context switch rete nop nop ; nop ; SINT18: ;Software Interrupt 18 Vector (vector_base + 0x0C) ;b SINT18 rete nop nop ; nop ; SINT19: ;Software Interrupt 19 Vector (vector_base + 0x10) ;b SINT19 rete nop nop ; SINT20: ;Software Interrupt 20 Vector (vector_base + 0x14) ;b SINT20 rete nop nop ; nop ; SINT21: ;Software Interrupt 21 Vector (vector_base + 0x18) ;b SINT21 rete nop nop ; nop ; SINT22: ;Software Interrupt 22 Vector (vector_base + 0x1C) ;b SINT22 rete nop nop ; SINT23: ;Software Interrupt 23 Vector (vector_base + 0x20) ;b SINT23 rete nop nop ; nop ; SINT24: ;Software Interrupt 24 Vector (vector_base + 0x24) ;b SINT24 rete nop nop ; nop ; SINT25: ;Software Interrupt 25 Vector (vector_base + 0x28) ;b SINT25 rete nop nop ; nop ; (vector_base + 0x2C) ;b SINT26 rete nop nop ; nop ; SINT27: ;Software Interrupt 27 Vector (vector_base + 0x30) ;b SINT27 rete nop nop ; nop ; SINT28: ;Software Interrupt 28 Vector (vector_base + 0x34) ;b SINT28 rete nop nop ; nop ; (vector_base + 0x38) ;b SINT29 rete nop nop ; nop ; SINT30: ;Software Interrupt 30 Vector (vector_base + 0x3C) ;b SINT30 rete nop nop ; nop ; nINT0_SINT0: ; External Interrupt 0 Vector (vector_base + 0x40) ;b _ExtInt0 rete nop nop ; nop nINT1_SINT1: ; External Interrupt 1 Vector (vector_base + 0x44) ;b _ExtInt1 rete nop nop nop nINT2_SINT2: ; External Interrupt 2 Vector (vector_base + 0x48) ;b _ExtInt2 rete nop nop nop TINT0_SINT3: ; Timer Interrupt Vector (vector_base + 0x4C) ;b _Tint0 rete nop nop nop 学院: 班级: 学号: 姓名: 班内序号 实验一:常用指令实验 一、 实验目的 1.熟悉DSP开发系统的连接 2.了解DSP开发系统的组成和结构和应用系统构成 3.熟悉常用C54X系列指令的用法(程序寻址,寄存器,I/O口, 定时器,中断控制)。 二、 实验设备 计算机,CCS 2.0版软件,DSP仿真器,实验箱。 三、 实验操作方法 1、 系统连接 进行DSP实验之前,先必须连接好仿真器、实验箱及计算机,连 接方法如下所示: 在硬件安装完成后,接通仿真器电源或启动计算机,此时,仿 真盒上的“红色小灯”应点亮,否则DSP开发系统与计算机连接有 问题。 2、 运行CCS程序 先实验箱上电,然后启动CCS,此时仿真器上的“绿色小灯” 应点亮,并且CCS正常启动,表明系统连接正常;否则仿真器的连 接、JTAG接口或CCS相关设置存在问题,掉电,检查仿真器的连 接、JTAG接口连接,或检查CCS相关设置是否正确。 四、 实验步骤与内容 (一) 简单指令程序运行实验 1、 实验使用资源 实验通过实验箱上的XF指示灯观察程序运行结果 2、 实验过程 启动CCS 2.0,并加载“exp01.out”;加载完毕后,单击“Run” 运行程序; 实验结果:可见XF灯以一定频率闪烁;单击“Halt”暂停程序运行,则XF灯停止闪烁,如再单击“Run”,则“XF”灯又开始闪烁; 关闭所有窗口,本实验完毕。 源程序查看:用下拉菜单中Project/Open,打开“Exp01.pjt” 双击“Source”,双击“exp01.asm”可查看源程序。 源程序注释如下: .mmregs .global _main _main: stm #3000h,sp ssbx xf ;将XF置1 call delay ;调用延时子程序,延时 rsbx xf ;将XF置0 call delay ;调用延时子程序, b _main ;程序跳转到"_MAIN" nop nop ;延时子程序 delay: stm 270fh,ar3 ;设置辅助寄存器ar3 loop1: ;循环开始 stm 0f9h,ar4 ;设置辅助寄存器ar4 loop2: banz loop2,*ar4- ;跳转指令ar4做自减,在减到零之前一直 做loop2 banz loop1,*ar3- ;跳转指令,ar3做自减,在ar3减到零之前, 一直做loop1 ret ;返回指令 nop nop .end 实验截图 (二)资料存储实验 1、 实验使用资源 本实验指导书是以TMS32OVC5410为例,介绍相关的内部和外部内存资源。对于其它类型的CPU请参考查阅相关的资料手册。下面给出TMS32OVC5410的内存分配表: 对于存储空间而言,映像表相对固定。值得注意的是内部寄存 器与存储空间的映像关系。因此在编程应用时这些特定的空间不 能作其它用途。对于程序存储空间而言,其映像表和CPU的工作 模式有关。当MP/MC引脚为高电平时,CPU工作在微处理器模式; 当MP/MC引脚低电平时,CPU工作在为计算机模式。具体的内存映 像关系如上如所示。 内存实验主要了解内存的操作和DSP的内部双总线结构。并熟 悉相关的指令代码和执行过程等。 2、 实验过程 连接好DSP开发系统,运行CCS软件; a) 在CCS的Memory窗口中查找C5410各个区段的数据存储器 地址,在可以改变的存储器内容的地方,选定地址随意改变 其中内容并观察结果; b) 在CCS中装载实验示范程序,单步执行程序,程序中写入 和读出的数据存储地址的变化; c) 改变其它寻址方式,进行观察数据存储器地址与写入和读 出数据的的变化。 本实验说明: 本实验程序将对0x1000开始的8个地址空间,填写入0xAAAA的 数值,然后读出,并存储到0X1008开始的8个地址空间。在 CCS中可以观察DATA内存空间地址0X1000~0X100F值的变化。 样例程序实验操作说明: 启动CCS 2.0,并加载“exp02.out”,用“View”下拉菜单中的“Memory”查看内存单元,输入要查看的内存单元地址,本实验要查看0x1000H~0x100FH单元的数值变化,输入地址0x1000H,查看0x1000H~0x100FH单元的初始值,单击“Run”运行程序,也可以“单步”运行程序,单击“Halt”暂停程序运行,查看0x1000H~0x100FH单元内数值的变化 关闭各窗口,本实验完毕。 源程序注释: ;get some knowledge of the cmd file ;the program is compiled at no autoinitialization mode .mmregs .global _main _main: ;store data stm 1000h,ar1 ;address of internal memory rpt #07h st 0aaaah,*ar1+ ;将数据"0AAAAH"存放到以地址1000H~1007H的八个存储单元中. ;read data then re-store stm 7h,ar3 stm 1000h,ar1 stm 1008h,ar2 loop: ;循环的将1000H~1007H的八个单元中的数据COPY到1008H~100F的 ;八个存储单元中. ld *ar1+,t ;将辅助寄存器ar1的值赋给t,且ar1地址加1 st t,*ar2+ ;存储T寄存器的值.将t的值存储在ar2所对应内存中,且ar2地址加1 banz loop,*ar3- here: ;寄存器ar3地址减1,当其值不为0时跳转到loop无条件转移至here b here .end 实验截图 (三)I/O实验 1、 实验使用资源 数字量输入信号全部拓展出来,数字量输入接口主要由两个, D_Exp与扳东开关连接,PX4和PX5与电平转换芯片(74LVC245) 连接,其功能分别为: D_Exp—数字量输入扩展接口 , , , , , , , , , IIIIIIII VCC 0 1 2 3 4 5 6 7 电平转换扩展接口 , , , , PX4—5V IN0 IN1 IN2 IN3 PX5—3.3V OUT3 OUT2 OUT1 OUT0 通过PORTR,PORTW指令可以实现I/O口的输入输出功能,如数字量采集实验。 实验说明: 实验中采用简单的一一映像关系来对I/O口进行验证,目的是使实验者能够对I/O 有一目了然的认识。在本实验系统中,提供的IO空间分配如下: CPU1: 0x0000 switch input (X) 8 0x0001 LED output(X) 8 CPU2: 0x0001 DAC 0x0004 Read_Key 0x0006 Write_Key 0x000F Write_LCD 0x8000 HPIC0 0x8001 HPIC1 0x8002 HPID0(AUTO) 0x8003 HPID1(AUTO) 0x8004 HPIA0 0x8005 HPIA1 0x8006 HPID0(NO AUTO) 0x8007 HPID1(NO AUTO) 实验程序框图 注意: 电平转换接口主要考虑应用3.3V的中央处理器时,系统的电平兼容问题,用来保护CPU不受损坏。系统采用74LVC245电平兼容转换器件。 2、 实验过程 运行CCS程序,装载示范程序,调整K0,K7的开关,观察 LP1~LP7 LED亮灭的变化,以及输入和输出状态是否一致。(注 意:输出为0时点亮灯) 例程序实验操作说明 启动CCS 2.0,并加载“exp03.out”,单击“Run”运行程 序,任意调整K0~K7开关,可以观察到对应LP0~LP7灯“亮”或 “灭”;单击“Halt”,暂停持续运行,开关将对灯失去控制。 关闭所有窗口,本实验完毕。 源程序查看: 用下拉菜单中Project/Open,打开“Exp03.pjt”,双击 “Source”,双击“exp03.asm”可查看源程序。 代码如下: .mmregs .global _main .text _main: stm 3100h,sp stm 1000h,ar1 portr 8000h,*ar1 ;读入I/O 8000H数据,将其存储到数据空间的1000H nop ;NOP为空操作,起延时作用. nop portw *ar1,8001h ;将数据空间的1000H单元的数据,写出到I/O 8000H nop nop b _main ;程序跳转到"_MAIN"执行. nop nop .end 实验截图 (四)定时器实验 1、实验使用资源 定时器实验时要用到C54芯片的定时器控制寄存器,定时器时间常数寄存器,定时器中断响应,寄存器定义详见C54芯片资料。C54的定时器是一个20位的减法计数器,可以被特定的状态位实现停止、重新启动、重设置或禁止,可以使用该定时器产生周期性的CPU中断,控制定时器中断频率的两个寄存器是定时周期寄存器PRD和定时减法寄存器TDDR 定时器实验通过 LED(LP1~LP7)来显示。在本系统中,时钟频率为20MHZ,令PRD = 0x4e1f,这样得到每1/1000秒中断一次,通过累计1000次,就能定时1秒钟。 2、实验过程 调入样例程序,装载并运行; 例程序实验操作说明 启动CCS 2.0,并加载“exp04.out”,单击“Run”运行,可观察到LED灯(LP0~LP7)以一定的间隔时间不停摆动,单击“Halt”,暂停程序运行,LED 灯停止闪烁,单击“Run”,运行程序,LED灯又开始闪烁。 关闭所有窗口,本实验完毕。 exp04.c 函数、子程序声明与定义 void sys_ini() //系统初始化子程序 { asm(" ssbx INTM"); //全局禁止所有可屏蔽中断 PMST&=0x00FF; //(DRAM映射到程序空间和数据空间)向量表映射到0x0080空间 SWWSR=0x7000; //io空间7个等待周期,程序与数据空间0个等待周期 CLKMD=0x17FA; //CLKOUT=2*CLKIN=2*10M=20M, 自动延时最长时间 } void timer0_ini() //定时器0初始化子程序 { TCR|=0x0010; //停止定时器0 PRD=0x2710; //PRD=10000(D) TCR|=0x000A; //TDDR=10(D),所以定时器时钟=1/(20M/10/10000)=5ms IMR=0x0008; //使能定时器0中断 IFR=0xFFFF; //清除所有中断标志位 asm(" rsbx INTM"); //全局使能可屏蔽中断 TCR&=0xFFEF; //开始定时器0 TCR|=0x0020; //复位定时起0 } 中断服务子程序声明与定义 interrupt void timer0() //定时器0中断子程序 { if(num==200) //记200次定时器中断,时间 =200*5ms=1s { show=~show; //取反 num=0; } else num++; return; } 主程序 void main(void) { sys_ini(); timer0_ini(); for(;;) { port8001=show; } } vectors.asm .global _c_int00,_timer0 .sect ".vecs" ;自定义向量表 reset: ;复位中断时跳转到c程序主函数(branch to C entry point延迟分支到c程序,默认入口地址c_int00) 开辟堆栈空间 b _c_int00 ; nop nop nmi: rete ;NMI 非屏蔽外部中断输入引脚,不可屏蔽中断时,返回并允许产生该中断 nop nop nop sin17: .space 4*16 ;保留中断向量的地址空间 sin18: .space 4*16 sin19: .space 4*16 sin20: .space 4*16 sin21: .space 4*16 sin22: .space 4*16 sin23: .space 4*16 sin24: .space 4*16 sin25: .space 4*16 sin26: .space 4*16 sin27: .space 4*16 sin28: .space 4*16 sin29: .space 4*16 sin30: .space 4*16 int0: rete nop nop nop int1: rete ;中断寄存器设置为rete返回,允许中断外部产生中断,并且直接返回 nop nop nop int2: rete nop nop nop tint0: b _timer0 ;检测到定时器产生中断 时,返回到c程序中的timer() nop nop brint0: rete nop nop nop bxint0: rete nop nop nop dmac0: rete nop nop nop tint1_dmac1: rete nop nop nop int3: rete nop nop nop hpint: rete nop nop nop brint1_dmac2: rete nop nop nop bxint1_dmac3: rete nop nop nop dmac4: rete nop nop nop dmac5: rete nop nop nop } 实验截图 (五)INT2中断实验 1、实验使用资源 本实验是进行C54芯片的INT2中断练习, C54芯片中断INT2 是低电平单脉冲触发;实验采用导线一端连接D_Exp—数字量输 入扩展接口I0,经PX4的IN3,到PX5的OUT0电平转换,再与另一 端连接INT2插孔;拨动开关K0一次,就产生一个低电平单脉冲; 运行示范程序,观察LP1~LP7 LED灯的输出变化;可观察到每拨 动开关K0一次LP1~LP7灯亮灭变化一次; 2、实验过程 样例程序实验操作说明 启动CCS 2.0,并加载“exp05.out”,单击“Run”运行程序, 反复拨动开关K0,观察LP1~LP7 LED灯亮灭变化,单击“Halt” 暂停程序运行,反复拨动开关K0,LP1~LP7 LED灯亮灭不变化; 关闭所有窗口,本实验完毕。 源程序查看: 用下拉菜单中Project/Open,打开“Exp05.pjt”,双击 “Source”,双击“int2.c”、“initial.asm”、“port.asm” 以及“vectors.asm”可查看各源程序。 int2.c interrupt void int2c(); extern void initial(); extern void porta(); extern void portb(); int flag=0,i=0; main() { initial();//初始化 while(1) //死循环 { ; //空语句 } } interrupt void int2c() //中断子程序 { i=i+1; if(i==1) ;当i为1时,让灯点亮,否则让i为零 { if(flag==0) { flag=1; ;当flag为1时,执行portb(),让ar1 的值为aaaah,即第二四六八个灯亮 orta(); i=0; } else { flag=0; 当flag为0时,执行porta(),让ar1的值 为5555h,即第一三五七个灯亮 portb(); i=0; } } else { i=0; } return; } initial.asm .mmregs .global _initial .text _initial: NOP LD #0, DP ; 将0装入数据页指针(DP)中 STM #0, CLKMD STM #0, CLKMD ; 设置pll为div分频模式 TstStatu1: LDM CLKMD, A AND #01b, A ;将A中数据和01b求与之后存入A中 BC TstStatu1, ANEQ ; ANEQ,A不等于0时程序跳转到TstStatu1 STM #0xF7FF, CLKMD ; 设置C5402 DSP 时钟到 10MHz STM 0x3FA0, PMST ; vectors at 3F80h ARAM映射到数据和程序存储空间 ssbx 1,11 ; 设置ST1.INTM=1,停止所有的中断 stm #00h,imr ;停止所有的中断 stm #0ffffh,ifr ;清除所有中断的标志位 stm #04h,imr ;开启int2的外部中断 rsbx 1,11 ;开启所有中断 ret .end port.asm .mmregs .global _porta .global _portb _porta: ; stm 304h,ar1 ;将304h赋值给辅助寄存器ar1 st 5555h,*ar1 ;将内存304h的内容赋值给5555h,2468灯亮 portw *ar1,8001h ;将内存304h的值写入8001h端口 ret _portb: stm 304h,ar1 st 0aaaah,*ar1 ;将内存304h的内容赋值给0aaaah,1257灯亮 portw *ar1,8001h ;将内存304h的值写入8001h端口 ret Vector.asm .sect ".vectors" .ref _c_int00 ; 引用函数c_int100 .ref _int2c .align 0x80 ; 页边界排列 RESET: ;复位中断响应 BD _c_int00 ; 延迟分支到C程序默认入口地址c_int00是C程序的入口 STM #200,SP ; 将堆栈寄存器SP的值设为200 nmi: RETE ;中断屏蔽置为0,响应中断,不可屏蔽中断是,是中断屏蔽 取消后返回。 NOP NOP NOP sint17 .space 4*16 ; 保留中断向量的地址空间 sint18 .space 4*16 sint19 .space 4*16 sint20 .space 4*16 sint21 .space 4*16 sint22 .space 4*16 sint23 .space 4*16 sint24 .space 4*16 sint25 .space 4*16 sint26 .space 4*16 sint27 .space 4*16 sint28 .space 4*16 sint29 .space 4*16 sint30 .space 4*16 int0: ; 中断寄存器设置rete返回并允许中断外部中断产生时,直接返回。 RETE NOP NOP NOP int1: RETE NOP NOP NOP int2: b _int2c ;定时器产生中断时,返回到C程序中的timer函数。 NOP NOP tint: RETE NOP NOP NOP rint0: ;同步串口0(McBSP0)接受的中断,直接返回 RETE NOP NOP NOP xint0: ;同步串口0(McBSP0)发送的中断,直接返回 RETE NOP NOP NOP rint1: ; 同步串口1(McBSP1)接受的中断,直接返回 RETE NOP NOP NOP xint1: ;同步串口1(McBSP1)发送的中断,直接返回 RETE NOP NOP NOP int3: RETE NOP NOP NOP 实验截图 (六)A/D采样实验 一、 实验目的 1( 掌握利用TLV320AD50实现,/,转换的技术基本原理和常用 方法。 2( 学会DSP的多信道缓冲串口的应用方法。 3( 掌握并熟练使用DSP和AD50的接口及其操作。 4( 通过实验加深对DSP系统频谱混叠认识。 二、 实验设备 计算机,CCS 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(加载“exp06.out”示范程序,在“exp06.c”中“READAD50 ()”处,设置断点,运行程序,通过用下拉菜单中的View / Graph的“Time/Frequency”打开一个图形观察窗口,调节输 入信号的频率或幅值, 观察图形情况(幅值和频率),设置 该图形观察窗口的参数,观察起始地址为0x1000H,长度为256 的内存单元内的数据,该资料为输入信号经A/D转换之后的数 据,数据类型为16位整型,击“Animate”运行程序,在图形 观察窗口观察A/D转换后的采样波形。 在图形观察窗口观察A/D转换后的采样波形; 源程序查看 exp06.c #include "tms320uc5402.h" ;文件预处理 ioport unsigned port8008; ;全局变量定义与初始化 //ad7822的地址 unsigned int data_buff[256]; unsigned int j=0; 函数、子程序声明与定义 void sys_ini() //系统初始化子程序 { //全局禁止所有可屏蔽中断 asm(" ssbxINTM") ; //(DRAM映射到程序空间和数据空间)向量表映射到0x0080空间 PMST&=0x00FF ; //io空间7个等待周期,程序与数据空间0个等待周期 SWWSR=0x7000 ;//设置pll为div模式 CLKMD=0x0000 ;//等待设置完成 while(CLKMD==0x0001); { } //CLKOUT=(3+1)*CLKIN=40M,自动延时最长时间 CLKMD=0x37FA; //CLKOUT=(1+1)*CLKIN=20M,自动延时最长时间 //CLKMD=0x17FA; } void int1_ini() { IMR=0x0002; //使能外部中断1 IFR=0xFFFF; //清除所有中断标志位 asm(" rsbx INTM"); //全局使能可屏蔽中断 } 中断服务子程序声明与定义 interrupt void int1() //int1中断子程序 { data_buff[j]=port8008&0x00FF; //读取ad7822转换数据 j++; if(j==255) { j=0; } return; } 主程序 void main(void) { sys_ini(); int1_ini(); for(;;) { } } vector.asm .global _main,_int1 .sect ".vecs" ; 自定义向量表 reset: b_main ;复位中断时跳转到c程序主函数 (branch to C entry point延迟分支到c程序,默认入口地址 c_int00) nop nop nmi: rete ;NMI 非屏蔽外部中断输入引脚,不可屏蔽中断时,返回并允许产生该中断 nop nop nop ; 保留中断地址的空间 sin17: .space 4*16 sin18: .space 4*16 sin19: .space 4*16 sin20: .space 4*16 sin21: .space 4*16 sin22: .space 4*16 sin23: .space 4*16 sin24: .space 4*16 sin25: .space 4*16 sin26: .space 4*16 sin27: .space 4*16 sin28: .space 4*16 sin29: .space 4*16 sin30: .space 4*16 int0: rete nop nop nop int1: b _int1 ; 跳转int1中断子程序 nop nop int2: rete ;中断寄存器设置为rete返回,允许中断外部产生中断,并且直接返回 nop nop nop tint0: rete ;TIMER0 INTERRUPT nop nop nop brint0: rete ;BcBSP0 RECEIVE INTERRUPT nop nop nop bxint0: rete ;BcBSP0 TRANSMIT INTERRUPT nop nop nop dmac0: rete ;RESERVED OR DMA CHANNEL0 INTERRUPT nop nop nop tint1_dmac1: rete ;TIMER1 INTERRUPT OR DMA CHANNEL1 INTERRUPT nop nop nop int3: rete ;EXTERNAL INT3 nop nop nop hpint: rete ;HPI INTERRUPT nop nop nop brint1_dmac2: rete ;McBSP1 RECEIVE INTERRUPT OR DMA CHANNEL 2 INTERRUPT nop nop nop bxint1_dmac3: rete ;McBSP1 TRANSMIT INTERRUPT OR DMA CHANNEL 3 INTERRUPT nop nop nop dmac4: rete ;DMA CHANNEL 4 INTERRUPT nop nop nop dmac5: rete ;DMA CHANNEL 5 INTERRUPT nop nop nop .end 实验七:D/A转换实验 一、 实验目的 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输出 一个正弦波; ,.在程序中,改变相应资料来实现改变波形和周期; 得到的波形如下所示: 查看源程序 vector.asm ;----------------------------------------------------- .def Interrupt_Vectors ; .ref nNMI_SINT16 ; .ref SINT17 ; .ref SINT18 ; .ref SINT19 ; .ref SINT20 ; .ref SINT21 ; .ref SINT22 ; .ref SINT23 ; .ref SINT24 ; .ref SINT25 ; .ref SINT26 ; .ref SINT27 ; .ref SINT28 ; .ref SINT29 ; .ref SINT30 ; .ref _ExtInt0 ; .ref _ExtInt1 ; .ref _Tint0 ; .ref BRINT0_SINT4 ; .ref BXINT0_SINT5 ; .ref _Tint1 ; .ref _ExtInt3 ; .ref _mcbsp1_read ; .ref _mcbsp1_write ; .ref _ExtInt2 .ref _c_int00 ;***************************************************** STACK_LEN .set 100 STACK .usect "STK",STACK_LEN ;******************************************************* .sect ".vectors" .align 0x80 ; must be aligned on page boundary ;**************************************** ; the Interrutp table see spru13lg:P182 ;************************************** Interrupt_Vectors: nRS_SINTR: ;Reset Interrupt vector(vector_base + 0x00) stm #STACK+STACK_LEN,SP b _c_int00 nNMI_SINT16: ;Non-maskable Interrupt Vector (vector_base + 0x04) ;b nNMI_SINT16 rete nop nop ; nop ; SINT17: ;Software Interrupt 17 Vector (vector_base + 0x08) ;b SINT17 ; context switch rete nop nop ; nop ; SINT18: ;Software Interrupt 18 Vector (vector_base + 0x0C) ;b SINT18 rete nop nop ; nop ; SINT19: ;Software Interrupt 19 Vector (vector_base + 0x10) ;b SINT19 rete nop nop ; nop ; SINT20: ;Software Interrupt 20 Vector (vector_base + 0x14) ;b SINT20 rete nop nop ; nop ; SINT21: ;Software Interrupt 21 Vector (vector_base + 0x18) ;b SINT21 rete nop nop ; nop ; SINT22: ;Software Interrupt 22 Vector (vector_base + 0x1C) ;b SINT22 rete nop nop ; nop ; SINT23: ;Software Interrupt 23 Vector (vector_base + 0x20) ;b SINT23 rete nop nop ; nop ; SINT24: ;Software Interrupt 24 Vector (vector_base + 0x24) ;b SINT24 rete nop nop ; nop ; SINT25: ;Software Interrupt 25 Vector (vector_base + 0x28) ;b SINT25 rete nop nop ; nop ; SINT26: ;Software Interrupt 26 Vector (vector_base + 0x2C) ;b SINT26 rete nop nop ; nop ; SINT27: ;Software Interrupt 27 Vector (vector_base + 0x30) ;b SINT27 rete nop nop ; nop ; SINT28: ;Software Interrupt 28 Vector (vector_base + 0x34) ;b SINT28 rete nop nop ; nop ; SINT29: ;Software Interrupt 29 Vector (vector_base + 0x38) ;b SINT29 rete nop nop ; nop ; SINT30: ;Software Interrupt 30 Vector (vector_base + 0x3C) ;b SINT30 rete nop nop ; nop ; nINT0_SINT0: ;External Interrupt 0 Vector (vector_base + 0x40) ;b _ExtInt0 rete nop nop ; nop nINT1_SINT1: ;External Interrupt 1 Vector (vector_base + 0x44) ;b _ExtInt1 rete nop nop nop nINT2_SINT2: ;External Interrupt 2 Vector (vector_base + 0x48) ;b _ExtInt2 rete nop nop nop TINT0_SINT3: ;Timer Interrupt Vector (vector_base + 0x4C) ;b _Tint0 rete nop nop nop BRINT0_SINT4: ;McBSP #0 receive Interupt Vector(vector_base + 0x50) ;b BRINT0_SINT4 rete nop nop ; nop BXINT0_SINT5: ;McBSP #0 transmit Interupt Vector(vector_base + 0x54) ;b BXINT0_SINT5 rete nop nop ; nop DMAC0_SINT6: ;DMA channel 0 Interupt Vector (vector_base + 0x58) rete nop nop nop TINT1_DMAC1_SINT7: ;Timer1 or DMA channel 1 Interupt Vector(vector_base + 0x5C) ;b _Tint1 rete nop nop nop nINT3_SINT8: ;External Interupt 3 Vector (vector_base + 0x60) ;b _ExtInt3 rete nop nop nop HPINT_SINT9: ;HPI interrupt rete nop nop nop BRINT1_DMAC2_SINT10: ;McBSP #1 receive or DMA2 interrupt rete nop nop nop ;b _mcbsp1_read BXINT1_DMAC3_SINT11: ;McBSP #1 transmit or DMA3 interrupt rete nop nop nop ;b _mcbsp1_write DMAC4_SINT12: ;DMA channel 4 rete nop nop nop DMAC5_SINT13: rete nop nop nop RESERVED .space 8*16 .end 快速傅里叶变换(FFT)算法实验 一、实验目的 加深对DFT算法原理和基本性质的理解;熟悉FFT算法原理和FFT子程序的应用;学习用FFT对连续信号和时域信号进行谱分析,了解可能出现的分析误差及其原因,以便在实际中正确应用FFT。 二、实验设备 计算机,CCS3.1版软件,实验箱,DSP仿真器。 三、基本原理 1、离散傅里叶变换DFT的定义:将时域的采样变换成频域的周期性离散函数,频域的采样也可以变换成时域的周期性离散函数,将这样的变换称为离散傅里叶变换,简称DFT。 2、FFT是DFT的一种快速算法,将DFT的N2步运算减少为(N/2)log2N步,极大地提高了运算的速度。 3、旋转因子的变化规律。 4、蝶形运算规律。 5、基2FFT运算。 四、实验步骤 1(学习DFT的定义、性质和用DFT作谱分析的有关内容; 2(学习FFT算法原理与编程思想,并对照DIT-FFT运算流程图和程序框图,了解本实验提供的FFT子程序; 3(阅读本实验所提供的样例子程序; 4(运行CCS软件,对样例程序进行跟踪,分析结果;记录必要的参数。 五、实验结果 有限冲击响应滤波器(FIR)算法实验 一、实验目的 (1)掌握用窗函数法设计FIR数字滤波器的原理和方法; (2)熟悉线性相位FIR数字滤波器特性; (3)了解各种窗函数对滤波器特性的影响。 二、实验设备 计算机,DSP仿真器,CCS3.3版软件,实验箱。 三、实验原理 (1)有限冲击响应数字滤波器的基础理论; (2)模拟滤波器原理(巴特沃斯滤波器、切比雪夫滤波器、椭圆滤波器、贝塞尔滤波器); (3)数字滤波器系数的确定方法。 四、实验步骤 1( 复习如何设计FIR数字滤波;阅读本实验原理,掌握设计步骤; 2( 阅读本实验所提供的样例子程序; 3(运行CCS软件,对样例程序进行跟踪,分析结果; 五、实验结果 显示波形如下: 无限冲击响应滤波器(IIR)算法实验 一、实验目的 1( 熟悉设计IIR数字滤波器的原理与方法; 2( 掌握数字滤波器的计算机仿真方法; 3( 通过观察对实际信号的滤波作用,获得对数字滤波的感性认识。 二、实验设备 计算机,CCS 2.0 版软件,实验箱,DSP仿真器。 三、实验原理 1( 无限冲击响数字滤波器的基础理论; 2( 模拟滤波器原理(巴特沃斯滤波器、切比雪夫滤波器、贝塞尔滤波器); 3( 双线性变换的设计原理。 四、实验步骤 1( 复习有关巴特沃斯滤波器设计和用双线性变换法设计IIR数字滤波器的知识; 2( 阅读本实验所提供的样例子程序; 3( 运行CCS软件,对样例程序进行跟踪,分析结果; 五、实验结果 波形显示如下: 实验十一 高通滤波器 一、 实验目的 熟悉设计IIR数字滤波器的原理与方法;掌握数字滤波器的 计算机仿真方法;通过观察对实际信号的滤波作用,获得对数字 滤波的感性认识 二、 实验原理 1、 无限冲激响应数字滤波器的基础理论 2、 模拟滤波器原理 3、 双线性变换的设计原理 三、 实验步骤 4、 实验箱和54xCPU板拨码开关设置 5、 CPLD单元的SW2开关的2置ON,1置OFF;在A/D单元的JP3开关的3、6位置ON,其余置OFF 6、 用导线连接实验箱模拟信号源单元的信号源1孔和A/D单元的ADIN1孔;置拨码开关S23的第一位拨到OFF,用示波器分别观测模拟信号源单元的信号源1孔和信号源2孔输出的模拟信号 7、 启动S3.3,打开工程,加载Exp-IIR-AD.out,在flag=0处设置断点,单击Run运行程序 8、 用View/Graph/Time/Frequency打开一个图形观察窗口,设置该观察提醒窗口变量及参数 9、 单击Animate运行程序,或按F10运行,观察输入信号波形及FFT变换结果 10、 单击Halt暂停程序运行 11、 该IIR低通滤波器滤波性能参数: 采样频率为250KHz,通带内最大允许衰减3dB,阻带内最小 衰减大于30dB,过渡带宽度为50KHz,通带上限频率20KHz,阻 带下限截止频率70KHz;修改ExpIIR.c程序中nlpass和nlstop 参数可改变IIR低通滤波器的滤波性能 四、设计思路 已知FIR低通滤波器的程序,只需修改理想滤波器的冲击响应函数 h[t](代码中斜体加粗蓝色字体部分),即可变为高通滤波器。这是 一个高通滤波器,冲激响应是由一个全通冲激响应减去一个低通冲激 响应实现的。由波形可以看到,程序运行将输入的低频信号滤除,只 留下高频信号。 理想低通滤波器的冲击响应: h[t]=sin((t-(FLen-1)/2.0)*npass*pi)/(pi*(t-(FLen-1)/2.0)) 理想高通滤波器的冲击响应: h[t]=sin((t-Flen/2.0)*pi)/(pi*(t-Flen/2.0))-sin((t-Flen/2.0)*npass*pi)/(pi*(t-Flen/2.0)); if (t=Flen/2) h[t]=1-npass; 五、实验结果 实验总结 这门DSP硬件实验课是与数字信号处理课程密切相关的,这门课程展现了数字信号处理的应用价值与实践。首先这更考验我们的对硬件底层的操作以及我们对汇编语言和C语言的了解,也要求我们学习和掌握CCS软件的使用、DSP综合开发板的初步了解。前面几个实验是简要的介绍了这个实验的大致操作原理,与实验箱的设置,以及软件的使用和操作等等,让我们有个初步的了解。实验六是A/D采样实验,通过此次实验,对A/D转换技术的基本原理和常用发放有了基本的了解,也加深了对DSP系统频谱混叠认识。实验七是D/A转换实验,这个实验与A/D采样实验相差不大。 后面的几个实验是关于快速傅里叶变换,有限冲激响应算法,无限冲激响应算法的实验。在这几个实验之中,我们能看到波形的变化带来的直接的结果,十分清楚明了,更加懂得了dsp的应用价值。 数字信号处理的最主要应用领域是数字滤波。数字滤波器被认为是数字信号处理的另一个重要应用。数字滤波和模拟滤波相比有以下优点:可满足滤波器对幅值和相位特性的严格要求,精度高;没有电压、温度漂移等问题,基本不受环境影响,稳定性好;用DSP实现的滤波器具有高度的可靠性,灵活性好。由此可见这个实验对于工程实践的重要性,虽然实验要求看上去挺复杂,但当我们真正研究进去时发现只要通过改变一小行的c语言代码就可以了,通过不断地尝试最终达成了实验要求。 总而言之,这门实验课是我加深了对数字信号处理这门课的认识,初步了解了汇编语言的DSP综合开发版及CCS2的使用及操作,并学会了读懂机器汇编语言代码和有关的CPU及内存中的底层操作,从中领悟到要成为一名硬件工程师所需要的基本素养和能力。 DSP 硬件实验报告 学院:电子工程学院 班级: 姓名: 学号: 班内序号: 一 常用指令实验 一、实验目的 1. 熟悉 DSP 开发系统的连接 2. 了解 DSP 开发系统的组成,结构和应用系统构成 3. 熟悉常用 C54X 系列指令的用法 (程序寻址,寄存器, I/O口,定时器,中 断控制 ) 。 二、实验设备 计算机, CCS 2.0版软件, DSP 仿真器, EXPIII+试验箱。 三、实验步骤与内容 1、系统连接: 进行 DSP 实验之前,先必须连接好仿真器、实验箱及计算机,连接方法如下 所示: (1)、上电复位: 在硬件安装完成后,确认安装正确、各实验部件及电源连接正确后,接通仿 真器电源或启动计算机,此时,仿真盒上的“红色小灯”应点亮,否则 DSP 开发 系统与计算机连接有问题。 (2)、运行 CCS 程序: 先给实验箱上电,然后启动 CCS ,此时仿真器上的“绿色小灯”应点亮,并 且 CCS 正常启动,表明系统连接正常;否则仿真器的连接、 JTAG 接口或 CCS 相 关设置存在问题,掉电,检查仿真器的连接、 JTAG 接口连接,或检查 CCS 相关 设置是否正确。 2、实验操作: (1)、拨码开关设置 实验箱的拨码开关 SW2.4置 OFF (54x 的译码有效); 54x CPU板的跳线 J2的 1、 2短接(HPI 8位模式); SW1的 2、 6置 ON ,其余置 OFF (HPI 使能; DSP 工作微处理器方式; CPU_CS=0); SW2全部置 ON (FLASH 工作在数据空间, LED 灯 D5的工作状态处于灭状态); (2)、运行实验程序 启动 CCS 2.0,点击 Program... 并加载“ exp01.out ”;加 载完毕后,单击“ Run ”运行程序; (3)、观察实验现象 实验结果:可见 XF 灯以一定频率闪烁;单击“ Halt ”暂停程序运行,则 XF 灯停止闪烁,如再单击“ Run ”,则“ XF ”灯又开始闪烁; 四、流程图 五、实验代码 二、资料存储实验 一、实验目的: 1、掌握 TMS320C54的程序空间的分配, 2、掌握 TMS320C54的数据空间的分配, 3、操作其数据空间的指令 二、实验设备 计算机, CCS3.3, DSP 仿真器, EXPIII+试验箱 三、实验步骤与内容 1、实验使用资源介绍 本实验指导书是以 TMS32OVC5410为例, 介绍相关的内部和外部内存资源。 对于其它 类型的 CPU 请参考查阅相关的资料手册。下面给出 TMS32OVC5410的内存分配表: 对于存储空间而言,映像表相对固定。值得注意的是内部寄存器与存储空间的映像关 系。 因此在编程应用时这些特定的空间不能作其它用途。 对于程序存储空间而言, 其映像表 和 CPU 的工作模式有关。 当 MP/MC引脚为高电平时, CPU 工作在微处理器模式; 当 MP/MC引脚低电平时, CPU 工作在为计算机模式。具体的内存映像关系如上图所示。 2、实验操作 (1).拨码开关设置 实验箱的拨码开关 SW2.4置 OFF (54x 的译码有效) ; 54x CPU 板的跳线 J2的 1、 2短 接(HPI 8位模式) ; SW1的 2、 6置 ON ,其余置 OFF (HPI 使能; DSP 工作微处理器方式 CPU_CS=0) ; SW2全部置 ON (FLASH 工作在数据空间, LED 灯 D5的工作状态处于灭状 态) ; (2).运行实验程序 启动 CCS 2.0,点击 File 并加载“ exp02.out ” ;加载完毕后,单 击“ Run ”运行程序 , ; a) 在 CCS 的 Memory 窗口中查找 C5410各个区段的数据存储器地址, 在可以改变 的存储器内容的地方 , 选定地址随意改变其中内容并观察结果; b) 在 CCS 中装载实验示范程序,单步执行程序,程序中写入和读出的数据存储地 址的变化; c) 改变其它寻址方式,观察数据存储器地址与写入和读出数据的的变化 。 (3)实验现象 : 本实验程序将对 0x1000开始的 8个地址空间, 填写入 0xAAAA 的数值, 然后读出, 并存储到 0X1008开始的 8个地址空间 . 四、流程图 本实验说明 : 本实验程序将对 0x1000开始的 8个地址空间, 填写入 0xAAAA 的数后读并存储 到 0X1008开始的 8个地址空间。在 CCS 中可以观察 DATA 内存空间地址 0X1000~0X100F值的变化。 五、实验程序 三 I/O实验 一、实验目的 1. 了解 I/O口的拓展,掌握 I/O口的操作方法 2. 熟悉 PORTR,PORTW 指令的用途 3. 了解字量与模拟量的同异 二、实验设备 计算机, CCS3.3, DSP 仿真器, EXPIII+试验箱 三、实验步骤与内容 1、实验说明: 实验中采用简单的一一映像关系来对 I/O口进行验证, 目的是使实验者 能够对 I/O 有一目了然的认识。在本实验系统中,提供的 IO 空间分配如 下: CPU1: 0x0000 switch input (X) 8 0x0001 LED output(X) 8 CPU2: 0x0001 DAC 0x0004 Read_Key 0x0006 Write_Key 0x000F W rite_LCD 2、 实验过程 (1)拨码开关设置 1、实验箱的拨码开关 SW2.4置 OFF (54x 的译码有效); 54x CPU 板的 跳线 J2的 1、 2短接(HPI 8位模式); SW1的 2、 6置 ON ,其余置 OFF (HPI 使能; DSP 工作微处理器方式; CPU_CS=0); SW2全部置 ON (FLASH 工作在 数据空间, LED 灯 D5的工作状态处于灭状态); (2)实验执行程序 运行 CCS 程序,装载示范程序,调整 K0~K7的开关,观察 LP1~LP7 LED 亮灭的变化,以及输入和输出状态是否一致。 注意:电平转换接口主要考虑应用 3.3V 的中央处理器时, 系统的电平兼容 问题,用来保护 CPU 不受损坏。系统采用 74LVC245电平兼容转换器件。 (3)实验现象 调整 K0~K7的开关,观察 LP1~LP7 LED不同条件下灯的亮灭变化。 四、流程图 五、实验程序 四 定时器实验 一、 实验目的 熟悉 C54的定时器,掌握 C54定时器的控制方法,学会使用定时器中断方 式控制流程。 二、实验设备 计算机, CCS3.3, DSP 仿真器, EXPIII+试验箱 三、实验步骤及内容 1、实验说明 C54的定时器是一个 20位的减法计数器,可以被特定的状态位实现停 止、 重新启动、 重新设置或禁止, 可以使用该定时器产生周期性的 CPU 中断, 控制定时器中断频率的两个寄存器是定时周期寄存器 PRD 和定时减法寄存器 TDDR 。 在本系统中, 如果设置时钟频率为 20MHZ , 令 PRD=0x4e1f, 这样得到每 1/1000秒中断一次,通过累计 1000次,就能定时 1秒钟。 2、实验过程 (1)拨码开关设置 实验箱的拨码开关 SW2.4置 OFF (54x 的译码有效) ; 54x CPU板的跳 线 J2的 1、 2短接(HPI 8位模式); SW1的 2、 6置 ON ,其余置 OFF (HPI 使能; DSP 工作微处理器方式; CPU_CS=0); SW2全部置 ON (FLASH 工 作在数据空间, LED 灯 D5的工作状态处于灭状态); (2)实验程序运行 启动 CCS 2.0,并加载“ exp04.out ”,单击“ Run ”运行,可观察到 LED 灯(LP0~LP7)以一定的间隔时间不停摆动,单击“ Halt ”,暂停程序运行, LED 灯停止闪烁,单击“ Run ”,运行程序, LED 灯又开始闪烁。 (3)实验现象 LED 灯(LED1~LED8)以一定的间隔时间不停闪亮变化; 四、流程图 五、实验程序 11 12 六、实验总结: 13 中断, 指的是当某个事件发生时,暂停当前的操作,转向中断服务程序,执行完后再返 回继续原来的操作。这使得 DSP 能够处理多个任务。 DSP 有许多中断源,可以设置中断控 制寄存器来确定响应哪些中断而不理会哪些中断,本实验介绍最常用的定时器中断。 当有中断发生并且处于允许状态时, 程序指针跳转到中断向量表中对应的中断地址。 由 于中断服务程序一般较长, 通常中断向量表存放的是一个跳转指令, 指向实际的中断服务程 序。 使用向量一般用一条跳转指令转到相应中断服务子程序, 其余空位用 NOP 填充; *未使 用的向量直接用 RETE 返回,是为了防止意外进入未用中断。 使用定时器首先要对它初始化,基本步骤如下: 1.关掉中断 2.停止定时器运行。 3.设定时器的定时长度 4.允许定时器中断 5.运行定时器 6.打开中断 定时器是一个片内减计数器, 它可以被特定的状态位实现停止、 重启动、 重设置或禁止。 定时器在复位后就处于运行状态,用于周期地产生 CPU 中断或脉冲输出。定时器被预定标 计数器所触发,后者每个 CPU 时钟周期减 1,当计数器减至 0时,会产生一个定时器中断, 同时在下一周期计数器被定时周期值重新装载。 五、 INT2中断实验 一、实验目的 1. 掌握中断技术,学会外部中断的处理方法 2. 掌握中断对程序流程的控制,理解 DSP 对中断响应时序 二、实验设备 计算机, CCS3.3, DSP 仿真器, EXPIII+试验箱 三、实验步骤和内容 (1)拨码开关设置 1、实验箱的拨码开关 SW2.4置 OFF (54x 的译码有效) ; 54x CPU板的 跳线 J2的 1、 2短接 (HPI 8位模式) ; SW1的 2、 6置 ON , 其余置 OFF (HPI 使能; DSP 工作微处理器方式; CPU_CS=0); SW2全部置 ON (FLASH 工 作在数据空间, LED 灯 D5的工作状态处于灭状态); 2、 用导线连接 (2)实验程序运行 启动 CCS 2.0,并加载“ exp05.out ” , 单击“ Run ”运行。反复按开关 (3)实验现象 : 先按开关 四、流程图 14 五、实验程序 15 16 17 18 实验总结 外部中断:DSP 有 4个外部中断 INT0-INT3, 下降沿触发, 本次实验所用实验箱的频率 计使用的是 INT2。频率计的设计原理是:在设定时间下计外部中断 INT2的次数,除以定 时器的定时周期 (也就是乘以定时器中断的触发频率 ) ,就得到外部脉冲频率。 六 A/D转换实验 一、实验目的 1.掌握利用 TLV320AD50实现A /D转换的技术基本原理和常用方法。 2. 掌握并熟练使用 DSP 和 AD50的接口及其操作。 二、实验设备 计算机, CCS 2.0软件, DSP 仿真器,实验箱,示波器,连接导线。 三、实验步骤及内容 (1)拨码开关的设置 1、实验箱的拨码开关 SW2.4置 OFF (54x 的译码有效); 54x CPU 板的跳线 J2的 1、 2短接(HPI 8位模式); SW1的 2、 6置 ON ,其余置 OFF (HPI 使能; DSP 工作微处理器方式; CPU_CS=0); SW2全部置 ON (FLASH 工作在数据空间, LED 灯 D5的工作状态处于灭状态); 19 20 2、 SW2的 sw2=ON, sw1=OFF; 对应 5X 的 int1中断分配给 AD 中断使用; JP3的 3、 6位置 ON ,其余置 OFF ; S23全部置 OFF ;用连接线连接 加载“ exp06.out ”示范程序,在“ exp06.c ”中设置断点,运行程序,通 过用下拉菜单中的 View / Graph 的“ Time/Frequency”打开一个图形观察窗口, 调节输入信号的频率或幅值,观察图形情况(幅值和频率),设置该图形观察窗 口的参数,观察起始地址为 0x1000H ,长度为 256的内存单元内的数据,单击 “ Animate ”运行程序,在图形观察窗口观察 A/D转换后的采样波形。 (3)实验现象 在图形观察窗口观察 A/D转换后的采样波形: 存储器数据: 四、流程图 五、实验程序 七 D/A转换实验 一、实验目的: 1、熟悉 D/A转换的基本原理,掌握 AD7303的技术指标和常用方法 2、熟悉 DSP 的多通道缓冲串口配置为 SPI 的方法 3、掌握并熟练使用 DSP 的接口及其操作 二、实验设备 计算机, CCS3.3版软件, DSP 仿真器, EXPIII+试验箱,示波器 三、实验步骤及内容 (1)拨码开关设置 1、实验箱的拨码开关 SW2.4置 OFF (54x 的译码有效) ; 54xCPU 板的跳线 J2的 1、 2短接(HPI 8位模式) ; SW1的 2、 6置 ON ,其余置 OFF (HPI 使能; DSP 工作微处理器方式; CPU_CS=0) ; SW2全部置 ON (FLASH 工作在数据空 间, LED 灯 D5的工作状态处于灭状态) ; (2)实验运行程序 加载示范程序 “ exp07.out ” , 并通过 File/Data/Load装载波形数据 sin.dat 。 按 F5运行程序,用示波器检测 JAD4的 3脚 AD50_DAout输出一个正弦波;在程 序中,改变相应资料来实现改变波形和周期; (3)实验现象: 用示波器检测 D/A转换单元的 2号孔接口 得到的波形如下所示: 在示波器观察的模拟信号波形如下 : 实验一 快速傅里叶变换(FFT )算法实验 一、实验目的 加深对 DFT 算法原理和基本性质的理解; 熟悉 FFT 算法原理和 FFT 子程序 的应用;学习用 FFT 对连续信号和时域信号进行谱分析,了解可能出现的分析 误差及其原因,以便在实际中正确应用 FFT 。 二、实验设备 计算机, CCS3.1版软件,实验箱, DSP 仿真器。 三、实验原理 1、离散傅里叶变换 DFT :将时域周期性采样变换成频域周期性离散函数,频域 的采样也可以变换成时域的周期性离散函数,将这样的变换称为离散傅里叶变 换,简称 DFT 。 2、 FFT 是 DFT 的一种快速算法,将 DFT 的 N2步运算减少为(N/2) log2N 步, 极大地提高了运算的速度。 3、蝶形运算规律以及基 2FFT 运算。 四、流程图 五、实验步骤 1.学习 DFT 的定义、性质和用 DFT 作谱分析的有关内容; 2.学习 FFT 算法原理与编程思想,并对照 DIT-FFT 运算流程图和程序框图,了 解本实验提供的 FFT 子程序; 3.阅读本实验所提供的样例子程序; 4.运行 CCS 软件,对样例程序进行跟踪,分析结果;记录必要的参数。 六、实验结果 实验二 有限冲击响应滤波器(FIR )算法实验 一、实验目的 (1)掌握用窗函数法设计 FIR 数字滤波器的原理和方法; (2)熟悉线性相位 FIR 数字滤波器特性; (3)了解各种窗函数对滤波器特性的影响。 二、实验设备 计算机, DSP 仿真器, CCS3.3版软件,实验箱。 三、实验原理 (1)有限冲击响应数字滤波器的基础理论; (2)模拟滤波器原理(巴特沃斯滤波器、切比雪夫滤波器、椭圆滤波器、贝塞 尔滤波器) ; 四、实验步骤 1. 复习如何设计 FIR 数字滤波;阅读本实验原理,掌握设计步骤; 2. 阅读本实验所提供的样例子程序; 3. 运行 CCS 软件,对样例程序进行跟踪,分析结果; 五、实验流程图 六、实验结果 示波器要求 低频正弦波:幅值 3~4V,频率 <20khz(9khz>20khz(9khz> 高频正弦波:幅值 2.5~3V,频率 >70KHz(75KHz 左右) 混频输出 仿真结果 实验三 无限冲击响应滤波器(IIR )算法实验 一、实验目的 1. 熟悉设计 IIR 数字滤波器的原理与方法; 2. 掌握数字滤波器的计算机仿真方法; 3. 通过观察对实际信号的滤波作用,获得对数字滤波的感性认识。 二、实验设备 计算机, CCS 2.0 版软件,实验箱, DSP 仿真器。 三、实验原理 1. 无限冲击响数字滤波器的基础理论; 2. 数字滤波器原理(巴特沃斯滤波器、切比雪夫滤波器、贝塞尔滤波器) ; 3. 双线性变换的设计原理。 四、实验流程图 五、实验步骤 1. 复习有关巴特沃斯滤波器设计和用双线性变换法设计 IIR 数字滤波器的知识; 2. 阅读本实验所提供的样例子程序; 3. 运行 CCS 软件,对样例程序进行跟踪,分析结果; 六、实验结果 波形显示如下: 实验总结 这次的 DSP 硬件实验需要要求的基础知识挺多的,除了这学期学习的 DSP 基础知识 外还要懂得 C 语言和汇编,因此说最大的问题不是在对于 DSP 实验要求的理解,而是在对 于汇编那些代码的理解, 着实头疼。 不过幸好有前人的经验借鉴, 使得自己对于代码有了更 好的理解, 同时, 对于实验的精髓也有了更好的感悟。 这次实验对于自己原来在理论课上的 不足有了补充,更深刻地理解了 FFT 以及各种滤波器的特性。 此次实验我们一共分为两个模块实现, 第一模块, 对简单程序的认识, 这段 时期, 我们旨在熟练掌握一些关于基本指令操作, 根据操作步骤来完成实验, 其 中可以通过单步运行指令查看每个语句的作用,同时也加深了对这门语言的理 解。 第二模块, 我们主要是掌握对滤波器的认识, 并学会设计不同频带的不同种 类的滤波器。用 DSP 实现的滤波器具有高度的可靠性,灵活性好。我和搭档通 过不断地尝试最终达成了实验要求。 这次实验让我的 DSP 理论知识更加扎实,这对于我今后的学习起到了很大的 帮助,我也从中领悟到要成为一名硬件工程师所需要的基本素养和能力。范文二:北邮dsp硬件实验
范文三:北邮dsp硬件实验报告
范文四:北邮dsp硬件实验报告
范文五:北邮dsp硬件实验报告