当前位置:文档之家› DSP实验指导

DSP实验指导

实验一:扩展RAM及FLASH读写实验一、实验目的1. 理解F28335在硬件上如何扩展RAM内存。

2. 理解F28335在扩展RAM存储器上的编程。

二、实验设备1.装有CCS5.2的计算机一台。

2.ZQ28335开发板、XDS100V2 USB仿真器、USB接口线及5V电源。

三、实验原理F28335的片上存储器和片外存储器采用统一编址方式。

当片内RAM存储器不够用时,可外接芯片扩展。

扩展存储器只能在0x00 4000~0x00 5000的XINF 区域0、0x10 0000~0x20 0000的XINF 区域6和0x20 0000~0x70 0000的XINF 区域7,如图1所示。

1.外扩RAM电路选用的RAM型号为IS61LV25616AL,256K×16bit大小。

这里使用A17~A0,共18根地址线,最大为256K;数据线为D15~D0。

片选信号CE接F28335的XZCS7引脚,写WE 由XWE提供,RD(OE,Output Enable)信号均XRD提供。

有硬件电路可知,外扩的RAM 地址范围为0x20 0000~0x23 FFFF。

由于没有使用A19~A18地址线,在仿真时,凡低18位地址相同的单元,读出的内容都是同一个单元内容,如0x240000~0x27FFFF,0x280000~0x2BFFFF和0x2C0000~0x2FFFFF上读出的内容与0x200000~0x23FFF的内容相同。

2.外扩FLASH电路FLASH存储器掉电后数据不会丢失,用于存放程序和需要保存的数据。

本实验板选用的FLASH型号为SST39VF800,512K×16bit大小。

这里使用A18~A0,共19根地址线,最大为512K;数据线为D15~D0。

片选信号CE接F28335的XZCS6引脚,写WE由XWE 提供,RD(OE,Output Enable)信号均XRD提供。

有硬件电路可知,外扩的FLASH地址范围为0x10 0000~0x17 FFFF。

读FLASH的方法与普通的存储器没有区别,但写数据到FLASH及擦除等操作,则需要特定的命令,如表1所示。

图1 F28335内存映射表1 SST39VF800型FLASH存储器命令表图3 F28335在区域6外接FLASH芯片(仅使用A18~A0,512K)例如:一个字到FLASH(Word Program),需要4个周期。

如将地址为DSPRamStart的随机存储器单元内容复制到FLASH的FlashStart单元,编程如下:*(FlashStart + 0x5555)= 0xAA;*(FlashStart + 0x2AAA)= 0x55;*(FlashStart + 0x5555) = 0xA0;*(FlashStart) = *(DSPRamStart);3.实验功能分析在《main_EXRAM.C》中,读写外部RAM与读写普通的存储器方法相同。

在《main_NOR_FLASH.C》中读FLASH与普通存储器没有区别,但写FLASH等操作需要发送相应的命名。

为叙述方便,将RAML7前半部分存储器简称为A,后半部分简称为B,FLASH 存储器简称为C,外部RAM存储器简称为D。

主函数的主要功能为(1)初始化外部接口为16位的总线接口(InitXintf());(2)A初始化为0~0x3FF(InitRam(0));(3)擦除C(ChipErase();execute_150ms);(4)将A数据复制到C(写FLASH)(FlashWrite(0,0,0x400));(5)将B清零(EraseRam(0x0));(6)将C数据复制到B(读FLASH)(FlashRead(0,0,0x400));0xF0000xF800图4 EXRAM及FLASH存储器分布简图四、源程序分析1.延迟函数原型:void delay_loop(Uint32 x)2.擦除整个FLASH数据函数原型:Uint16 ChipErase(void)// FLASH芯片地址接在ZONE6段,地址从0x100000开始// FlashStart=0x100000// 擦除整个FLASH,擦除后,每个单元均为0xFFFF// 函数返回0:擦除完成(EraseOK=0)// 函数返回1:擦除超时退出(TimeOutErr=1)// 函数返回3:擦除错误(EraseErr=3)3.将RAML7的数据写到FLASH函数原型:Uint16 FlashWrite(Uint32 RamStart, Uint32 RomStart, Uint16 Length) // FlashStart=0x100000// DSPRamStart =0x00F000// RAML7起始偏移地址:RamStart// FLASH起始偏移地址:RomStart// 复制数据个数:Length// 函数返回0:全部写到FLASH完成(WriteOK=0)// 函数返回1:擦除超时退出(TimeOutErr=1)// 函数返回2:写数据错误(V erifyErr=2)4.读FLASH的数据,复制到RAML7后半部分函数原型:void FlashRead(Uint32 RamStart, Uint32 RomStart, Uint16 Length)// FlashStart=0x100000// DSPRamStart2 =0x00F800// FLASH起始偏移地址:RomStart// RAML7起始偏移地址:RamStart// 复制数据个数:Length5.初始化RAML7前半部分寄存器函数原型:void InitRam(Uint16 Start)// DSPRamStart =0x00F000// 从RAML7前半部分的偏地址:start,单元数为0x400// 初始化值为0~0x3FF,单元个数为0x400。

