北邮dsp硬件实验报告Word格式.docx

上传人:b****6 文档编号:20445267 上传时间:2023-01-23 格式:DOCX 页数:40 大小:1.20MB
下载 相关 举报
北邮dsp硬件实验报告Word格式.docx_第1页
第1页 / 共40页
北邮dsp硬件实验报告Word格式.docx_第2页
第2页 / 共40页
北邮dsp硬件实验报告Word格式.docx_第3页
第3页 / 共40页
北邮dsp硬件实验报告Word格式.docx_第4页
第4页 / 共40页
北邮dsp硬件实验报告Word格式.docx_第5页
第5页 / 共40页
点击查看更多>>
下载资源
资源描述

北邮dsp硬件实验报告Word格式.docx

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

北邮dsp硬件实验报告Word格式.docx

FileName:

exp01.asm

.mmregs

.global_main

_main:

stm#3000h,sp

ssbxxf

calldelay

rsbxxf

Calldelay

b_main

nop

nop

delay:

stm270fh,ar3

loop1:

stm0f9h,ar4

loop2:

banzloop2,*ar4-

banzloop1,*ar3-

ret

nop

.end

//定义存储器映像寄存器

//全局符号,可在外部定义

//设置堆栈指针寄存器的值为3000h

//sp:

堆栈指针寄存器

//置位状态寄存器xf=1,灯亮

//调用delay函数

//复位状态寄存器xf=0,灯灭

//无条件转移至_main,

//空指令

//设置辅助寄存器ar3值为9999

//设置辅助寄存器ar4值为249

//Loop:

对代码块开始重复汇编

//寄存器ar4值减一,当其值不为0时跳转到loop2

//寄存器ar3值减一,当其值不为0时跳转到loop1

//可选择延迟的返回

二、资料存储实验

一、实验目的:

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的译码有效);

54xCPU板的跳线J2的1、2短接(HPI8位模式);

SW1的2、6置ON,其余置OFF(HPI使能;

DSP工作微处理器方式CPU_CS=0);

SW2全部置ON(FLASH工作在数据空间,LED灯D5的工作状态处于灭状态);

(2).运行实验程序

启动CCS2.0,点击FileLoadProgram...并加载“exp02.out”;

加载完毕后,单击“Run”运行程序,;

a)在CCS的Memory窗口中查找C5410各个区段的数据存储器地址,在可以改变的存储器内容的地方,选定地址随意改变其中内容并观察结果;

b)在CCS中装载实验示范程序,单步执行程序,程序中写入和读出的数据存储地址的变化;

c)改变其它寻址方式,观察数据存储器地址与写入和读出数据的的变化。

(3)实验现象:

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

4、流程图

本实验说明:

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

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

五、实验程序

*FileName:

exp02.asm

getsomeknowledgeofthecmdfile

theprogramiscompiledatnoautoinitializationmode

.global_main

storedata

stm1000h,ar1

rpt#07h

st0aaaah,*ar1+

readdatathenre-store

stm7h,ar3

stm1000h,ar1

stm1008h,ar2

loop:

ld*ar1+,t

stt,*ar2+

banzloop,*ar3-

here:

bhere

//该程序在没有初始化的模式下编译

//定义存储器映像寄存器 

//执行主程序

//将外部内存地址1000h赋给辅助寄存器ar1

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

rpt:

循环执行下一条指令,计数为短立即数

//将数据AAAAH存放到以地址1000H~1007H的八个存储单元中.

且ar1值加1,st存储

//将立即数7赋给辅助寄存器ar3

//将地址1000h赋给辅助寄存器ar1

//将地址1008h赋给辅助寄存器ar2

Ld:

把操作数装入累加器,赋值

//将辅助寄存器ar1的值赋给t,ar1值加1

//将t的值赋给辅助寄存器ar2,ar2值加1

//寄存器ar3值减1,当其值不为0时跳转到loop

//无条件转移至here

三I/O实验

1.了解I/O口的拓展,掌握I/O口的操作方法

2.熟悉PORTR,PORTW指令的用途

3.了解字量与模拟量的同异

1、实验说明:

实验中采用简单的一一映像关系来对I/O口进行验证,目的是使实验者能够对I/O有一目了然的认识。

在本实验系统中,提供的IO空间分配如下:

CPU1:

0x0000switchinput(X)8

0x0001LEDoutput(X)8

CPU2:

0x0001DAC

0x0004Read_Key

0x0006Write_Key

0x000FWrite_LCD

2、实验过程

(1)拨码开关设置

1、实验箱的拨码开关SW2.4置OFF(54x的译码有效);

(2)实验执行程序

运行CCS程序,装载示范程序,调整K0~K7的开关,观察LP1~LP7LED亮灭的变化,以及输入和输出状态是否一致。

注意:

