首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

请教:对GT16中FLASH操作的问题,谢谢!

可能是你的PC指针没有正确返回flash中,另外可以看看flash的状态寄存器中Error位是否有出错的信息。
正常的把整个擦写程序放入RAM中执行以后,通过return(RTS)指令都是可以返回到flash中来的,你在copy程序过去以后,看看你存放擦写程序的那段RAM中是否有正确的返回指令(RTS).
如果程序执行正确,在擦写以后,可以在CW的memory环境中看到你所写入的数据。
如果你会用CW中的Processor Expert,建议新建一个工程用其生成对flash操作的函数,你会比较了解如何在C中调用RAM中的程序。

在对flash操作时要注意这么几点:
1.通过FCDIV寄存器把clock设置在150-200kHz的范围
2.关闭中断
3.拷贝到RAM中运行
4.FSTAT状态寄存器中的FACCERR为零
5.是否有对flash某些块或者整个区域的保护(一般默认整个flash没有保护,均可以擦除)
6.要烧写的地址必须为空(0xFF),否则必须先擦除
7.GT16是字节的烧写
可用这个语句
*(volatile unsigned char *)flash_addr=(unsigned char) value;
flash_addr是16bit的address,如果不用强制类型转换,会烧写失败

8.烧写过程的调试不要用单步。看好datasheet,按步骤一步一步操作就可以,一共就3/4个步骤。要看结果,可以等烧写程序完成查看。

明白了,你说的是908GT16,我说的是9S08GT16

怪不得你找不到我说的寄存器了。

 

 

[此贴子已经被作者于2006-2-21 15:24:21编辑过]

返回列表