北邮DSP数字信号处理 实验实验报告.docx
- 文档编号:25682179
- 上传时间:2023-06-11
- 格式:DOCX
- 页数:97
- 大小:332.96KB
北邮DSP数字信号处理 实验实验报告.docx
《北邮DSP数字信号处理 实验实验报告.docx》由会员分享,可在线阅读,更多相关《北邮DSP数字信号处理 实验实验报告.docx(97页珍藏版)》请在冰豆网上搜索。
北邮DSP数字信号处理实验实验报告
北京邮电大学电子工程学院电子实验中心
<数字信号处理实验>
实
验
报
告
班 级:
xxx
学 院:
xxx
实验室:
xxx
审阅教师:
姓名(班内序号):
xxx
学 号:
xxx
实验时间:
xxx
评定成绩:
一、常规实验
实验一常用指令实验
1.试验现象
可以观察到实验箱CPLD右上方的D3按一定频率闪烁。
2.程序代码
.mmregs
.global_main
_main:
stm#3000h,sp
ssbxxf;将XF置1,D3熄灭
calldelay;调用延时子程序,延时
rsbxxf;将XF置0,D3点亮
calldelay;调用延时子程序,
b_main;程序跳转到"_MAIN"
nop
nop
;延时子程序
delay:
stm270fh,ar3;将0x270f(9999)存入ar3
loop1:
stm0f9h,ar4;将0x0f9(249)存入ar4
loop2:
banzloop2,*ar4-;*ar4自减1,不为0时跳到loop2的位置
banzloop1,*ar3-;*ar3自减1,不为0时跳到loop1的位置
ret;可选择延迟的返回
nop
nop
.end
3.工作原理
主程序循环执行:
D3熄灭→延时→D3点亮→延时。
延时子程序有两个分频器级联组成,分频比为1:
(10000*250)=1:
2500000。
实验二数据储存实验
1.试验现象
本实验程序将对0x1000开始的8个地址空间,填写入0xAAAA的数值,然后读出,并存储到0X1008开始的8个地址空间。
2.程序代码
.mmregs
.global_main
_main:
;storedata
stm1000h,ar1;addressofinternalmemory将0x1000赋值给ar1
rpt#07h;将下一条语句循环执行8次
st0aaaah,*ar1+;将数据"0AAAAH"存放到以地址1000H~1007H的八个存储单元中.
;readdatathenre-store
stm7h,ar3;将0x7赋值给ar3
stm1000h,ar1;将0x1000赋值给ar1
stm1008h,ar2;将0x1008赋值给ar2
loop:
;循环的将1000H~1007H的八个单元中的数据COPY到1008H~100F的
;八个存储单元中.
ld*ar1+,t;将*ar1的值赋给t,并将ar1+1
stt,*ar2+;将t的值赋给*ar2,并将ar2+1
banzloop,*ar3-;将ar3-1,值非0时,跳转到loop位置
here:
;死循环.
bhere
.end
3.工作原理
程序首先用rpt语句循环,将数据"0AAAAH"存放到以地址1000H~1007H的八个存储单元中,再利用中间变量t,循环的将1000H~1007H的八个单元中的数据COPY到1008H~100FH的八个存储单元中。
下图为程序运行结果,1000H~100FH的16个存储单元全部为"0AAAAH"
实验三I/O实验
1.试验现象
调整数字输入单元的开关K1~K8可以控制LED1~LED8亮灭的变化。
2.程序代码
.mmregs
.global_main
.text
_main:
stm3100h,sp;将0x3100赋给sp
stm1000h,ar1;将0x1000赋给ar1
portr8000h,*ar1;读入I/O8000H数据(K1~K8),将其存储到数据空间的1000H
nop;NOP为空操作,起延时作用.
nop;NOP为空操作,起延时作用.
portw*ar1,8001h;将数据空间的1000H单元的数据,写出到I/O8001H(LED1~LED8)
nop;NOP为空操作,起延时作用.
nop;NOP为空操作,起延时作用.
b_main;程序跳转到"_MAIN"执行.
nop
nop
.end
3.工作原理
主程序循环执行:
读入I/O8000H数据存储到数据空间的1000H→读入1000H数据写出到I/O8001H。
实现通过开关K1~K8控制LED1~LED8的功能。
下图为两个不同的状态的截图,分别为全灭和全亮。
实验四定时器实验
1.试验现象
LED灯(LED1~LED8)以一定的间隔时间不停闪亮变化
2.程序代码
(1)exp04.c
/************************文件预处理***************************/
#include"tms320uc5402.h"
/*************************************************************/
/********************全局变量定义与初始化*********************/
ioportunsignedport8001;
unsignedintshow=0x00aa;//初始值为0x00aa(8个LED间隔点亮)
unsignedintnum=0x0000;
/*************************************************************/
/*******************函数、子程序声明与定义********************/
voidsys_ini()//系统初始化子程序
{
asm("ssbxINTM");//全局禁止所有可屏蔽中断
PMST&=0x00FF;//(DRAM映射到程序空间和数据空间)向量表映射到0x0080空间
SWWSR=0x7000;//io空间7个等待周期,程序与数据空间0个等待周期
CLKMD=0x17FA;//CLKOUT=2*CLKIN=2*10M=20M,自动延时最长时间
}
voidtimer0_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("rsbxINTM");//全局使能可屏蔽中断
TCR&=0xFFEF;//开始定时器0
TCR|=0x0020;//复位定时起0
}
/*************************************************************/
/*****************中断服务子程序声明与定义********************/
interruptvoidtimer0()//定时器0中断子程序
{
if(num==200)//记200次定时器中断,时间=200*5ms=1s
{
show=~show;//取反,亮的LED熄灭,灭的LED点亮,初始值为0x00aa(8个LED间隔点亮)
num=0;//计数清零
}
else
num++;//计数+1
return;
}
/*************************************************************/
/**************************主程序*****************************/
voidmain(void)
{
sys_ini();//系统初始化子程序
timer0_ini();//定时器0初始化子程序
for(;;)//死循环
{
port8001=show;//I/O0x8001端口(控制LED)的值赋为show
}
}
/***************************结束******************************/
(2)VECTORS.ASM
.global_c_int00,_timer0
.sect".vecs"
reset:
b_c_int00;RESETVECTORS;跳转到复位子程序
nop
nop
nmi:
rete;NMI
;所有的rete都表示返回并允许中断,此程序仅用到了reset和tint0
nop
nop
nop
;softwareinterrupts
sin17:
.space4*16
sin18:
.space4*16
sin19:
.space4*16
sin20:
.space4*16
sin21:
.space4*16
sin22:
.space4*16
sin23:
.space4*16
sin24:
.space4*16
sin25:
.space4*16
sin26:
.space4*16
sin27:
.space4*16
sin28:
.space4*16
sin29:
.space4*16
sin30:
.space4*16
int0:
rete;EXTERNALINT0
nop
nop
nop
int1:
rete;EXTERNALINT1
nop
nop
nop
int2:
rete;EXTERNALINT2
nop
nop
nop
tint0:
b_timer0;TIMER0INTERRUPT;跳转到定时器0中断子程序
nop
nop
brint0:
rete;BcBSP0RECEIVEINTERRUPT
nop
nop
nop
bxint0:
rete;BcBSP0TRANSMITINTERRUPT
nop
nop
nop
dmac0:
rete;RESERVEDORDMACHANNEL0INTERRUPT
nop
nop
nop
tint1_dmac1:
rete;TIMER1INTERRUPTORDMACHANNEL1INTERRUPT
nop
nop
nop
int3:
rete;EXTERNALINT3
nop
nop
nop
hpint:
rete;HPIINTERRUPT
nop
nop
nop
brint1_dmac2:
rete;McBSP1RECEIVEINTERRUPTORDMACHANNEL2INTERRUPT
nop
nop
nop
bxint1_dmac3:
rete;McBSP1TRANSMITINTERRUPTORDMACHANNEL3INTERRUPT
nop
nop
nop
dmac4:
rete;DMACHANNEL4INTERRUPT
nop
nop
nop
dmac5:
rete;DMACHANNEL5INTERRUPT
nop
nop
nop
;****************************结束*****************************
3.工作原理
主程序完成初始化后进入死循环,将I/O0x8001端口(控制LED)的值赋为show。
中断函数timer0完成对show取反。
下图为两个状态下I/O0x8001端口的值。
实验五INT2中断实验
1.试验现象
每次按开关"单脉冲输出",LED1~LED8灯亮灭变化一次。
2.程序代码
(1)int2.c
interruptvoidint2c();
externvoidinitial();
externvoidporta();
externvoidportb();
intflag=0,i=0;
main()
{
initial();//初始化
while
(1)//死循环
{
;//空语句
}
}
interruptvoidint2c()//中断子程序
{
i=i+1;//将i自加1
if(i==1)//当i=1时执行,相当于每次都执行
{
if(flag==0)//flag表示LED的状态,1和0为两个相反的状态
{
flag=1;//当flag=0时,就将其赋为1
porta();//调用porta()
i=0;
}
else
{
flag=0;//当flag=1时,就将其赋为0
portb();//调用portb()
i=0;
}
}
else
{
i=0;//每次都将i重新置为0
}
return;
}
(2)INITIAL.ASM
.mmregs
.global_initial
.text
_initial:
;初始化子程序
NOP
LD#0,DP;resetdatapointer;复位DP
STM#0,CLKMD;softwaresettingofDSPclock;CLKMD设为0
STM#0,CLKMD;(todividermodebeforesetting)
TstStatu1:
LDMCLKMD,A;将CLKMD赋给A
AND#01b,A;pollSTATUSbit;将A加1
BCTstStatu1,ANEQ;可选择延迟的条件转移,如果ANEQ条件成立,跳到TstStatu1位置
STM#0xF7FF,CLKMD;setC5402DSPclockto10MHz;将CLKMD设为0xF7FF(63487)
STM0x3FA0,PMST;vectorsat3F80h;将PMST设为0x3FA0(16288)
ssbx1,11;setst1.intm=1stopallinterrupt;将寄存器置位
stm#00h,imr;stopallinterrupt;将imr设为0
stm#0ffffh,ifr;clearallinterruptsign;将ifr设为0xffff(65535)
stm#04h,imr;allowint2interrupt;将imr设为4
rsbx1,11;allowallinterrupt;将寄存器复位
ret
.end
(3)port.asm
.mmregs
.global_porta
.global_portb
_porta:
stm304h,ar1;将0x304存入ar1
st5555h,*ar1;将0x5555存入*ar1
portw*ar1,8001h;将数据空间的304H单元的数据(0x5555),写出到I/O8001H(LED1~LED8)
ret;可选择延迟的返回
_portb:
stm304h,ar1;将0x304存入ar1
st0aaaah,*ar1;将0xaaaa存入*ar1
portw*ar1,8001h;将数据空间的304H单元的数据(0xaaaa),写出到I/O8001H(LED1~LED8)
ret;可选择延迟的返回
(4)VECTORS.ASM
.sect".vectors"
.ref_c_int00;Centrypoint
.ref_int2c
.align0x80;mustbealignedonpageboundary
RESET:
;resetvector;跳转到复位程序
BD_c_int00;branchtoCentrypoint
STM#200,SP;stacksizeof200
nmi:
RETE;enableinterruptsandreturnfromone
;所有的rete都表示返回并允许中断,此程序仅用到了reset和int2
NOP
NOP
NOP;NMI~
;softwareinterrupts
sint17.space4*16
sint18.space4*16
sint19.space4*16
sint20.space4*16
sint21.space4*16
sint22.space4*16
sint23.space4*16
sint24.space4*16
sint25.space4*16
sint26.space4*16
sint27.space4*16
sint28.space4*16
sint29.space4*16
sint30.space4*16
int0:
RETE
NOP
NOP
NOP
int1:
RETE
NOP
NOP
NOP
int2:
b_int2c;程序跳转的中断子程序
NOP
NOP
tint:
RETE
NOP
NOP
NOP
rint0:
RETE
NOP
NOP
NOP
xint0:
RETE
NOP
NOP
NOP
rint1:
RETE
NOP
NOP
NOP
xint1:
RETE
NOP
NOP
NOP
int3:
RETE
NOP
NOP
NOP
3.工作原理
主程序完成初始化后进入死循环。
中断函数int2c由开关"单脉冲输出"控制,每次运行时将I/O0x8001端口的值取反。
下图为两个状态下I/O0x8001端口的值。
实验六A/D转换实验
1.试验现象
用图形观察窗口观察采样的AD波形,截图如下
2.程序代码
(1)exp06.c
/************************文件预处理***************************/
#include"tms320uc5402.h"
/*************************************************************/
/********************全局变量定义与初始化*********************/
//ad7822的地址
ioportunsignedport8008;
unsignedintdata_buff[256];
unsignedintj=0;
/*************************************************************/
/*******************函数、子程序声明与定义********************/
voidsys_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;
}
voidint1_ini()//int1中断初始化子程序
{
IMR=0x0002;//使能外部中断1
IFR=0xFFFF;//清除所有中断标志位
asm("rsbxINTM");//全局使能可屏蔽中断
}
/*************************************************************/
/*****************中断服务子程序声明与定义********************/
interruptvoidint1()//int1中断子程序
{
data_buff[j]=port8008&0x00FF;//读取ad7822转换数据,写入data_buff数组
j++;
if(j==255)
{
j=0;
}
return;
}
/*************************************************************/
/**************************主程序*****************************/
voidmain(void)
{
sys_ini();//系统初始化子程序
int1_ini();//int1中断初始化子程序
for(;;)//死循环
{
}
}
/***************************结束******************************/
(2)VECTORS.ASM
.global_main,_int1
.sect".vecs"
reset:
b_main;RESETVECTORS
;跳转到main函数
nop
nop
nmi:
rete;NMI
;所有的rete都表示返回并允许中断,此程序仅用到了reset和int1
nop
nop
nop
;softwareinterrupts
sin17:
.space4*16
sin18:
.space4*16
sin19:
.space4*16
sin20:
.space4*16
sin21:
.space4*16
sin22:
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 北邮DSP数字信号处理 实验实验报告 北邮 DSP 数字信号 处理 实验 报告
![提示](https://static.bdocx.com/images/bang_tan.gif)