电平转换接口主要考虑应用3.3V的中央处理器时,系统的电平兼容问题,用来保护CPU不受损坏。

系统采用74LVC245电平兼容转换器件。

(3)实验现象

调整K0~K7的开关,观察LP1~LP7LED不同条件下灯的亮灭变化。

FileName:

exp03.asm

learnhowtooperatetheI/Oports

intheI/Ospace0x0000=>

8switches

0x0001=>

8LEDs

.text

stm3100h,sp

stm1000h,ar1

portr8000h,*ar1

nop

portw*ar1,8001h

b_main

.end

//输入端口赋给8个按键

//输入端口赋给8个指示灯

//定义映像寄存器

//声明全局符号,

//代码区

//设置堆栈指针寄存器的值为3100h

//设置辅助寄存器ar1值为1000h

//从8000h端口读入IO数据,将其传入ar1所指向的内存空间1000h

//空指令.起延时作用.

//将ar1所指向的内存空间的值赋给8001h端口,控制led灯

访问I/O空间需要使用特殊的指令:

portr和portw。

portr:

读按键;

portw:

写按键

空指令

空指令

无条件转移至_main,实现按键控制

四定时器实验

一、实验目的

熟悉C54的定时器,掌握C54定时器的控制方法,学会使用定时器中断方式控制流程。

计算机,CCS3.3,DSP仿真器,EXPIII+试验箱

3、实验步骤及内容

1、实验说明

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

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

2、实验过程

(1)拨码开关设置

(2)实验程序运行

启动CCS2.0,并加载“exp04.out”,单击“Run”运行,可观察到LED灯(LP0~LP7)以一定的间隔时间不停摆动,单击“Halt”,暂停程序运行,LED灯停止闪烁,单击“Run”,运行程序,LED灯又开始闪烁。

LED灯(LED1~LED8)以一定的间隔时间不停闪亮变化;

5、实验程序

源程序:

exp04.c

#include"

tms320uc5402.h"

ioportunsignedport8001;

unsignedintshow=0x00aa;

unsignedintnum=0x0000;

voidsys_ini()

{

asm("

ssbxINTM"

);

PMST&

=0x00FF;

SWWSR=0x7000;

CLKMD=0x17FA;

}

voidtimer0_ini()

TCR|=0x0010;

PRD=0x2710;

TCR|=0x000A;

IMR=0x0008;

IFR=0xFFFF;

rsbxINTM"

TCR&

=0xFFEF;

TCR|=0x0020;

}

interruptvoidtimer0()

