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

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

我也准备开始调试把Flash的擦写拷贝到RAM中执行,不过手头还没硬件。也期待哪位大侠能给指点一下。
不过xiaoxiaoer 你可以把你的Flash擦写和拷贝那块,发到我信箱里一份,我看看跟我写的是否一样
我的信箱是: nishui_2000@163.com ,我的网站是: www.dyic.com.cn
水泡泡
 我的QQ是:52449804 
 我的网站是: www.dyic.com.cn
 欢迎访问和留言跟我联系
seuafu2005:
我觉得你说的一个地方不对,
*(volatile unsigned char *)flash_addr=(unsigned char) value;
flash_addr是16bit的address,如果不用强制类型转换,会烧写失败
那你的意思就是把16位的地址强制转换成8位,那就是把高8位的地址信息扔掉。而地址都是16位的,你把他高8位扔掉了,能行么?

水泡泡
 我的QQ是:52449804 
 我的网站是: www.dyic.com.cn
 欢迎访问和留言跟我联系
HC08和S08的Flash操作的寄存器是不一样,但那是次要的,因为对寄存器的操作看手册就一目了然,现在关键是怎么把程序复制到RAM中然后正确的执行,这是通用的也是问题的关键
xiaoxiaoer 如果你的问题还没解决,就在给我发个邮件。我手头有问同事要的GP32的Flash操作,不过我没试验过,你正好可以试试用他的方法调试你的Flash那块
水泡泡
 我的QQ是:52449804 
 我的网站是: www.dyic.com.cn
 欢迎访问和留言跟我联系
xiaoxiaoer :
我现在发现一个读写QG8的新的Flash程序,非常好用,不必象GP32那样,我在QG8单凭机调试过了没问题的,直接拷贝过来就可以用,真是简单,而且代码简洁!
#define Page_Erase PGM[21]=0x40; temp = ((unsigned char(*)(unsigned int))(PGM))
#define Program_Byte PGM[21]=0x20; temp = ((unsigned char(*)(unsigned int, unsigned char))(PGM))

//Array of opcode instructions of the Erase/Program function in the HCS08 family
volatile unsigned char PGM[59] = {
0x87,0xC6,0x18,0x25,0xA5,0x10,0x27,0x08,0xC6,0x18,0x25,0xAA,0x10,0xC7,0x18,0x25,
0x9E,0xE6,0x01,0xF7,0xA6,0x20,0xC7,0x18,0x26,0x45,0x18,0x25,0xF6,0xAA,0x80,0xF7,
0x9D,0x9D,0x9D,0x9D,0x45,0x18,0x25,0xF6,0xF7,0xF6,0xA5,0x30,0x27,0x04,0xA6,0xFF,
0x20,0x07,0xC6,0x18,0x25,0xA5,0x40,0x27,0xF9,0x8A,0x81};
void main(void) {
unsigned char temp,i;
MCU_init();
/* include your code here */
temp = Page_Erase(0xF000);
if(temp==0xFF){
PTAD=0;

}
for(i=0; i<= 255; i++) {
temp = Program_Byte(0xF000+i,i);
if(temp==0xFF){
PTAD=0;
}
}

for(;;) {
__RESET_WATCHDOG(); /* feeds the dog */
} /* loop forever */
水泡泡
 我的QQ是:52449804 
 我的网站是: www.dyic.com.cn
 欢迎访问和留言跟我联系
返回列表