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

求助:有谁用过9S08GT60片上flash烧写功能?

求助:有谁用过9S08GT60片上flash烧写功能?

通过程序烧写片上flash的时候,当执行page erase函数,其中有一个步骤是给FCMD寄存器写入0x40(扇区删除)的指令,不知为何程序指针会跳到0x0000处。可是单步执行的时候却是正常的,并且单字节写入的程序也是正常的。

那位高手能够指点一二!谢谢了!

程序是这样写的(见下面),先将FlashProg加载到ram中,通过_asm  JSR   FlashProg_Ram 调用执行。当全速执行的时候,执行FCMD = cmd;,程序指针就会跳到0x0000跑飞。

/* Flash Page Erase , Command $40 */
UINT8 FlashPageErase(UINT8 *flashAdd)

    if (FSTAT_FACCERR)
    {
        FSTAT_FACCERR = 1; //clear error 
    }
    //FlashProg(0x40,(UINT8 *)flashAdd,0x00);
    *flashAdd = 0x00;
    _asm  LDA   #64
    _asm  JSR   FlashProg_Ram
    return SUCCESS;
}

void FlashProg (UINT8 cmd)
{
    FCMD = cmd;
    FSTAT = 0x80;
    asm{
      nop
      nop
      nop
      nop
    }
    while (!FSTAT_FCCF);
}

时钟设置是否准确?
要放在RAM里面跑。
有没有给出擦除的扇区的地址?
返回列表