DSP硬件实验报告Word文档格式.docx

上传人:b****7 文档编号:22970454 上传时间:2023-02-06 格式:DOCX 页数:23 大小:23.27KB
下载 相关 举报
DSP硬件实验报告Word文档格式.docx_第1页
第1页 / 共23页
DSP硬件实验报告Word文档格式.docx_第2页
第2页 / 共23页
DSP硬件实验报告Word文档格式.docx_第3页
第3页 / 共23页
DSP硬件实验报告Word文档格式.docx_第4页
第4页 / 共23页
DSP硬件实验报告Word文档格式.docx_第5页
第5页 / 共23页
点击查看更多>>
下载资源
资源描述

DSP硬件实验报告Word文档格式.docx

《DSP硬件实验报告Word文档格式.docx》由会员分享,可在线阅读,更多相关《DSP硬件实验报告Word文档格式.docx(23页珍藏版)》请在冰豆网上搜索。

DSP硬件实验报告Word文档格式.docx

storedata;

存储数据

stm1000h,ar1;

将立即数1000h送入辅助寄存器ar1(内存地址)

rpt#07h;

循环执行下一条指令,8次

st0aaaah,*ar1+;

将立即数0xaaaah赋给辅助寄存器ar1的1000h地址内,

之后ar1的地址加1,8次;

ar1的地址变1008,内存0x1000--ox1007中的数据均为0xaaaah

readdatathenre-store;

读入数据重新存储

stm7h,ar3;

令辅助寄存器ar3的初值为07h

stm1000h,ar1;

重新将立即数1000h送入辅助寄存器ar1

stm1008h,ar2;

将立即数1008h送入辅助寄存器ar2

loop:

;

进入循环

ld*ar1+,t;

将辅助寄存器ar1的值0xaaaah存入T寄存器中,且ar1的地址加1

stt,*ar2+;

将T寄存器内容0xaaaah存入辅助寄存器ar2,并且ar2的地址加1

banzloop,*ar3-;

寄存器ar3的值不为0时,执行循环loop,ar3的地址值减1直至为0时退出循环

here:

bhere

.end;

结束(地址0x1000--0x100F,程序完成对16个内存单元赋值)

1.用“View”下拉菜单中的“Memory”查看内存单元;

2.输入要查看的内存单元地址,本实验要查看0x1000H~0x100FH单元的数值变化,输入地址0x1000H;

3.查看0x1000H~0x100FH单元的初始值,单击“Run”运行程序,也可以“单步”运行程序;

4.单击“Halt”暂停程序运行;

5.查看0x1000H~0x100FH单元内数值的变化;

6.关闭各窗口,本实验完毕。

实验三:

I/O实验

.text

stm3100h,sp

stm1000h,ar1;

指定地址

portr00h,*ar1;

读入开关状态,并存入辅助寄存器ar1中

portw*ar1,01h;

将辅助寄存器ar1的内容即开关的状态写入到LED灯上

b_main;

循环执行

.end

任意调整K0~K7开关,可以观察到对应LP0~LP7灯“亮”或“灭”;

单击“Halt”,暂停持续运行,开关将对灯失去控制。

关闭所有窗口,本实验完毕。

实验四:

定时器实验

定时器实验时要用到C54芯片的定时器控制寄存器,定时器时间常数寄存器,定时器中断响应,寄存器定义详见C54芯片资料。

C54的定时器是一个20位的减法计数器,可以被特定的状态位实现停止、重新启动、重设置或禁止,可以使用该定时器产生周期性的CPU中断,控制定时器中断频率的两个寄存器是定时周期寄存器PRD和定时减法寄存器TDDR

定时器实验通过LED(LP1~LP7)来显示。

在本系统中,时钟频率为20MHZ,令PRD=0x4e1f,这样得到每1/1000秒中断一次,通过累计1000次,就能定时1秒钟。

【初始化程序】

.mmregs

.global_initial

_initial:

stm300h,ar1;

初始化300h数据地址

st#00h,*ar1;

