查看: 2823|回复: 4

[S12] MC9S12D64非专家模式的内部1K EEPROM操作问题

[复制链接]

该用户从未签到

2

主题

12

帖子

0

新手上路

Rank: 1

积分
27
最后登录
1970-1-1
发表于 2012-2-9 18:29:55 | 显示全部楼层 |阅读模式
各位朋友:
 小弟最近操作MC9S12D64非专家模式的内部1K EEPROM,发现总是操作不成功,
现在主要问题是:经查询,首先应该设定INITEE寄存器,将EEPROM地址重新映射,否则就被RAM和内部寄存器挡住了。我贴上我的主要代码,麻烦有经验的给看看:
  注意是:非专家模式
1、初始化时钟(使用的是外部24M晶振)后,设定INITEE = 41;
2、初始化EEPROM分频等
 /************************************************* 
   功能   : EEPROM初始化
   参数   : OSCCLK 晶振频率,这里用KHz表示 
 
Returns   :无          
**************************************************/
void EEPROMInit(void)  
{  
    ECLKDIV|=0X51;//晶振频率进入分频器前8分频,分频系数16 
    ESTAT_PVIOL=1;    /*清零写保护侵害故障*/  
    ESTAT_ACCERR=1;   /*清零访问错误故障*/  
      
    ECNFG_CCIE=0;     /*命令完成中断禁止*/  
    ECNFG_CBEIE=0;    /*命令缓冲器空中断禁止*/  
      
    EPROT_EPOPEN=1;   /*EEPROM不被写保护*/  
    EPROT_EPDIS=1;    /*无保护区域*/  
}
3、将需要写的地址擦除
 
/************************************************* 
   功能   : EEPROM扇区擦除
   参数   : addr
            data_length
   返回值 :   1  OK
              0  FAIL              
**************************************************/  
uchar EEPROMSectorErase(volatile uint *addr)       
{    
    uchar   count;     
   if((ESTAT_PVIOL==1) || (ESTAT_ACCERR==1))     //发现错误
    {  
        ESTAT_PVIOL=1;  
        ESTAT_ACCERR=1;                      //清除中断标志  
         return(0);  
    }        
    
          while(!ESTAT_CBEIF){}                 //判断命令缓冲区是否为空
          *addr=0xFF;  
          ECMD=0x40;  
          ESTAT_CBEIF=1;                          //清除中断标志   
          if((ESTAT_PVIOL==1) || (ESTAT_ACCERR==1)) //发现错误   
          {  
              ESTAT_PVIOL=1;  
              ESTAT_ACCERR=1;                       //清除错误标志  
              return(0);  
          }  
  while(ESTAT_CCIF!=1)  //等待所有的指令操作完成
   {  
   } 
  return(1);  
}
 
4、编程/************************************************* 
   功能   : EEPROM字编程
   参数   : addr
            data
            data_length
   返回值 :   1  OK
              0  FAIL              
**************************************************/ 
uchar EEPROMWordProgram(uint addr,volatile uint data)  
{  
    uint *paddr;  
    uchar   count;    
          
    if((ESTAT_PVIOL==1) || (ESTAT_ACCERR==1))  
    {  
        ESTAT_PVIOL=1;  
        ESTAT_ACCERR=1;                       //清除中断标志  
        //return(0);   
    }    
          paddr= (uint *)addr;  
          while(!ESTAT_CBEIF){}                   //判断命令缓冲区是否为空  
          *paddr=data;                            //写数据到地址   
          ECMD=0x20;  
          ESTAT_CBEIF=1;                          //清除中断标志  
          if(ESTAT_PVIOL==1 || ESTAT_ACCERR==1)   //发现错误  
          {  
              ESTAT_PVIOL=1;  
              ESTAT_ACCERR=1;                       //清除中断标志    
              return(0);  
          }  
 
 while(ESTAT_CCIF!=1)    //等待所有的指令操作完成
  {  
  }  
  return(1);  
}
5、读取验证
/************************************************* 
   功能   : EEPROM读一个字
   参数   : addr
            *data
   返回值 :   1  OK
              0  FAIL              
**************************************************/  
uchar EEPROMWordRead(volatile uint addr,uint data)  
{  
          data=*(uint *)addr;  
          return(1);   
}
飞思卡尔内部EEPROM研究.rar (511.71 KB, 下载次数: 8)
回复

使用道具 举报

该用户从未签到

2

主题

12

帖子

0

新手上路

Rank: 1

积分
27
最后登录
1970-1-1
 楼主| 发表于 2012-2-10 10:34:54 | 显示全部楼层

RE:MC9S12D64非专家模式的内部1K EEPROM操作问题

自己顶一个,希望多帮忙
回复 支持 反对

使用道具 举报

  • TA的每日心情
    难过
    2021-12-15 16:01
  • 签到天数: 1 天

    连续签到: 1 天

    [LV.1]初来乍到

    305

    主题

    4701

    帖子

    0

    中级会员

    Rank: 3Rank: 3

    积分
    377
    最后登录
    2023-8-16
    发表于 2012-2-10 14:50:49 | 显示全部楼层

    RE:MC9S12D64非专家模式的内部1K EEPROM操作问题

    你看一下下面地址的例程和说明文档,或许有帮助.我再帮你看看程序.
    https://www.nxpic.org.cn/bbs/article_265_193299.html
    该会员没有填写今日想说内容.
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    2

    主题

    12

    帖子

    0

    新手上路

    Rank: 1

    积分
    27
    最后登录
    1970-1-1
     楼主| 发表于 2012-2-13 14:08:44 | 显示全部楼层

    RE:MC9S12D64非专家模式的内部1K EEPROM操作问题

    好的,先谢谢这位大哥了,我也多看看
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    2

    主题

    12

    帖子

    0

    新手上路

    Rank: 1

    积分
    27
    最后登录
    1970-1-1
     楼主| 发表于 2012-2-13 14:10:18 | 显示全部楼层

    RE:MC9S12D64非专家模式的内部1K EEPROM操作问题

    上楼的大哥,你说的例程,我也基本看过了,但是貌似程序结构,以及工程的结构都大不一样,我贴的程序,在专家模式下,基本能用,但是非专家模式就是不行
    回复 支持 反对

    使用道具 举报

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

    本版积分规则

    关闭

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

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

    GMT+8, 2025-7-21 16:41 , Processed in 0.094552 second(s), 26 queries , MemCache On.

    Powered by Discuz! X3.4

    Copyright © 2001-2024, Tencent Cloud.

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