佚名通过本文主要向大家介绍了s12x,飞思卡尔s12x,s12x demo cw.zip,我的世界指令大全,我的世界指令等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com
问题: S12X全速执行Flash擦除和写入指令时会报错
描述:
经过我的检查,发现是launch指令的问题,也就是只要全速运行的语句中包括launch指令(FATAT_CCIF=1),就会发生上述错误。
难道是因为时钟的问题?flash自己的操作时钟要求是1M,整个单片机的总线时钟是8M,我也已经写了一个while(FSTAT_CCIF==0)作为等待flash指令完成的延时,但是依然不行。百思不得其解。
描述:
单片机开发flash指令操作单片机编程报错
最近在写P-flash的擦除与写入指令,发现单步调试时,程序完全正确,但是一旦全速运行就会报错,报错提示为:illegal_BP,错误现象为基本上所有寄存器都变成了0xFFFF(也就是复位向量的地址)。经过我的检查,发现是launch指令的问题,也就是只要全速运行的语句中包括launch指令(FATAT_CCIF=1),就会发生上述错误。
难道是因为时钟的问题?flash自己的操作时钟要求是1M,整个单片机的总线时钟是8M,我也已经写了一个while(FSTAT_CCIF==0)作为等待flash指令完成的延时,但是依然不行。百思不得其解。

PFlash_Init();
if (flag==1)
{
flag=0;
if(sector==0)
{
while(FSTAT_CCIF==0);
if(FSTAT_ACCERR) //判断并清除标志位;
FSTAT_ACCERR=1;
if(FSTAT_FPVIOL) //判断并清除标志位;
FSTAT_FPVIOL=1;
FCCOBIX_CCOBIX=0x00;
FCCOB=0x0A7E; //写入擦除命令和高位地址(0A是对P-Flash进行Sector擦除的指令)
FCCOBIX_CCOBIX=0x01;
FCCOB=p_address; //写入低16位的地址
FSTAT_CCIF=1; //写1清0启动执行命令
while(FSTAT_CCIF==0)
}
for (i=0,j=0;i<4;i++,j++)
{
Buffer[i]=0x0000;
Buffer[i]=Buffer[i]|(string[j]<<8);
j++;
Buffer[i]=Buffer[i]|string[j];
}
while(FSTAT_CCIF==0);
if(FSTAT_ACCERR) //判断并清除标志位;
FSTAT_ACCERR=1;
if(FSTAT_FPVIOL) //判断并清除标志位;
FSTAT_FPVIOL=1;
FCCOBIX_CCOBIX=0x00;
FCCOB=0x067E; //写入命令和高位地址(06是对P-Flash进行固化的指令)
FCCOBIX_CCOBIX=0x01; //地址后16位
FCCOB=p_address; //写入低16位地址
FCCOBIX_CCOBIX=0x02; //写入第一个数据
FCCOB=Buffer[0];
FCCOBIX_CCOBIX=0x03; //写入第二个数据
FCCOB=Buffer[1];
FCCOBIX_CCOBIX=0x04; //写入第三个数据
FCCOB=Buffer[2];
FCCOBIX_CCOBIX=0x05; //写入第四个数据
FCCOB=Buffer[3];
FSTAT_CCIF=1; //写1清0执行命令
while(FSTAT_CCIF==0); //等待执行完毕
sector++;