辅助寄存器ar1指向#00h

stm302h,ar1;

初始化302h数据地址

st#00h,*ar1

stm200h,ar1

st#5555h,*ar1

stm201h,ar1

st#0aaaah,*ar1

stm202h,ar1

st#400h,*ar1

ssbx1,11;

将ST1.INTM置为1,停止所有中断

stm0ffffh,ifr;

清除所有中断标识ifr:

中断标志寄存器

stm00h,imr;

将立即数寄存器置为0,停止所有中断

stm410h,tcr;

停止计时器tcr:

发送控制寄存器

stm4e1fh,prd;

将初始时间设为4e1fh

stm420h,tcr;

开始计时器

stm08h,imr;

允许计时器中断

rsbx1,11;

将ST1.INTM置为0,开始所有中断

 

【端口程序】

.global_porta

.global_portb

_porta:

stm304h,ar1

st5555h,*ar1;

辅助寄存器ar1指向5555h

portw*ar1,01h

_portb:

stm304h,ar1

st0aaaah,*ar1;

辅助寄存器ar1指向0aaaah

【向量程序】

.sect"

.vectors"

.ref_c_int00;

C程序入口

.ref_timer;

时间中断点

.align0x80;

必须被连结到页边界

RESET:

;

重设向量

BD_c_int00;

到C入口点的分支

STM#200,SP;

堆栈大小为200SP:

堆栈寄存器

nmi:

RETE;

启动中断并从一个返回

NOP

NOP

软件中断

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

int1:

NOP

int2:

tint:

b_timer

rint0:

xint0:

rint1:

xint1:

int3:

1.单击“Run”运行,可观察到LED灯(LP0~LP7)以一定的间隔时间不停摆动;

2.单击“Halt”,暂停程序运行,LED灯停止闪烁;

3.单击“Run”,运行程序,LED灯又开始闪烁;

4.关闭所有窗口,本实验完毕。

实验五:

INT2中断实验

本实验是进行C54芯片的INT2中断练习,C54芯片中断INT2是低电平单脉冲触发;

实验采用导线一端连接D_Exp—数字量输入扩展接口I0,经PX4的IN3,到PX5的OUT0电平转换,再与另一端连接INT2插孔;

拨动开关K0一次,就产生一个低电平单脉冲;

运行示范程序,观察LP1~LP7LED灯的输出变化;

可观察到每拨动开关K0一次LP1~LP7灯亮灭变化一次;

.global_initial

.text

stm300h,ar3;

初始化数据300har3:

辅助寄存器

st#00h,*ar3

stm302h,ar4;

初始化数据300har4:

st#00h,*ar4

将st1.intm置为1,停止所有中断

stm00h,imr;

停止所有中断imr:

立即数寄存器

清除所有中断标志ifr:

stm04h,imr;

允许int2中断

rsbx1,11;

允许所有中断

ret

【端口程序】跟【向量程序】与实验四的相同,在此不再重复。

1.单击“Run”运行程序,反复拨动开关K0,观察LP1~LP7LED灯亮灭变化;

2.单击“Halt”暂停程序运行,反复拨动开关K0,LP1~LP7LED灯亮灭不变化;

3.关闭所有窗口,本实验完毕。

实验六:

A/D采样实验

一、实验目的

1.掌握利用TLV320AD50实现A/D转换的技术基本原理和常用方法。

2.学会DSP的多信道缓冲串口的应用方法。

3.掌握并熟练使用DSP和AD50的接口及其操作。

4.通过实验加深对DSP系统频谱混叠认识。

二、实验设备

计算机,CCS2.0软件,DSP仿真器,实验箱,示波器,连接导线。

三、实验步骤和内容

1.实验连线

✧用短接块短接SS1的1,2脚,设置输出低频信号;

短接S2的Sin脚,设置输出正弦波信号,这时模拟信号产生单元SP1输出为低频正弦波。

✧JD跳线断开,设置语音处理单元输入信号为交流;

