通过程序烧写片上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);
}
欢迎光临 电子技术论坛_中国专业的电子工程师学习交流社区-中电网技术论坛 (http://bbs.eccn.com/) | Powered by Discuz! 7.0.0 |