打印
[8/16-bit MCU]

掉电保存eeprom

[复制链接]
4076|21
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
cl234583745|  楼主 | 2015-5-28 14:45 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 cl234583745 于 2015-5-28 14:46 编辑

dz60希望断电之前保存数据到eeprom,ldw低压警告中断使能。读写eeprom的程序和ldw中断都是好使的,都单独测试过。为啥把写eeprom放进ldw中断里面时候,就有问题呢?
程序:
先读eeprom
while(1)
{}
ldw低压警告中断
{
写eeprom
}

重新上电时候程序运行到读eeprom时候就出错了,不断的重启

相关帖子

沙发
风的样子| | 2015-5-28 18:28 | 只看该作者
怎么会呢,eeprom不能掉电保存吗

使用特权

评论回复
板凳
luofeng2g| | 2015-5-28 19:23 | 只看该作者
不断重启时什么概念?读eeprom就自动重启?

使用特权

评论回复
地板
IversonCar| | 2015-5-28 23:11 | 只看该作者
是不是开始写eeprom的时候就没有写成功呢

使用特权

评论回复
5
cl234583745|  楼主 | 2015-5-29 07:56 | 只看该作者
风的样子 发表于 2015-5-28 18:28
怎么会呢,eeprom不能掉电保存吗

估计是进入低压检测中断时候写eerpom写错了,开机读eeprom导致重启

使用特权

评论回复
6
cl234583745|  楼主 | 2015-5-29 07:57 | 只看该作者
IversonCar 发表于 2015-5-28 23:11
是不是开始写eeprom的时候就没有写成功呢

对的是没有写成功,并且好像写出错误了。从而上电读的时候有错误就不断重启

使用特权

评论回复
7
cl234583745|  楼主 | 2015-5-29 07:58 | 只看该作者
luofeng2g 发表于 2015-5-28 19:23
不断重启时什么概念?读eeprom就自动重启?

估计是进入低压检测中断时候写eerpom写错了,开机读eeprom导致重启

使用特权

评论回复
8
cl234583745|  楼主 | 2015-5-29 08:04 | 只看该作者
本帖最后由 cl234583745 于 2015-5-29 08:07 编辑

这个功能不好用仿真器测试,要掉电重启才知道是否好使。但用仿真器时候不断点击重启和全速。就发现有个别时候程序刚开始就进低压检测中断了。估计就是这个时候重启了。结果就是读写都没有好使