并用导线连接SP1脚和JAD3的1脚,将模拟低频正弦波信号接入语音处理单元。

✧用导线连接JAD1的INP和INPF,以及JAD2的INM和INMF,将语音处理单元输出的差动模拟信号接入AD50输入端。

2.运行CCS2.0软件,装入“exp06.pjt”工程文件,双击“exp06.pjt”及“Source”,打开各源程序;

并阅读程序,明确多通道串口和AD50初始化程序,DSP串口采样程序使用。

3.加载“exp06.out”示范程序,在“exp06.c”中“READAD50()”处,设置断点,运行程序,通过用下拉菜单中的View/Graph的“Time/Frequency”打开一个图形观察窗口;

调节输入信号的频率或幅值,观察图形情况(幅值和频率);

单击“Animate”运行程序,在图形观察窗口观察A/D转换后的采样波形;

调节输入信号的频率或幅值,做同样的采样实验,观察采样结果。

4.调节输入信号的频率或幅值,观察输入频率大于采样频率1/2时波形图形时,认识频谱混叠现象。

5.Halt”暂停程序运行,

6.“View”的下拉菜单中“Memory”打开内存资料观察窗口,设置该内存资料观察窗口的参数,运行“Animate”程序,通过内存观察窗口,观察数据存储器中的采样数值变化。

用“View”的下拉菜单中“Memory”打开内存资料观察窗口。

设置该内存资料观察窗口的参数,选择地址为0x1000H,资料格式C格式16进制数;

单击“Animate”运行程序,调整内存资料观察窗口,并在该窗口中观察资料变化,A/D转换后的资料存储在地址为0x1000~0x10FFH单元内,变化资料将变为红色;

单击“Halt”停止程序运行;

C程序:

externvoidInitC5402(void);

/*创建初始化C5402的函数,返回值为空*/

externvoidOpenMcBSP(void);

/*创建打开McBSP端口的函数,返回值为空;

*/

externvoidCloseMcBSP(void);

/*创建关闭McBSP端口函数*/

externvoidREADAD50(void);

/*创建从AD50的数据流中读取数据的函数;

AD50:

硬件端口*/

voidmain(void)/*主函数开始*/

{

InitC5402();

/*初始化C5402DSP*/

OpenMcBSP();

/*调用函数,打开McBSP端口*/

while

(1)

READAD50();

/*从AD50的数据流中读取数据,完成AD转换*/

}

}

汇编程序代码(含注释):

.global_InitC5402;

全局符号定义_InitC5402(初始化C5402)

.global_OpenMcBSP;

全局符号定义_OpenMcBSP(打开McBSP)

.global_CloseMcBSP;

全局符号定义_CLoseMcBSP(关闭McBSP)

.global_READAD50;

全局符号定义_READAD50(读取AD50数据流)

.global_WRITEAD50;

全局符号定义_WRITEAD50(向AD50写入数据流)

.includeMMRegs.h;

引入头文件MMRegs.h

_InitC5402:

NOPa

LD#0,DP;

重置数据存储器页指针

STM#0,CLKMD;

对DSP时钟进行软件设置

(在设置之前转到分线规模式)

STM#0x4007,CLKMD;

将C5402DSP时钟设置到40Hz

*******ConfigureC5402SystemRegisters;

(配置C5402系统寄存器)*******

STM#0x2000,SWWSR;

为IO空间设置两个等待周期

SWWSR:

外部总线S/W等待状态寄存器

为数据和监督空间设置0个等待周期

STM#0x0000,BSCR;

为堆栈转换寄存器设置等待状态

BSCR:

外部总线块转换控制寄存器

堆栈空间为64k,之间没有多余的循环

连续的监督/数据读取

STM#0x1800,ST0;

为状态寄存器0进行预设值

STM#0x2900,ST1;

为状态寄存器1进行预设值(note:

INTX=1)

STM#0x00A0,PMST;

PMST:

处理器方式状态寄存器

;

OVLY=1,向量指向0080h

*******SetupTimerControlRegisters;

