DSP硬件实验报告 北邮.docx

上传人:b****0 文档编号:8922433 上传时间:2023-05-16 格式:DOCX 页数:33 大小:221.74KB
下载 相关 举报
DSP硬件实验报告 北邮.docx_第1页
第1页 / 共33页
DSP硬件实验报告 北邮.docx_第2页
第2页 / 共33页
DSP硬件实验报告 北邮.docx_第3页
第3页 / 共33页
DSP硬件实验报告 北邮.docx_第4页
第4页 / 共33页
DSP硬件实验报告 北邮.docx_第5页
第5页 / 共33页
DSP硬件实验报告 北邮.docx_第6页
第6页 / 共33页
DSP硬件实验报告 北邮.docx_第7页
第7页 / 共33页
DSP硬件实验报告 北邮.docx_第8页
第8页 / 共33页
DSP硬件实验报告 北邮.docx_第9页
第9页 / 共33页
DSP硬件实验报告 北邮.docx_第10页
第10页 / 共33页
DSP硬件实验报告 北邮.docx_第11页
第11页 / 共33页
DSP硬件实验报告 北邮.docx_第12页
第12页 / 共33页
DSP硬件实验报告 北邮.docx_第13页
第13页 / 共33页
DSP硬件实验报告 北邮.docx_第14页
第14页 / 共33页
DSP硬件实验报告 北邮.docx_第15页
第15页 / 共33页
DSP硬件实验报告 北邮.docx_第16页
第16页 / 共33页
DSP硬件实验报告 北邮.docx_第17页
第17页 / 共33页
DSP硬件实验报告 北邮.docx_第18页
第18页 / 共33页
DSP硬件实验报告 北邮.docx_第19页
第19页 / 共33页
DSP硬件实验报告 北邮.docx_第20页
第20页 / 共33页
亲,该文档总共33页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

DSP硬件实验报告 北邮.docx

《DSP硬件实验报告 北邮.docx》由会员分享,可在线阅读,更多相关《DSP硬件实验报告 北邮.docx(33页珍藏版)》请在冰点文库上搜索。

DSP硬件实验报告 北邮.docx

DSP硬件实验报告北邮

北京邮电大学

DSP硬件实验报告

 

学院:

电子工程学院

专业:

姓名:

学号:

班级:

实验一常用指令实验

一、实验目的

熟悉DSP开发系统的连接

了解DSP开发系统的组成和结构和应用系统构成

熟悉常用C54X系列指令的用法(程序寻址,寄存器,I/O口,定时器,中断控制)。

二、实验步骤与内容

(一)简单指令程序运行实验

源程序:

;FileName:

exp01.asm

;theprogramiscompiledatnoautoinitializationmode--程序在非自动初始化模式下编译

.mmregs--(entermemory-mappedregistersintothesymboltable)--进入记忆映射注册进入符号表

.global_main--(identifyoneormoreglobal(external)symbols)--定义一个或多个全局变量

_main:

stm(累加器的低端存放到存储器映射寄存器中)#3000h,sp(堆栈指针寄存器);堆栈指针的首地址设为#3000h

ssbx(状态寄存器位置位)xf;状态寄存器位置位,灯亮

call(非条件调用,可选择延迟)delay(存储器延时);调用delay函数延时

rsbx(状态寄存器复位)xf;状态寄存器位复位,灯灭

calldelay;调用delay函数延时

b(累加器)_main;可选择延迟的无条件转移,循环执行

nop(无操作)

nop

;delay.5second

delay:

;延迟0.5秒

stm270fh,ar3(辅助寄存器3);把地址存放到存储器映射寄存器中

loop1:

stm0f9h,ar4(辅助寄存器4);把地址存放到存储器映射寄存器中

loop2:

banzloop2,*ar4-;AR4不为0时转移,指针地址减一

banzloop1,*ar3-;若不为0,ar3减1,共进行10000*250次跳转

ret(可选择延迟的返回pc=sp++);return,返回

nop

nop

;stm2cycles

;banzwhenTRUE4cycles

;FALSE2cycles

;0f9h=>249d

;270fh=>9999d

.end

实验现象

XF灯以一定频率闪烁;单击“Halt”暂停程序运行,则XF灯停止闪烁,如再单击“Run”,则“XF”灯又开始闪烁;

(二)资料存储实验

源程序:

*FileName:

exp02.asm

;getsomeknowledgeofthecmdfile

;theprogramiscompiledatnoautoinitializationmode

.mmregs

.global_main

_main:

;storedata

stm1000h,ar1;ar1映射到内存1000h位

;stm5000h,ar1;addressofexteriormemory

rpt(循环执行下一条指令,计数为短立即数)#07h;循环执行下一条指令8次

st(存储T寄存器的值)0aaaah,*ar1+;data存储寄存器的值

;readdatathenre-store

stm7h,ar3;设置ar3

;stm5000h,ar1;addressofexteriormemory

