对hcs12xep100的flash进行擦写的时候遇到了一个奇怪的问题,导致调试1天没有正确的结果,如果哪位大侠路过烦请帮忙解答,谢谢!
在对flash的控制器发送擦除或者写命令之后需要等待状态寄存器的置位也就是FSTAT_CCIF位要为1,在此之前需要对FSTAT_CCIF写1以清除该位。问题是这样的,在等待FSTAT_CCIF的时候代码总是跑飞掉,在BDM模式调试的情况下也是如此。先是怀疑时序的问题,但是加了延时也是不能解决问题,不论延时很长还是很短。后来在网上找了个代码跑了一下结果是可以的。唯一的差别就是将清楚FSTAT_CCIF和等待FSTAT_CCIF的代码放到RAM中去执行,具体的操作如下
FSTAT_CCIF=1;
while(FSTAT_CCIF==0);
替换成:_asm("CALL RAMOfProgram");
unsigned char P[10]={0x1C,0x01,0x06,0x80,0x1F,0x01,0x06,0x80,0xFB,0x0A};
//FSTAT_CCIF=1; //写入执行命令
//while(FSTAT_CCIF==0); //等待执行完毕
//结尾处0x0A为返回代码RTS
unsigned char RAMOfProgram[10];
void ProgramToRam(void)
{
unsigned char i;
for(i=0x00;i<10;i++)
{
RAMOfProgram[i]=P[i];
}
}
奇怪了,为什么只是在发送命令之后直接FSTAT_CCIF操作就不行了呢?
转载于:https://blog.51cto.com/bluefish/537488