(设置时钟控制寄存器)*******

STM#0x0010,TCR;

停止on–chip计时TCR定时器控制寄存器

计时器0用作主循环的计时器

*******InitializeMcBSP2Registers;

(初始化McBSP2(用来创建设备配置)寄存器)*******

STMSPCR1,McBSP2_SPSA;

设置SPCR1的寄存器地址

STM#0000h,McBSP2_SPSD;

McBSP2recv=left–justify

通过框架同步产生接受中断

STMSPCR2,McBSP2_SPSA;

设置SPCR2的寄存器地址

通过框架同步产生传输中断

STM#0000h,McBSP2_SPSD;

McBSP2Tx(异步传输)

在SW断点之后运行

STMRCR1,McBSP2_SPSA;

设置RCR1的寄存器地址

RCR1:

接收控制寄存器

STM#0040h,McBSP2_SPSD;

接收框架1长度=16bits

STMRCR2,McBSP2_SPSA;

设置RCR2的寄存器地址

接收相位=1

设置框架2长度为16bits

STMXCR1,McBSP2_SPSA;

设置XCR1的寄存器地址

设置与接收(recv)相同

STMXCR2,McBSP2_SPSA;

设置XCR2的寄存器地址

STMPCR,McBSP2_SPSA;

设置PCR的寄存器地址

STM#000eh,McBSP2_SPSD;

时钟和框架从外部产生(slave)

*******FinishDSPInitialization;

(结束DSP初始化)*******

STM#0x0000,IMR;

关闭外围中断

STM#0xFFFF,IFR;

清除中断的标志

RET;

返回主程序

*******WaitingforMcBSP0RXFinished;

(等待McBSP0异步接收结束)*******

IfRxRDY1:

启动McBSP2Rx

LDMMcBSP2_SPSD,A

AND#0002h,A;

隐藏已经接受到的bit(可以用来代替系列端口中断)

BCIfRxRDY1,AEQ;

继续寄存(checking)

返回

*******WaitingforMcBSP0TXFinished;

(等待McBSP0异步传输结束)*******

IfTxRDY1:

STMSPCR2,McBSP2_SPSA;

启动McBSP2Tx

隐藏已经传输的bit

BCIfTxRDY1,AEQ;

继续寄存

******************************************

_OpenMcBSP:

rsbxxf;

寄存器xf复位为0

callwait;

非条件调用等待状态

启动McBSP0RX以读入AD数据

LDMMcBSP2_SPSD,A

OR#0x0001,A

STLMA,McBSP2_SPSD;

隐藏已经接受到的bit

启动McBSP0TX以DTMF输出

OR#0x0001,A

隐藏已经输出的bit

LD#0h,DP;

装载数据页0

rpt#23;

ssbxxf;

寄存器xf置位为1

CALLIfTxRDY1;

非条件调用IfTxRDY1

STM#0x0001,McBSP2_DXR1;

请求二级传送

非条件调用IfTxRDY1

STM#0100h,McBSP2_DXR1;

将00h写入到寄存器1

CALLIfTxRDY1;

非条件调用IfTxRDY1

STM#0000h,McBSP2_DXR1;

rpt#20h

STM#0200h,McBSP2_DXR1;

将00h写入到寄存器2

CALLIfTxRDY1

STM#0000h,McBSP2_DXR1

CALLIfTxRDY1

CALLIfTxRDY1

STM#0300h,McBSP2_DXR1;

将00h写入到寄存器3

STM#0000h,McBSP2_DXR1

STM#0490h,McBSP2_DXR1;

将00h写入到寄存器4

;

通过内部DPLLbypassinternalDPLL

并且选择抽样频率andselecttheSampleFrequency

RET

*********************

_CloseMcBSP:

关闭McBSP0RX

AND#0xFFFE,A

STLMA,McBSP2_SPSD

关闭McBSP0TX

RPT#5

_READAD50:

stm0x00ff,ar3

stm0x1000,ar2

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 初中教育 > 语文

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1