{

if(num==200){

show=~show;

num=0;

else

num++;

return;

voidmain(void)

{

sys_ini();

timer0_ini();

for(;

port8001=show;

注释

//调用头文件

//I/O地址输出端口8001

//存储在地址10101010

//初始化数据

//系统初始化子程序

//置位INTM=1,禁止所有的可屏蔽中断

//(映射到程序空间和数据空间)向量表映射到0x0080空间--0000000011111111

//对应于io空间7个等待周期,程序与数据空间0个等待周期--0111000000000000

//CLKOUT=2*CLKIN=2*10M=20M,自动延时最长时间设置时钟--0001011111111010

//定时器0初始化子程序,产生5ms时钟

定时器产生中断的计算公式如下:

TINT的周期=1/tc×

TDDR+1×

PRD+1(其中tc为CLKOUT的周期)

//0000000000010000,TSS=1,停止定时器

//PRD=10000(十进制)

//TDDR=10(十进制)

所以定时器时钟T=1/(20M/10/10000)=5ms

//0000000000001000,HINT=0,中断屏蔽寄存,使能定时器中断

//HINT=1,中断标志寄存,清除所有中断标志

//复位INTM=0,全局使能可屏蔽中断

//--0000000011101111,TSS=0,定时器启动

//0000000000100000,TRB=1,定时器再装载

当TRB=1置位时,TIM用PRD中的值装载,PSC用TDDR中的值装载。

//定时器0中断子程序

//记200次定时器中断,时间=200*5ms=1s

//取反

//每200次,即1s取反一次,灯变化一次

//主程序

//调用初始化函数

//调用定时器初始化函数

//将输出端口8001赋给led灯显示变量

中断向量空间表:

vectors.asm

.global_c_int00,_timer0

.sect"

.vecs"

reset:

b_c_int00

nop

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:

int2:

tint:

b_timer

brint0:

bxint0:

brint1:

bxint1:

int3:

//引用函数c_int00,引用了c中的函数

//自定义一个已初始化段.vecs

//复位中断向量,跳转到主程序

//用nop填充表中其余空字

//B指令占两个字节,所以用两个nop

//非屏蔽外部中断的输入引脚

//允许响应中断,可屏蔽中断置为0,返回

//软件中断,内部中断,保留出中断向量的地址空间,将4*16的地址存储在sin17~sin30

NT0~INT2外部用户中断输入,具有优先权,能通过中断屏蔽寄存器和中断方式位屏蔽,能通过中断标志寄存器复位。

//此处int0中断响应为0,设置rete响应中断并返回。

//此处int1中断响应为0,设置rete响应中断并返回。

//此处int2中断响应为0,设置rete响应中断并返回。

//定时器产生的时钟中断,跳转到主程序c中定义的timer程序

//同步串口0(McBSP0)接受中断,直接返回

//同步串口0(McBSP0)发送中断,直接返回

//同步串口1(McBSP1)接受中断,直接返回

//同步串口1(McBSP1)发送中断,直接返回

//外部中断int3,允许中断并返回

六、实验总结:

中断,指的是当某个事件发生时,暂停当前的操作,转向中断服务程序,执行完后再返回继续原来的操作。

这使得DSP能够处理多个任务。

DSP有许多中断源,可以设置中断控制寄存器来确定响应哪些中断而不理会哪些中断,本实验介绍最常用的定时器中断。

当有中断发生并且处于允许状态时,程序指针跳转到中断向量表中对应的中断地址。

由于中断服务程序一般较长,通常中断向量表存放的是一个跳转指令,指向实际的中断服务程序。

使用向量一般用一条跳转指令转到相应中断服务子程序,其余空位用NOP填充;

*未使用的向量直接用RETE返回,是为了防止意外进入未用中断。

使用定时器首先要对它初始化,基本步骤如下:

1.关掉中断2.停止定时器运行。

3.设定时器的定时长度

4.允许定时器中断5.运行定时器6.打开中断

定时器是一个片内减计数器,它可以被特定的状态位实现停止、重启动、重设置或禁止。

定时器在复位后就处于运行状态,用于周期地产生CPU中断或脉冲输出。

定时器被预定标计数器所触发,后者每个CPU时钟周期减1,当计数器减至0时,会产生一个定时器中断,同时在下一周期计数器被定时周期值重新装载。

五、INT2中断实验

1.掌握中断技术,学会外部中断的处理方法

2.掌握中断对程序流程的控制,理解DSP对中断响应时序

三、实验步骤和内容

1、实验箱的拨码开关SW2.4置OFF(54x的译码有效);

2、用导线连接"

CPLD单元"

的2号孔"

单脉冲输出"

和"

电机控制单元"

2号孔"

INT2"

(2)实验程序运行

启动CCS2.0,并加载“exp05.out”,单击“Run”运行。

反复按开关"

,观察LED1~LED8灯亮灭变化;

单击Halt暂停程序运行反复按单脉冲单元的S5键,LED1-LED8灯亮灭不变化

(3)实验现象:

先按开关"

,发现LED灯1,3,5,7亮,再按一次,LED灯2,4,6,8亮。

initial.asm

.global_initial

.text

_initial:

LD#0,DP

STM#0,CLKMD

STM#0,CLKMD

TstStatu1:

LDMCLKMD,A

AND#01b,A

BCTstStatu1,ANEQ

STM#0xF7FF,CLKMD

STM0x3FA0,PMST

ssbx1,11

stm#00h,imr

stm#0ffffh,ifr

stm#04h,imr

rsbx1,11

//定义存储器映像寄存器

//定义全局变量

//已初始化可执行代码段

//系统初始化

//重置数据指针,为DP寄存器赋值0

DP是状态寄存器ST0的低9位,和7位(数据存储器地址)构成16位数据存储区地址

//设置时钟模式寄存器的值为0

可通过调整CLKMD寄存器改变CPU时钟。

STM累加器的低端存放到存储器映射寄存器

//LDM把存储器映射寄存器值装入到累加器

//和pollSTATUS(二进制)做与运算;

//BC为可选择延迟的条件转移;

//1111011111111111,设置时钟10MHz;

//PMST是处理器模式状态寄存器,指向中断

指针向量0011111110100000,MP/MC=0,可对片内ROM寻址;

//置位ST1.INTM=1,停止所有的中断

//将立即数置位0,存在中断屏蔽寄存器,此时HINT=0停止所有中断;

//将立即数全1存入中断标志寄存器,此时HINT=1中断开放,清除所有中断标志位;

//立即数0100,使能int2的外部中断

//复位ST1.INTM=0,允许所有中断

//ret可选择延迟的返回

外部中断程序:

int2.c

interruptvoidint2c();

externvoidinitial();

externvoidporta();

externvoidportb();

intflag=0,i=0;

main()

initial();

while

(1){;

}

interruptvoidint2c(){

i=i+1;

if(i==1)

if(flag==0)

{

flag=1;

porta();

i=0;

}

else

flag=0;

portb();

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

当前位置:首页 > 人文社科 > 文化宗教

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

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