dsp实验报告Word文档格式.docx
《dsp实验报告Word文档格式.docx》由会员分享,可在线阅读,更多相关《dsp实验报告Word文档格式.docx(23页珍藏版)》请在冰豆网上搜索。
![dsp实验报告Word文档格式.docx](https://file1.bdocx.com/fileroot1/2022-11/25/861c1372-24d9-4c94-a628-c4cabf4f6ec1/861c1372-24d9-4c94-a628-c4cabf4f6ec11.gif)
sine.c),选择
→Save
4.创建其他源程序(如.cmd)可重复上述步骤。
(二)
创建工程文件
打开
CCS,点击
Project-->
New,创建一个新工程,其中工程名及路径可任意指定。
在
Project
中填入工程名,Location
中输入工程路径,点击完成。
点击
add
files
to
project,添加工程所需文件。
在弹出的对话框中的下拉菜单中分别选择.c点击打开,添加源程序
sine.c
5.
同样的方法可以添加文件
sine.cmd、rts.lib
到工程中
(三)
工程编译与调试
1.
→Build
all,对工程进行编译,如正确则生成
out
若是修改程序,可
以使用
命令,进行编译连接,它只对修改部分做编译连接工作。
可节省编译与连接的时间。
编译通过,生成.out
文件。
2.
→load
program,在弹出的对话框中载入debug文件夹下的.out
可执行文件。
3.
debug
→Go
Main
回到
C
程序的入口
4.使用
F5
快捷键,运行程序,在Stdout
观察窗中查看程序运行结果,并记录。
五、实验结果
图1相关源程序
图2
HelloWorld主程序与输出
图3幅值可变正弦波界面
六、心得体会:
要认真听老师讲课,这样才会做实验,如果不认真听课,做实验的时候就做不好。
要注意培养动手能力。
如果程序有错误,在调试的时候要有耐心。
实验二数字I/O实验
一.实验目的
1.熟悉CCS的开发环境;
2.掌握DSP扩展数字I/O口的方法;
3.了解SEED-DEC6713的硬件系统交通灯实现程序;
二.实验准备
(一)DSP系统中数字I/O的实现:
DSP系统中一般只有少量的数字I/O资源,而一些控制中经常需要大量的数字量的输入与输出。
因而,在外部扩展I/O资源是非常有必要的。
在扩展I/O资源时一般占用DSP的I/O空间。
其实现方法一般有两种:
其一为采用锁存器像74LS273、74lS373之类的集成电路;
另一种是采用CPLD在其内部做锁存逻辑,我们采用的是后者。
SEED-DEC6713模板提供标准化的存储器扩展总线,以方便用户扩展其专用的电
路。
SEED-DEC6713的存储器扩展总线,包含4个存储空间
,每个存储空间
有20-位地址线、32-位数据线。
SEED-DEC6713的这4个存储空间
被映射到’C6713的
和
空间中,具体的映射关系如下表所示:
扩展总线
SBEN
EMIF
EA[21:
19]
字节地址†
xxxB
0xA0000000~0xA03FFFFF
1
100B
0xB0200000~0xB027FFFF
x
101B
0xB0280000~0xB02FFFFF
110B
0xB0300000~0xB037FFFF
111B
0xB0380000~0xB03FFFFF
†
、
空间被配置为32-位存储器时的逻辑地址
实验箱I/O板映射到SEED-DEC6713模板的EDSP_CE3空间,接口方式为16-位。
所以将DSPC6713EMIFCE3#空间配置为16-位异步接口模式,地址映射关系如下:
实验箱I/O板对应的起始地址为:
0xB01C0000(字地址);
SEED-DEC6713控制MBOARD上CPLD板的偏移地址为:
0xB01C000A;
向此地址写1,使能控制功能。
TRAFFICLED的偏移地址为:
0x00000002;
即TRAFFICLED的地址为:
0xB01C0002;
(二)SEED-DTK6713系统中数字IO所占的资源如下:
1.交通灯控制口地址为:
0x6000000(I/O空间);
其说明如下:
D11
D10
D09
D08
D07
D06
D05
D04
D03
D02
D01
D00
SR
SY
SG
WR
EG
EY
WY
ER
WG
NR
NY
NG
WG:
方向西的绿灯控制位;
WY:
方向西的黄灯控制位;
WR:
方向西的红灯控制位;
SG:
方向南的绿灯控制位;
SY:
方向南的黄灯控制位;
SR:
方向南的红灯控制位;
EG:
方向东的绿灯控制位;
EY:
方向东的黄灯控制位;
ER:
方向东的红灯控制位;
NG:
方向北的绿灯控制位;
NY:
方向北的黄灯控制位;
NR:
方向北的红灯控制位;
当以上各位置“1”时,点亮各控制位所代表的交通灯状态的LED灯。
2.LED控制口地址为:
0xB01C0004(IO空间):
D7
D6
D5
D4
D3
D2
D1
D0
OUT7
OUT6
OUT5
OUT4
OUT3
OUT2
OUT1
OUT0
向控制位OUT[7:
0]写入“1”时,点亮相应位置的LED灯。
注:
8个LED灯是位于SEED-CPLD板上的,其控制线是通过DTK_IO单元模块转接的,然后经SEED-CPLD单元模块驱动后再点亮LED灯的。
三.实验程序功能与结构说明
1.在数字IO调试程序中,主要包含以下文件:
1)IO.c:
这是实验的主程序,包含了系统初始化,并完成控制交通灯按照所选择的不同模式输出显示,以及LED灯按照可输入的8位二进制数显示结果。
2)DEC6713.C:
对SEED-DEC6713各项资源操作的函数集,主要包含系统初始化函数,对CPLD的各个控制函数。
3)DEC6713_DTK.c:
主要包含对IO口操作的各函数。
4)Vec.asm:
包含定时器中断的中断向量表
5)SEED_DEC6713.cmd:
声明了系统的存储器配置与程序各段的连接关系。
6)DEC6713.gel:
系统初始化程序
四.实验步骤
本次实验程序的文件夹为光盘下03.Examplesofprogram\04.SEED_DTK-EPD实验程序目录下的3.3.1IO的文件夹拷贝到C:
\CCSstudio_V2.2。
1.将DSP仿真器与计算机连接好;
2.将DSP仿真器的JTAG插头与SEED-DEC6713单元的J2相连接;
3.启动计算机,当计算机启动后,打开SEED-DTK6713的电源。
观察SEED-DTK-IO单元的+5V,+3.3V,+15V,-15V的电源指示灯以及SEED_DEC6713的电源指示灯D1、
D3是否均亮;
若有不亮的,请断开电源,检查电源。
4.打开CCS,进入CCS的操作环境
5.装入IO.pjt工程文件,添加DEC6713.gel文件开始进行调试
6.打开IO.c文件,到第29行,修改TestCommand的宏定义。
TestCommand是交通灯操作控制选项。
可以为1、2、3、4、5这5个数。
1为自动运行(南北通行一段时间后,自动变为东西通行,依次循环);
2为夜间模式(各方向都为黄灯);
3为交通灯东西通;
4为交通灯南北通;
5为禁行(各方向都为红灯)。
在编写程序的过程中要用到函数voidDEC6713_DTK_rset(Int16regnum,Uint16regval),此函数在DEC6713_DTK.c中有定义,主要功能是对不同的IO地址写入相应的数值,从而达到控制交通灯和LED灯亮或灭的目的,第一个参数为地址偏移量,第二个参数为控制字。
另外IO.c文件中给出了函数voiddelay(intperiod),通过调用此函数可以延迟一定的时间。
7.装载程序IO.out
8.运行,观察。
在程序运行过程中,可直接在WatchWindow里修改TestCommand的值,即将每一种运行方式所对应宏定义的值直接赋值给TestCommand,即可改变运行方式。
例如在程序运行过程中,若想将运行方式改为夜间模式,就请将TestCommand赋值为2(0小AA16)。
如下图所示:
9.重新到第6)步开始尝试其他情况或者退出实验。
五.实验结果与反思
当输入不同的数字,对应的运行状态与相应的灯状态一致。
实验已经给出了主干程序,根据流程图,补充类似的状态下不同灯对应的IO接口,应该提前准备,理解程序,同时注意与老师和同学的交流,发现自己的不足。
实验三定时器实验
1.了解TMS320VC6713的定时器。
2.熟悉定时器各寄存器的配置。
3.掌握TMS320VC6713的中断结构和对中断的处理流程。
4.学会C语言中断程序设计,以及运用中断程序控制程序流程。
二.实验要求
1.DSP的初始设置;
DSP中断向量表的建立;
定时中断的编写;
2.熟悉中断的结构及用中断程序控制程序流程,掌握定时器的应用。
三.实验背景知识:
(一)通用TIMER简介
TMS320C6713片内集成了2个32BIT的通用TIMER,TIMER的原理框见理论知识的介绍和相应教材的内容。
这些时钟有两种信号模式,可以用内部或外部时钟源做为时钟计数。
这些时钟有两个PIN脚:
输入和输出PIN脚,可以用做时钟输入和时钟输出;
也可以用做GPIO。
在SEED-DEC6713中,2个TIMER配置为:
lTIMER0配置为外部扩展空间或内部使用;
lTIMER1配置为外部扩展空间或内部使用;
本实验采用的定时器是TIMER1。
(二)CMD文件简介
cmd文件用于DSP代码的定位。
由3部分组成:
1)输入/输出定义:
.obj文件:
链接器要链接的目标文件。
.lib文件:
链接器要链接的库文件。
.map文件:
链接器生成的交叉索引文件。
.out文件:
链接器生成的可执行代码;
链接器选项。
2)MEMORY命令:
描述系统实际的硬件资源。
3)SECTIONS命令:
描述"
段"
如何定位。
(三)vecs.asm文件简介
vecs.asm是DSP的中断向量表文件。
中断服务程序的地址(中断向量)要装载到存储器的合适区域。
一般中断向量表文件是采用汇编语言编写;
在文件中一般汇编指令.sect来生成一个表。
这个表包含中断向量的地址和跳转指令。
因为中断读物的标志符在汇编语言模块外部使用,所以标志符用.ref或.global。
(四)GEL文件简介
GEL文件的功能同cmd文件的功能基本相同,用于初始化DSP。
但它的功能
比cmd文件的功能有所增强,GEL在CCS下有一个菜单,可以根据DSP的对象不同,设置不同的初始化程序。
以下面的例子介绍一下GEL文件的构成。
例:
#defineDEC6713_CTL0x90080000#defineDEC6713_INT0x90080001#defineDEC6713_STA0x90080002
StartUp();
开始函数
{
//定义DEC6713_CTL寄存器//定义DEC6713_INT寄存器//定义DEC6713_STA寄存器
GEL_MapReset();
;
存储空间复位
GEL_MapAdd(0x0000,0,0x7fff,1,1);
定义程序空间0000-7fff可读写
GEL_MapAdd(0x8000,0,0x7000,1,1);
定义程序空间8000-f000可读写
GEL_MapAdd(0x0000,1,0x1000,1,1);
定义数据空间0000-f000可读写
GEL_MapAdd(0xffff,2,1,1,1);
定义i/o空间0xffff可读写
GEL_MapOn();
存储空间打开
GEL_MemoryFill(0xffff,2,1,0x40);
在i/o空间添入数值40h
}
四.实验程序功能与结构说明
1.在Timer实验调试程序中,主要包含以下文件:
1)DEC6713_Timer.c:
这是实验的主程序,包含了系统初始化,定时器中断初始化,定时器中断程序等。
2)DEC6713.c:
3)vecs.asm:
包含定时器中断的中断向量表。
4)seed_dec6713.cmd:
5)dec6713.gel:
2.程序流程图
定时器中断程序流程图:
cnt=cnt+1
cnt>
TIMER_CNT
YES
关闭定时器1
打印“Done…”
NO
打印“Count:
”
主程序流程图
CSL初始化
系统时钟设置
定时器中断初始化
定时器各寄存器配置
使能定时器中断
使能定时器1
Cnt<
=TIMER_CN
等待进入中断退出
程序的主要功能:
利用定时器定时触发中断,中断程序完成输出“COUT:
n”的功能,完成一定的中断次数后,退出程序。
五.实验步骤
将光盘下03.Examplesofprogram\04.SEED_DTK-EPD实验程序目录下的3.2.5Timer的文件夹拷贝到C:
4.打开CCS,进入CCS的操作环境。
5.装入Timer.pjt工程文件,添加DEC6713.gel文件,编辑程序源代码,编译、连接生成
out文件。
在做这次实验之前,要事先复习一下有关课堂上所讲的定时器的知识,以便能顺利的编写该次实验程序。
本次实验中要求在main()函数中编写中断程序,main()函数在Timer.c文件中,前面已经给出了主程序和中断函数的流程图。
本次实验中使用中断INT14,在vect.asm中已经设置好,不需要自己设置。
程序中有些变量已经定义,可以直接使用这些定义好的变量,或者自己定义其他名称的变量。
本次实验程序的编写主要是完成一些函数的调用,所调用的函数大部分是CSL函数,CSL(片级支持库)提供了一系列应用程序接口,用于配置和控制DSP片上外设。
本次实验中主要用到了中断(IRQ)和定时器TIMER)两个模块的CSL函数。
这些函数在csl_timer.h和csl_irq.h中有声明,对于csl函数,主要知道它的功能和使用方法就可以,不用知道其函数内部的具体实现过程。
下面是本次实验中要用到的csl函数,关于更多的函数介绍请查阅ccs的帮助文件。
模块
函数名称、功能及示例
参数意义
TIMER_HandleTIMER_open(int
devNum,Unit32flags)
打开一个定时器设备
devNum为设备号,本次实验中为
例
子
:
TIMER_Handle
TIMER_DEV1
temp_handle;
flags为打开标志,本次实验中为
TIMER
temp_handle=
TIMER_OPEN_RESET
TIMER_open(TIMER_DEV1,
函数
TIME_OPEN_REST)
Uint32
TIMER_getEventId(TIMER_Handle
hTimer)
hTimer为定时器句柄
为定时器设备指定IRQ事件标志ID
例子:
TimerEventId=
TIMER_getEventId(hTimer);
Void
TIMER_configArgs(TIMER_Handle
ctl为控制寄存器值,设置定时器的工作模
hTimer,Uint32ctl,Uint32prd,
式,本次实验中已经给出了定义好的寄存
Uint32cnt)
器值TimerControl直接使用即可,查看其
设置定时器(工作模式,计数周期等)
定义可以知道设置的工作模式,对于寄存
例子:
TIMER_configArgs(LTimer,
器中每个控制位的含义可以查看帮助文
0x000002c0,
0x00010000,
档,路径为:
help->
user
0x00000000)
manuals->
Hardware
Documentation->
spru190->
Timers
prd为周期寄存器值,设置寄存器的计数
周期
cnt为计数寄存器,设置当前的计数值
TIMER_start(hTimer)
启动定时器
TIMER_start(temp_htimer)
TIMER_pause(TIMER_Handle
暂停定时器
TIMER_pause(temp_htimer)
TIMER_close(hTimer)
关闭一个已打开的定时器设备
TIMER_close(temp_htimer)
VoidIRQ_setVecs(void*vectors)
设定中断向量表基地址
Vectors指向中断向量表的指针
IRQ
该函数的调用程序中已经给出
IRQ_setVecs((void*)0x800000000)
VoidIRQ_globalEnable()
使能全部可屏蔽中断
VoidIRQ_nmiEnable()
使能NMI中断
VoidIRQ_map(Uint32EventId,
Intintnumber)
EventId为事件ID
为一个中断映射逻辑事件
Intnumber为中断号,本次实验为14
IRQ_map(IRQ_EVT_TINT0,12)
VoidIRQ_reset(Uint32eventId)
关闭及清除中断
eventId为事件ID
IRQ_reset(eventId)
VoidIRQ_enable(Uint32
EventId)
使用IER寄存器使能特定事件,
IRQ_enable(IRQ_EVT_TINT0)
以上表格中的函数更为详细的介绍在ccs软件中的help菜单中可以找到。
具体使用为help
->
contents->
ChipSupportLibrary或者help->
usermanuals->
DSPFoundationSoftware->
spru401
注意:
中断响应程序在函数interruptvoidc_int14(void){}中编写即可。
6.装载程序Timer.out,进行调试。
7.打开timer.c,在中断程序中“timereventhandler();
”设置断点。
8.运行程序,程序会停在断点处,表明已进入定时器中断。
此时观察CCS下方的“Stdout”
窗口,会看到“