6.擦除RAML7的后半部分数据函数原型:void EraseRam(Uint16 Start)// DSPRamStart2 =0x00F800// 从RAML7后半部分的偏地址:start,单元数为0x400// 初始化值:全0,单元个数为0x400。

7.擦除RAML7的后半部分数据函数原型:void RamRead(Uint16 Start)// 将RAML7的前半部分数据复制到RAML7的后半部分函数// DSPRamStart =0x00F000// DSPRamStart2 =0x00F800 (RAML7的后半部分)// 将RAML7的前半部分偏移地址为start,// 复制单元数为0x4008.《main_NOR_FLASH.C》中的主函数void main(void){InitSysCtrl();DINT;InitPieCtrl();IER = 0x0000;IFR = 0x0000;InitPieVectTable();InitXintf(); // 初始化16位数据的外设总线InitRam(0);ChipErase();execute_150ms;FlashWrite(0,0,0x400);EraseRam(0x0); // RAML7后半部分从0xF800开始FlashRead(0,0,0x400); // RAML7后半部分从0xF800开始}五、实验预习完成预习报告。

六、实验过程(一)新建实验项目1.点击CCS软件的Project菜单下的New CCS Project选项,如图5所示,新建一个名为“ZQ28335_ExRAMand_NOR_FLASH”的空项目,有关参数设置如图6所示。

点击Empty Project和Finish完成项目的新建。

图5 新建一个项目图6 项目参数设置2. 将参考项目文件夹中的00ic_EXRAM.c文件重命名为“main_EXRAM.c”后,复制到这个项目文件夹中。

00ic_NOR_FLASH.c文件重命名为“main_ NOR_FLASH.c”后,也复制到这个项目文件夹中。

并删除“main.c”文件。

将参考项目文件夹“DSP2833x_common”和“DSP2833x_headers”也复制到这个项目文件夹中,并禁用一些不需要的文件。

注:DSP2833x_common中已删去CMD文件夹。

DSP2833x_headers已删去CMD文件夹中的“DSP2833x_Headers_BIOS.cmd”。

4.右击项目名称,选择Properties(属性),如图7所示,点击Include Options选项,添加DSP2833x_common和DSP2833x_headers中的头文件和源文件途径。

如图4所示。

图7添加文件途径(二)扩展RAM实验1.禁用“main_ NOR_FLASH.c”文件,方法是:在“main_ NOR_FLASH.c”文件上右击选择下的选项。

如图8所示。

在随后出现的界面上,点击和按钮即可。

这时“main_ NOR_FLASH.c”文件不参与编译。

图8禁用文件选项2.点击,编译、下载程序,当程序运行到下图OK地方停止表示外部SRAM读写数据正常,否则停止在error处。

图9执行main_EXRAM停止位置3.此时点击View->Memory,打开内存观察窗口,输入外扩RAM起始地址0x20 0000,按回车键,即可看到从0x0000依次递增的数据。

图10执行main_EXRAM结果数据(三)扩展FLASH实验1.禁用“main_EXRAM.c”文件,方法是同禁用“main_ NOR_FLASH.c”文件相同。

2.激活“main_ NOR_FLASH.c”。

方法是:在“main_ NOR_FLASH.c”文件上右击选择下的选项。

在随后出现的界面上,去掉和左侧的两个小沟,点击OK即可。

3.点击,编译、下载程序,在InitRam(0)这一行设置一个断点,点击运行程序到此。

点击(单步执行),执行下面一行代码:InitRam(0);打开内存观察窗口,输入RAML7起始地址0xF000,按回车键,看数据是否从0x0000依次递增。

图11执行InitRam(0)结果数据4.点击,执行下面两行代码:ChipErase();execute_150ms;打开内存观察窗口,输入FLASH起始地址0x10 0000,按回车键,看FLASH擦除后的数据是否都是0xFFFF。

图12执行ChipErase()结果数据5.点击,执行下面一行代码:FlashWrite(0,0,0x400);打开内存观察窗口,输入FLASH起始地址0x10 0000,按回车键,看写到FLASH的数据是否从0x0000依次递增。

相关主题