DSP3
实验报告
课程名称DSP原理与应用
实验项目DSP系统的自启动
指导教师王勇
学院光电信息与通信工程_
专业电子信息工程
班级/学号电信0901/2009010525 学生姓名王明坤
实验日期___2011年12月___
成绩______________________
一、实验目的
1.了解TMS320VC5509A DSP芯片多种引导加载模式。
2.掌握TMS320VC5509A DSP扩展Flash的烧写过程。
3.设计自启动程序。
4.采用FlashBurn插件烧写程序,实现DSP程序脱离仿真器独立运行。
二、实验仪器及工具
计算机,安装Windows XP 操作系统、TI 的TMS320C5000 DSP 的开发软件CCS2.21;ICETEK-VC5509教学实验箱。
三、实验内容
1.设计自启动程序。
2.采用FlashBurn插件烧写程序,实现DSP程序脱离仿真器独立运行。
四、实验步骤
(一)、设计自启动程序
1.将板上的U5拨码开关DIP3、DIP4、DIP5、DIP6向上拨到ON(靠近CPLD一侧)。2.连接仿真器、目标板和PC机,设置CCS在硬件仿真(Emulator)方式下运行,去掉启动时使用的GEL文件,启动CCS。
3.选择菜单Project→New,在c:\ti\myprojects目录下新建项目dip.prj,将c:\ICETEK-VC5509-AG-EDULab\ Lab0302-DIP\ICETEK-VC5509-A.cmd 拷贝到c:\ti\myprojects\ dip目录下。
4.编写dipmain.c文件。其main函数先初始化EMIF,将CE1、CE2配置为16位异步存储器,然后在一个死循环中读取拨码开关U4状态直接送指示灯显示。
5.将ICETEK-VC5509-A.cmd和dipmain.c添加到dip.prj中,编译、调试程序。
6.将烧写程序(dip.out)转换格式成Hex格式(dip.hex): 拷贝c:\ti\c5500\cgtools\bin目录下hex55.exe到c:\ti\myprojects\dip\debug目录下。编写hex5509.cmd文件将dip.out转换成dip.hex。
7.点击out2hex.bat将dip.out转换成dip.hex。
(二)、采用FlashBurn插件烧写程序
1.选择CCS 的Tools菜单,如果其中没有“FlashBurn”选项,则需要安装CCS烧写Flash 的插件FlashBurn。安装烧写Flash插件FlashBurn:打开C:\ICETEK–VC5509-AG-EDULab\Lab0308-BootLoader\,双击文件夹内的“C5000C6000-2[1].20-SA-to-TI-FLASHBURN271.EXE”,进入安装程序并按照提示完成安装。FlashBurn安装目录:c:\ti\bin\utilities\FlashBurn。
2.将C:\ICETEK–VC5509-AG-EDULab\Lab0308-BootLoader\FBTC55.out拷贝到c:\ti\myprojects\dip目录下。
3. 选择CCS 菜单Tools→ FlashBurn ,打开FlashBurn 插件。单击FlashBurn 的菜单File
→New 创建一个新的配置文档,显现如下图所示FlashBurn 配置对话框。
4. 配置好后,选择菜单Program →Download FBTC ,弹出“将改动保存到…”对话框?,点
击“是”安钮,将配置保存到*.cdd 配置文件中,随后FlashBurn 将FBTC 程序下载到目标板中,下载成功后,注意观察窗口的右下方链条模样的图标是变为互相连接,文字由“Not Connected ”变为“Connected ” 。下次可以选择菜单File→Open 打开刚刚保存的配置文件。
5. 选择菜单Program →Erase Flash ,将擦除Flash 存储器。
6. 选择菜单Program → Program Flash ,将.hex 或.dat 文件烧写到Flash 中。单击“Close”按
钮退出。
7. 测试自启动
(1) 将目标板电源关闭;(2) 拔掉仿真电缆,让仿真器和计算机脱开;
(3) 将板上的U5拨码开关DIP3、DIP4、DIP5向下拨到OFF ,DIP6向上拨到ON (靠近
CPLD 一侧),配置ICETEK-VC5509-A 评估板为外部16位异步存储器(Flash ,CE1空间)的引导模式;
(4) 重新打开目标板电源;(5) 观察板上程序的运行;
(6) 如果四位数码管显示U4拨码开关状态,则表明烧入Flash 的程序正在运行;
(7) 当U4拨码开关有拨动ON 的位置的时,按一下板上的复位按钮,程序将从新运行(先
四位数码管全亮,然后四位数码管显示U4拨码开关状态)。
五、实验代码:
1、dip.c
#include "myapp.h"
浏览要烧写到
Flash 的dip.hex
浏览
填入 Flash 基地址
(字节地址,对TMS320VC5509A 为0x400000) 填入以字节为单位Flash 存储器的大小0x80000
// 定义指示灯控制寄存器地址和寄存器类型
#define LBDS (*((unsigned int *)0x400001))
// 定义拨码开关控制寄存器地址和寄存器类型
#define DIPS (*(unsigned int *)0x400002)
main()
{ CLK_init(); // 初始化DSP运行时钟
SDRAM_init(); // 初始化EMIF接口
while ( 1 )
{ LBDS=DIPS; // 读取拨码开关状态直接送指示灯显示}
}
2、CLK_init.c
#include "myapp.h"
// 定义指示灯控制寄存器地址和寄存器类型
#define LBDS (*((unsigned int *)0x400001))
// 定义拨码开关控制寄存器地址和寄存器类型
#define DIPS (*(unsigned int *)0x400002)
main()
{ CLK_init(); // 初始化DSP运行时钟
SDRAM_init(); // 初始化EMIF接口
while ( 1 )
{ LBDS=DIPS; // 读取拨码开关状态直接送指示灯显示}
}
3、SDRAM_ini.c
#include "myapp.h"
voidSDRAM_init( void )
{ ioport unsigned int *ebsr =(unsigned int *)0x6c00;
ioport unsigned int *egcr =(unsigned int *)0x800;
ioport unsigned int *emirst=(unsigned int *)0x801;
//ioport unsigned int *emibe=(unsigned int *)0x802;
ioport unsigned int *ce01 =(unsigned int *)0x803;
//ioport unsigned int *ce02 =(unsigned int *)0x804;
//ioport unsigned int *ce03 =(unsigned int *)0x805;
ioport unsigned int *ce11 =(unsigned int *)0x806;
//ioport unsigned int *ce12 =(unsigned int *)0x807;
//ioport unsigned int *ce13 =(unsigned int *)0x808;
ioport unsigned int *ce21 =(unsigned int *)0x809;
//ioport unsigned int *ce22 =(unsigned int *)0x80A;
//ioport unsigned int *ce23 =(unsigned int *)0x80B;
ioport unsigned int *ce31 =(unsigned int *)0x80C;
//ioport unsigned int *ce32 =(unsigned int *)0x80D;
//ioport unsigned int *ce33 =(unsigned int *)0x80E;
ioport unsigned int *sdc1 =(unsigned int *)0x80F;
//ioport unsigned int *sdper=(unsigned int *)0x810;
//ioport unsigned int *sdcnt=(unsigned int *)0x811;
ioport unsigned int *init =(unsigned int *)0x812;
ioport unsigned int *sdc2 =(unsigned int *)0x813;
*ebsr = 0x221;
*egcr = 0x220;
*egcr = 0x220;
*ce01 = 0x3000;
*ce11 = 0x1fff;
*ce21 = 0x1fff;
*ce31 = 0x1fff;
*emirst = 0;
*sdc1 = 0x5958;
*sdc2 = 0x38F;
*init = 0;
}
4、func.h
void interrupt tint( void );
voidCLK_init( void );
voidSDRAM_init( void );
voidINTR_init( void );
voidTIME_init(void);
voidTMCR_Reset( void );
voidSetDSPPLL(unsigned intuPLL);
5 、myapp.h
//#include "C5509.h"
//#include "peripherals.h"
#include "func.h"
6、hex5509.cmd
dip.out
-o dip.hex
-map dip.mxp
-m2
-boot
-parallel16
{PAGE 0 : ROM : o=0x400000, l=0x100000
}
7、out2hex.bat
hex55 hex5509.cmd
@pause
六、实验总结:
通过这次实验,我对系统的自启动和FlashBurn插件烧写程序有了进一步的了解,还有这掌握了.out文件转换为.hex的操作过程。