这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » 嵌入式开发 » MCU » [求助]请教ARM BIOS烧写 FLASH 的源程序含义。

共1条 1/1 1 跳转至

[求助]请教ARM BIOS烧写 FLASH 的源程序含义。

菜鸟
2004-10-21 07:34:11     打赏

下面是一段擦除SECTOR的程序代码,FLASH型号是SST39VF160.

#define ROM_BASE 0

#define CMD_ADDR0 *((volatile U16 *)(0x5555*2+ROM_BASE)) #define CMD_ADDR1 *((volatile U16 *)(0x2aaa*2+ROM_BASE))

{

.................

CMD_ADDR0 = 0xaaaa; //line 1 CMD_ADDR1 = 0x5555; // line 2 CMD_ADDR0 = 0x8080; // line 3 CMD_ADDR0 = 0xaaaa; //line 4

CMD_ADDR1 = 0x5555; //line 5 *(volatile U16 *)sector = 0x3030; //line 6 while(1) //line 7 { U16 i; //line 8 i = *((volatile U16 *)sector)&0x40; //line 9 if(i!=*((volatile U16 *)sector)&0x40) //D6 == D6 continue; //line 11 if(*((volatile U16 *)sector)&0x80) //line 12 break; //D7 == 1 }

}

line 6 的具体含义应该是向sector地址所指的指针写数据,是将sector强制转换为指针型变量,指向unsinged int 型数据,即数据总线,也就是向相应的地址(sector)写数据(0x3030),可为什么程序执行到这句时,硬件就会复位呢?

但我将line 6 改为:

*(volatile U32 *)sector = 0x3030; //line 6 将U16 改为 U32

程序可以跑过?

再有while(1)循环里的语句是不是检测 FLASH 中改SECTOR 是否被擦除的语句?

这样检测,只是检测了sector首地址的 数据 的D7是否被擦,这样判断是不是有些不合理啊?

希望知道的帮忙指点一下,谢谢啦




关键词: 求助     请教     烧写     FLASH     源程序     含义    

共1条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]