查看: 6075|回复: 11

MC9S08 DZ60 写EEPROM时FSTAT_FCBEF=1;不执行直接跳过(已解决)

[复制链接]

该用户从未签到

1

主题

14

帖子

0

新手上路

Rank: 1

积分
9
最后登录
1970-1-1
发表于 2013-3-21 16:12:37 | 显示全部楼层 |阅读模式
部分程序代码:
DisableInterrupts;
  if(FSTAT_FACCERR == 1)
    FSTAT_FACCERR = 1;                   //清除错误标记
  if(FSTAT_FCBEF == 1){                  /* 命令缓冲器是否为空 */
    *(unsigned char *)address = 0;       /* 写数据 */
    FCMD = ERASE;                        /* 写指令码 */
    FSTAT_FCBEF=1;                       /* 清除FCBEF并发起命令 */
    asm{                                 //等待4个bus cycle
        NOP
        NOP
        NOP
        NOP
        }
    if( (FSTAT_FACCERR != 0) || (FSTAT_FPVIOL != 0)){
      EnableInterrupts;                   /* 若出错 返回FAIL */
      return(ERR_BUSY);
    }
    while(FSTAT_FCCF != 1);                 /* 等待命令成功完成 */
    EnableInterrupts;                       /* 命令完成 打开中断 */
  }
  else{
  EnableInterrupts;
  return(ERR_BUSY);
  }
仿真的时候 FSTAT_FCBEF=1;  不执行,直接跳过;EEPROM写完不下电直接读出来是正确的  下电再上电就不对啦;哪位大神知道这个问题怎么解决
回复

使用道具 举报

该用户从未签到

85

主题

790

帖子

0

金牌会员

Rank: 6Rank: 6

积分
2279
最后登录
1970-1-1
发表于 2013-3-21 16:43:30 | 显示全部楼层

RE:MC9S08 DZ60 写EEPROM时FSTAT_FCBEF=1;不执行直接跳过

这条清FCBEF的语句是不能去掉的。这一点在MC9S08DZ手册中的第54页有很明确的阐述。千万要注意呀。
回复 支持 反对

使用道具 举报

该用户从未签到

1

主题

14

帖子

0

新手上路

Rank: 1

积分
9
最后登录
1970-1-1
 楼主| 发表于 2013-3-22 08:29:08 | 显示全部楼层

回复:MC9S08 DZ60 写EEPROM时FSTAT_FCBEF=1;不执行直接跳过

回复第 2 楼 于2013-03-21 16:43:30发表:
这条清FCBEF的语句是不能去掉的。这一点在MC9S08DZ手册中的第54页有很明确的阐述。千万要注意呀。  

我没有去掉。我在程序里写了这一条清楚FCBEF的指令,但是我仿真的时候这一条没有执行,直接跳到下一条程序。EEPROM怎么都写不去。
回复 支持 反对

使用道具 举报

该用户从未签到

85

主题

790

帖子

0

金牌会员

Rank: 6Rank: 6

积分
2279
最后登录
1970-1-1
发表于 2013-3-22 09:18:59 | 显示全部楼层

RE:MC9S08 DZ60 写EEPROM时FSTAT_FCBEF=1;不执行直接跳过

如下是MC9S08DZ flash操作的参考代码
unsigned char Flash_Cmd(unsigned int FlashAddress, unsigned int FlashDataCounter, unsigned char* pFlashDataPtr, unsigned char FlashCommand)
{
    /* Clear Flags if set*/
      FSTAT = 0x30;  
      do
      {
          /* Wait for the Last Busrt Command to complete */
          while(!(FSTAT&0x80));
         
          /* Write Data into Flash*/
          (*((volatile unsigned char *)(FlashAddress++))) = *pFlashDataPtr;
          pFlashDataPtr++;
          /* Write Command */
          FCMD = FlashCommand;
          _asm NOP;
          _asm NOP;
          _asm NOP;
          _asm NOP;
         
          /* Put FCBEF at 1 */
          FSTAT = 0x80;
          /* Check if Flash Access Error or Protection Violation Error are Set */
          if (FSTAT&0x30)
          {     
            /* If so, finish the function returning 1 to indicate error */
            return (1);
          }
    }while (--FlashDataCounter);
    /* wait for the last command to complete */
    while ((FSTAT&0x40)==0);
    /* Return zero to indicate that the function executed Ok */
    return (0);
}
回复 支持 反对