;stm5008h,ar2;addressofexteriormemory

stm1000h,ar1;设置ar1为1000h

stm1008h,ar2;设置ar2为1008h

loop:

ld*ar1+,t;把单数据存储操作数装入T寄存器中

stt,*ar2+;存储T寄存器的值

banzloop,*ar3-;循环7次

here:

bhere;可选择延迟的无条件转移,循环执行

.end

实验目的:

;本实验程序将对0x1000开始的8个地址空间,填写入0xAAAA的数值,然后读出,并存储到0X1008开始的8个地址空间。

在CCS中可以观察DATA内存空间地址0X1000~0X100F值的变化。

实验现象:

在CCS的“View”下拉菜单中的Memory窗口中查找C5410各个区段的数据存储器地址,在可以改变的存储器内容的地方,选定地址随意改变其中内容并观察结果;本实验要查看0x1000H~0x100FH单元的数值变化,输入地址0x1000H;查看0x1000H~0x100FH单元的初始值,单击“Run”运行程序,也可以“单步”运行程序;单击“Halt”暂停程序运行。

(三):

I/O实验

源程序:

;FileName:

exp03.asm

;learnhowtooperatetheI/Oports

;getsomeknowledgeoftherts.libfile

;intheI/Ospace0x0000=>8switches

;0x0001=>8LEDs

.mmregs

.global_main

.text

_main:

stm3100h,sp;堆栈指针的首地址设为#3100h

stm1000h,ar1;definetheaddress,定义ar1的地址

;definetheaddress

portr00h,*ar1;从端口00h读出开关状态,存入ar1中。

*ar1=port(00h)

nop

nop

portw*ar1,01h;将ar1的内容(开关状态)写入到led灯上(输入到01h),控制灯的亮灭

nop

nop

b_main;寻循环执行

nop

nop

.end

;实验现象

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

定时器实验

源程序

【初始化程序】

.mmregs

.global_initial

_initial:

stm300h,ar1;初始化300h数据地址,设置ar1的地址

st#00h,*ar1;辅助寄存器ar1指向#00h

stm302h,ar1;初始化302h数据地址,设置ar2的地址

st#00h,*ar1;辅助寄存器ar1指向#00h

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;将立即数寄存器(imr)置为0,停止所有中断

stm410h,tcr;停止计时器tcr:

发送控制寄存器

stm4e1fh,prd;将初始时间设为4e1fh

stm420h,tcr;开始计时器

stm08h,imr;允许计时器中断

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

ret

【端口程序】(定义管脚)

.mmregs

.global_porta

.global_portb

_porta:

stm304h,ar1;设置ar1地址

st5555h,*ar1;辅助寄存器ar1指向5555h

portw*ar1,01h;ar1的值做输出控制小灯亮灭

ret

_portb:

stm304h,ar1;设置ar1地址

st0aaaah,*ar1;辅助寄存器ar1指向0aaaah

portw*ar1,01h;ar1的值控制亮灭

ret

【向量程序】

.sect".vectors"

.ref_c_int00;C程序入口

.ref_timer;时间中断点

.align0x80;必须被连结到页边界

RESET:

;重设向量

BD_c_int00;到C入口点的分支

STM#200,SP;堆栈大小为200SP:

堆栈寄存器

nmi:

RETE;启动中断并从一个返回

NOP

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

NOP

NOP

NOP

int1:

RETE

NOP

NOP

NOP

int2:

RETE

NOP

NOP

NOP

tint:

b_timer;设置实用time中断

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

.end

实验现象

单击“Run”运行,可观察到LED灯(LP0—LP7)以一定的间隔时间不停摆动;单击“Halt”,暂停程序运行,LED灯停止闪烁;.单击“Halt”,暂停程序运行,LED灯停止闪烁。

(五):

INT2中断实验

源程序

【初始化程序】

.mmregs

.global_initial

.text

_initial:

stm300h,ar3;初始化数据300har3:

辅助寄存器

st#00h,*ar3;辅助寄存器ar3指向#00h

stm302h,ar4;初始化数据300har4:

辅助寄存器

st#00h,*ar4

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

stm00h,imr;将立即数置0,停止所有中断imr:

立即数寄存器

stm0ffffh,ifr;清除所有中断标志ifr:

中断标志寄存器

stm04h,imr;允许int2中断

rsbx1,11;允许所有中断

ret

.end

【端口程序】与【向量程序】参见实验四。

.实验现象

单击“Run”运行程序,反复拨动开关K0,观察LP1—LP7LED灯亮灭变化;单击“Halt”暂停程序运行,反复拨动开关K0,LP1—LP7LED灯亮灭不发生变化。

实验二:

A/D采样实验

实验目的

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

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

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

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

源程序:

【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:

NOP

LD#0,DP;重置数据存储器页指针

STM#0,CLKMD;对DSP时钟进行软件设置

STM#0,CLKMD;(在设置之前转到分线规模式)

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的寄存器地址