单独测试eeprom读写程序都好使,并且是以前用过的程序。估计是低压检测中断初始化和中断函数不对,或者跟总线时钟的初始化冲突,导致重启(看门狗去掉也会重启)
void MCU_init(void)
{

  //SOPT1 = 0xc0;  //看门狗
  //SOPT2 = 0x00;
          if( (SPMSC1&0x80)==0x80)
                {
                        SPMSC1=SPMSC1|0x40;//清除上电产生的置位
                }
  SPMSC1 = 0x3C;//系统电源管理状态和控制寄存器   0001 1100
  SPMSC2 = 0x20; //系统电源管理状态和控制寄存器  0011 0000

if (*(unsigned char*)0xFFAF != 0xFF) { /* Test if the device trim value is stored on the specified address */
    MCGTRM = *(unsigned char*)0xFFAF;  /* Initialize MCGTRM register from a non volatile memory */
    MCGSC = *(unsigned char*)0xFFAE;   /* Initialize MCGSC register from a non volatile memory */
  }
  /* MCGC2: BDIV=0,RANGE=1,HGO=1,LP=0,EREFS=1,ERCLKEN=1,EREFSTEN=0 */
  setReg8(MCGC2, 0x36);                /* Set MCGC2 register */
  /* MCGC1: CLKS=2,RDIV=7,IREFS=0,IRCLKEN=1,IREFSTEN=0 */
  setReg8(MCGC1, 0xBA);                /* Set MCGC1 register */
  while(!MCGSC_OSCINIT) {              /* Wait until external reference is stable */
   SRS = 0x55;                         /* Reset watchdog counter write 55, AA */
   SRS = 0xAA;
  }
  while(MCGSC_IREFST) {                /* Wait until external reference is selected */
   SRS = 0x55;                         /* Reset watchdog counter write 55, AA */
   SRS = 0xAA;
  }
  while((MCGSC & 0x0C) != 0x08) {      /* Wait until external clock is selected as a bus clock reference */
   SRS = 0x55;                         /* Reset watchdog counter write 55, AA */
   SRS = 0xAA;
  }
  /* MCGC2: BDIV=0,RANGE=1,HGO=1,LP=1,EREFS=1,ERCLKEN=1,EREFSTEN=0 */
  setReg8(MCGC2, 0x3E);                /* Set MCGC2 register */
  /* MCGC1: CLKS=2,RDIV=2,IREFS=0,IRCLKEN=1,IREFSTEN=0 */
  setReg8(MCGC1, 0x92);                /* Set MCGC1 register */
  /* MCGC3: LOLIE=0,PLLS=1,CME=0,??=0,VDIV=6 */
  setReg8(MCGC3, 0x46);                /* Set MCGC3 register */
  /* MCGC2: LP=0 */
  clrReg8Bits(MCGC2, 0x08);            
  while(!MCGSC_PLLST) {                /* Wait until PLL is selected */
   SRS = 0x55;                         /* Reset watchdog counter write 55, AA */
   SRS = 0xAA;
  }
  while(!MCGSC_LOCK) {                 /* Wait until PLL is locked */
   SRS = 0x55;                         /* Reset watchdog counter write 55, AA */
   SRS = 0xAA;
  }
  /* MCGC1: CLKS=0,RDIV=2,IREFS=0,IRCLKEN=1,IREFSTEN=0 */
  setReg8(MCGC1, 0x12);                /* Set MCGC1 register */
  while((MCGSC & 0x0C) != 0x0C) {      /* Wait until PLL clock is selected as a bus clock reference */
   SRS = 0x55;                         /* Reset watchdog counter write 55, AA */
   SRS = 0xAA;
}



interrupt VectorNumber_Vlvd void LVD_ISR(void)
{
        if((SPMSC1&0x80)==0x80)
        {
            SPMSC1=SPMSC1|0x40;
            W_CS();
            BM_E=0;
        }
}

使用特权

评论回复
9
luofeng2g| | 2015-5-29 08:57 | 只看该作者
本帖最后由 luofeng2g 于 2015-5-29 09:01 编辑
cl234583745 发表于 2015-5-29 07:58
估计是进入低压检测中断时候写eerpom写错了,开机读eeprom导致重启

开机读eeprom重启?。。。。感觉不应该!写eeprom出错,你用debug模拟看看eeprom读出来是什么东西?

使用特权

评论回复
10
zqjqq88| | 2015-5-29 09:14 | 只看该作者
重要数据标志写到backup寄存器不就好了,本身写EEPROM就耗电,你还想断电时候写,非要这样可以加个超级电容,支持写完~

使用特权

评论回复
11
FSL_TICS_Jeremy| | 2015-5-29 09:29 | 只看该作者
非常感谢你的技术问题。我们建议您将此8位单片机的技术问题提交到飞思卡尔的英文论坛。网址是https://community.freescale.com/welcome谢谢。

使用特权

评论回复
12
cl234583745|  楼主 | 2015-5-29 11:02 | 只看该作者
zqjqq88 发表于 2015-5-29 09:14
重要数据标志写到backup寄存器不就好了,本身写EEPROM就耗电,你还想断电时候写,非要这样可以加个超级电容 ...

这个单片机就带低压检测的,就是可以在断电前保存数据。好多都能实现这个啊

使用特权

评论回复
13
cl234583745|  楼主 | 2015-5-29 11:03 | 只看该作者
luofeng2g 发表于 2015-5-29 08:57
开机读eeprom重启?。。。。感觉不应该!写eeprom出错,你用debug模拟看看eeprom读出来是什么东西? ...

用的bdm仿真器,只有断电瞬间才是低压中断,怎么仿真呢。读写eeprom都好使。估计还是低压中断时候没有弄对,上面就是程序

使用特权

评论回复
14
cl234583745|  楼主 | 2015-5-29 11:05 | 只看该作者
FSL_TICS_Jeremy 发表于 2015-5-29 09:29
非常感谢你的技术问题。我们建议您将此8位单片机的技术问题提交到飞思卡尔的英文论坛。网址是https://commu ...

那边是什么啊,反应还慢,也看不懂。你们帮我看看吧。估计就是低压中断的事,断电前没有写进去eeprom或者写错了,重新上电,从而读的时候出错

使用特权

评论回复
15
FSL_TICS_Jeremy| | 2015-5-29 11:48 | 只看该作者
cl234583745 发表于 2015-5-29 11:05
那边是什么啊,反应还慢,也看不懂。你们帮我看看吧。估计就是低压中断的事,断电前没有写进去eeprom或者 ...

英文论坛上就有在线的8位机工程师,提问方法跟这个论坛一样。
,这样解决起来比这个论坛要有效率一点,因为8位机支持工程师目前是请假状态

使用特权

评论回复
16
kaly_liu| | 2015-5-29 12:47 | 只看该作者
你上电的时候,不是也有个低电压过程,开机时候会不会进到低电压检测····

使用特权

评论回复
17
cl234583745|  楼主 | 2015-5-29 14:02 | 只看该作者
本帖最后由 cl234583745 于 2015-5-29 14:04 编辑
kaly_liu 发表于 2015-5-29 12:47
你上电的时候,不是也有个低电压过程,开机时候会不会进到低电压检测···· ...

所以有
if( (SPMSC1&0x80)==0x80)
                {
                        SPMSC1=SPMSC1|0x40;//清除上电产生的置位
                }0x40就是确认是否是真的低压,置位就取消了

使用特权

评论回复
18
cl234583745|  楼主 | 2015-5-29 14:08 | 只看该作者
FSL_TICS_Jeremy 发表于 2015-5-29 11:48
英文论坛上就有在线的8位机工程师,提问方法跟这个论坛一样。
,这样解决起来比这个论坛要有效率一点,因 ...

:'( 和这个论坛不一样啊,都没有找到板块,也没有找到发帖按钮

使用特权

评论回复
19
FSL_TICS_Jeremy| | 2015-5-29 14:48 | 只看该作者
cl234583745 发表于 2015-5-29 14:08
和这个论坛不一样啊,都没有找到板块,也没有找到发帖按钮

请在这个版块提问:
https://community.freescale.com/community/8bit

使用特权

评论回复
20
cl234583745|  楼主 | 2015-5-29 15:20 | 只看该作者
FSL_TICS_Jeremy 发表于 2015-5-29 14:48
请在这个版块提问:
https://community.freescale.com/community/8bit

大神还是等你们把,我英语蛋疼

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

99

主题

644

帖子

1

粉丝