使用道具 举报

该用户从未签到

1

主题

14

帖子

0

新手上路

Rank: 1

积分
9
最后登录
1970-1-1
 楼主| 发表于 2013-3-22 10:24:04 | 显示全部楼层

回复:MC9S08 DZ60 写EEPROM时FSTAT_FCBEF=1;不执行直接跳过

回复第 4 楼 于2013-03-22 09:18:59发表:
如下是MC9S08DZ flash操作的参考代码
unsigned char Flash_Cmd(unsigned int FlashAddress, unsigned int FlashDataCounter, unsigned char* pFlashDataPtr, unsigned char FlashCommand)
{
/* Clear Flags if set*/
FSTAT = 0x30;  
do
{
/* Wait for the Last Busrt Command to complete */
while(!(FSTAT&0x80));

/* Write Data into Flash*/
(*((volatile unsigned char *)(FlashAddress++))) = *pFlashDataPtr;
pFlashDataPtr++;
/* Write Command */
FCMD = FlashCommand;
_asm NOP;
_asm NOP;
_asm NOP;
_asm NOP;

/* Put FCBEF at 1 */
FSTAT = 0x80;
/* Check if Flash Access Error or Protection Violation Error are Set */
if (FSTAT&0x30)
{     
/* If so, finish the function returning 1 to indicate error */
return (1);
}
}while (--FlashDataCounter);
/* wait for the last command to complete */
while ((FSTAT&0x40)==0);
/* Return zero to indicate that the function executed Ok */
return (0);
}
 

 
还是不行   我仿真的时候发现FCMD寄存器的值一直0  写指令代码后没变化    这个情况是怎么回事    是正常的吗
回复 支持 反对

使用道具 举报

该用户从未签到

85

主题

790

帖子

0

金牌会员

Rank: 6Rank: 6

积分
2279
最后登录
1970-1-1
发表于 2013-3-22 10:51:37 | 显示全部楼层

回复:MC9S08 DZ60 写EEPROM时FSTAT_FCBEF=1;不执行直接跳过(正解)

 

附件是MC9S08DZ的flash操作的样例工程。

FlashRoutines_DZ.zip

155.45 KB, 下载次数: 89

回复 支持 反对

使用道具 举报

该用户从未签到

1

主题

14

帖子

0

新手上路

Rank: 1

积分
9
最后登录
1970-1-1
 楼主| 发表于 2013-3-22 11:05:14 | 显示全部楼层

回复:MC9S08 DZ60 写EEPROM时FSTAT_FCBEF=1;不执行直接跳过

回复第 6 楼 于2013-03-22 10:51:37发表:
 

附件是MC9S08DZ的flash操作的样例工程。
 

这种文件怎么打开?  用什么软件
回复 支持 反对

使用道具 举报

该用户从未签到

85

主题

790

帖子

0

金牌会员

Rank: 6Rank: 6

积分
2279
最后登录
1970-1-1
发表于 2013-3-22 11:26:28 | 显示全部楼层

RE:MC9S08 DZ60 写EEPROM时FSTAT_FCBEF=1;不执行直接跳过

CodeWarrior6.3
回复 支持 反对

使用道具 举报

该用户从未签到

1

主题

14

帖子

0

新手上路

Rank: 1

积分
9
最后登录
1970-1-1
 楼主| 发表于 2013-3-22 12:37:49 | 显示全部楼层

回复:MC9S08 DZ60 写EEPROM时FSTAT_FCBEF=1;不执行直接跳过

回复第 8 楼 于2013-03-22 11:26:28发表:
CodeWarrior6.3
我知道怎么回事啦  谢谢你!!!
回复 支持 反对

使用道具 举报

该用户从未签到

85

主题

790

帖子

0

金牌会员

Rank: 6Rank: 6

积分
2279
最后登录
1970-1-1
发表于 2013-3-22 13:27:45 | 显示全部楼层

RE:MC9S08 DZ60 写EEPROM时FSTAT_FCBEF=1;不执行直接跳过

不客气,很高兴能够帮到你。
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 注册/登录

本版积分规则

关闭

站长推荐上一条 /3 下一条

Archiver|手机版|小黑屋|恩智浦技术社区

GMT+8, 2025-8-2 22:40 , Processed in 0.102231 second(s), 29 queries , MemCache On.

Powered by Discuz! X3.4

Copyright © 2001-2024, Tencent Cloud.

快速回复 返回顶部 返回列表