用存储器映射的方法实现片外FLASH的擦写

技术分类: 微处理器与DSP  | 2005-11-08
来源:电子产品世界


       ②编写FLASH擦写程序。

       #define N 100 /* 由于FLASH与RAM的读写速度不同,所以需要在每项操作后加入若干个延迟以保证正确性,延迟的具体长短可以根据具体情况作调整 */

void main()

{

unsigned int i,code;

unsigned int *code_addr;

unsigned int *flash_addr;

*GPIO_D_DR=0x0002; /*映射方式设置为映射到片外数据FLASH*/

delay(N);

GPIOD_setup(); /*GPIOD设置*/

delay(N);

erase_flash(); /*如FLASH上原有数据无需保留,则全部擦除,如部分据需保留,也可部分擦除*/


*GPIO_D_DR=0x0000; /*映射方式设置为映射到片内XRAM*/
delay(N);

flash_addr=(unsigned int *) FL
ASH_ADDR;

code_addr=(unsigned int *)CODE_ADDR; /*设置XRAM的存储起始地址和数据FLASH擦写起始地址*/


/*循环擦写*/

for(i=0;i{

*GPIO_D_DR=0x0000;

delay(N);

code=*(code_addr++); /*保存XRAM中数据到变量code*/

delay(N);

*GPIO_D_DR=0x0002;

delay(N);

pre_write_flash(); /* 写FLASH前的预处理,向FLASH内写入相应命令字,根据所选用 FLASH的不同预处理操作也有所不同*/

delay(N);

*(flash_addr++)=code; /*写数据到FLASH中*/

delay(N);

}

}

       擦写步骤如下:

       ① 将character[180][32]设置为全局变量。

       ② 将程序编译下载到DSP芯片中,打开工程目录中output文件夹中的.elf文件,找到character 数组在XRAM中存放的起始地址和长度。用户可以使用Watch Memory命令察看该段地址的数据值。

       ③ 使用Save Memory命令将XRAM中对应于character数组的地址段的数据以二进制形式保存在计算机上。通过UltraEdit将其打开,检看数据保存是否正确。

       ④ 打开FLASH擦写程序,修改数据在片内XRAM中存储的起始地址和FLASH的擦写起始地址与数据长度。编译下载后,单步执行,执行到擦除完FLASH,并将地址映射方式置为映射到片内XRAM处,使用Load Memory指令将char数据文件载入到片内XRAM的相应存储地址段中,再接着全速运行程序,几十秒之后程序执行完毕,数据便写到片外FLASH的相应地址中。

       ⑤ 再次打开FLASH擦写程序,单步执行到映射方式置为片外FLASH处停止,使用Save Memory命令保存FLASH中刚写入的地址段的数据值。接着使用UltraEdit的比较文件命令比较前两次保存的数据,如完全相同就表明character字模数组已经正确的写到片外FLASH中。

       将数据擦写入片外数据FLASH后,就可以在用户程序中对该数据加以调用。在调用的时候要先将映射方式设置为映射到片外FLASH,然后再取数据。如下所示,取出FLASH中0x6000地址上存储的数据:

       #define FLASH_ADD (unsigned int *)0x6000

       *GPIO_D_DR=0x0002; /*映射方式设置为映射到片外FLASH*/

       data = *(FLASH_ADD);

1】【2】【3
加载中

对文章的评论

更多评论

剩余字数:  

浏览该文章的用户还看过...

  • 文 章

  • 论 坛

  • 博 客

  • 小 组

设计资源与分销