DSP实验指导

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

实验一:扩展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));

0xF000

0xF800

图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

相关文档
最新文档