STM#0040h,McBSP2_SPSD;接收相位=1

;设置框架2长度为16bits

STMXCR1,McBSP2_SPSA;设置XCR1的寄存器地址

STM#0040h,McBSP2_SPSD;设置与接收(recv)相同

STMXCR2,McBSP2_SPSA;设置XCR2的寄存器地址

STM#0040h,McBSP2_SPSD;设置与接收(recv)相同

STMPCR,McBSP2_SPSA;设置PCR的寄存器地址

STM#000eh,McBSP2_SPSD;时钟和框架从外部产生(slave)

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

STM#0x0000,IMR;关闭外围中断

STM#0xFFFF,IFR;清除中断的标志

RET;返回主程序

NOP

NOP

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

IfRxRDY1:

NOP

STMSPCR1,McBSP2_SPSA;启动McBSP2Rx

LDMMcBSP2_SPSD,A

AND#0002h,A;隐藏已经接受到的bit(可以用来代替系列端口中断)

BCIfRxRDY1,AEQ;继续寄存(checking)

NOP

NOP

RET;返回

NOP

NOP

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

IfTxRDY1:

NOP

STMSPCR2,McBSP2_SPSA;启动McBSP2Tx

LDMMcBSP2_SPSD,A

AND#0002h,A;隐藏已经传输的bit

BCIfTxRDY1,AEQ;继续寄存

NOP

NOP

RET;返回

NOP

NOP

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

_OpenMcBSP:

rsbxxf;寄存器xf复位为0

callwait;非条件调用等待状态

NOP

STMSPCR1,McBSP2_SPSA;启动McBSP0RX以读入AD数据

LDMMcBSP2_SPSD,A

OR#0x0001,A

STLMA,McBSP2_SPSD;隐藏已经接受到的bit

STMSPCR2,McBSP2_SPSA;启动McBSP0TX以DTMF输出

LDMMcBSP2_SPSD,A

OR#0x0001,A

STLMA,McBSP2_SPSD;隐藏已经输出的bit

LD#0h,DP;装载数据页0

rpt#23;循环执行

NOP

ssbxxf;寄存器xf置位为1

NOP

NOP

CALLIfTxRDY1;非条件调用IfTxRDY1

STM#0x0001,McBSP2_DXR1;请求二级传送

NOP

CALLIfTxRDY1;非条件调用IfTxRDY1

STM#0100h,McBSP2_DXR1;将00h写入到寄存器1

CALLIfTxRDY1;非条件调用IfTxRDY1

STM#0000h,McBSP2_DXR1;

NOP

NOP

rpt#20h

nop

CALLIfTxRDY1;非条件调用IfTxRDY1

STM#0x0001,McBSP2_DXR1;请求二级传送

CALLIfTxRDY1;非条件调用IfTxRDY1

STM#0200h,McBSP2_DXR1;将00h写入到寄存器2

CALLIfTxRDY1

STM#0000h,McBSP2_DXR1

CALLIfTxRDY1

STM#0x0001,McBSP2_DXR1;请求二级传送

CALLIfTxRDY1

STM#0300h,McBSP2_DXR1;将00h写入到寄存器3

CALLIfTxRDY1

STM#0000h,McBSP2_DXR1

CALLIfTxRDY1

STM#0x0001,McBSP2_DXR1;请求二级传送

CALLIfTxRDY1

STM#0490h,McBSP2_DXR1;将00h写入到寄存器4

;通过内部DPLLbypassinternalDPLL

;并且选择抽样频率andselecttheSampleFrequency

CALLIfTxRDY1

STM#0000h,McBSP2_DXR1

RET

NOP

NOP

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

_CloseMcBSP:

STMSPCR1,McBSP2_SPSA;关闭McBSP0RX

LDMMcBSP2_SPSD,A

AND#0xFFFE,A

STLMA,McBSP2_SPSD

STMSPCR2,McBSP2_SPSA;关闭McBSP0TX

LDMMcBSP2_SPSD,A

AND#0xFFFE,A

STLMA,McBSP2_SPSD

RPT#5

RET

NOP

NOP

_READAD50:

stm0x00ff,ar3

stm0x1000,ar2

loopa:

CALLIfRxRDY1

ldmMcBSP2_DRR1,b

stlb,*ar2+

banzloopa,*ar3-

nop

nop

ret

nop

nop

_WRITEAD50:

stm0x037b,ar3

stm0x38a3,ar2

loopb:

CALLIfTxRDY1

ldu*ar2+,B

and#0fffeh,b;masktheLSB

stlmB,McBSP2_DXR1

banzloopb,*ar3-

nop

nop

ret

nop

nop

wait:

stm20h,ar3

loop1:

stm020h,ar4

loop2:

banzloop2,*ar4-

banzloop1,*ar3-

ret

nop

nop

nop

nop

.end

***********

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

当前位置:首页 > 职业教育 > 中职中专

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2