查看: 5348|回复: 5

[其他] MCF52235看门狗的问题

[复制链接]

该用户从未签到

2

主题

10

帖子

0

新手上路

Rank: 1

积分
34
最后登录
1970-1-1
发表于 2010-8-20 11:20:17 | 显示全部楼层 |阅读模式
     这是我写的52235看门狗初始化程序:
    MCF_SCM_CWCR = 0x00;
     MCF_SCM_CWSR = 0x55;
     MCF_SCM_CWSR = 0xaa; 
     MCF_SCM_CWCR |= MCF_SCM_CWCR_CWT(6);
     MCF_SCM_CWCR |= MCF_SCM_CWCR_CWE;
     MCF_INTC0_ICR8=MCF_INTC_ICR_IL(0x7) | MCF_INTC_ICR_IP(0x7);
     MCF_INTC0_IMRL &= ~( MCF_INTC_IMRL_MASK8);
 中断服务程序:
__interrupt__
void WDG_isr(void)
{
 MCF_SCM_CWCR |= (MCF_SCM_CWCR_CWTAVAL|MCF_SCM_CWCR_CWTIC); //这句要不要加?
 MCF_CIM_RCR |= MCF_CIM_RCR_SOFTRST;
}
不喂狗后通过一个指示灯能看到定时复位。但是,一些寄存器的值会回到上电默认状态。RAM区的数据也不是复位前的数值。
如果我希望某些变量复位后值不改变:
1、要不要给变量加关键词?如果加的话该关键词是什么?
2、要不要在编译器里设置,要的话该怎么设置?
3、要不要修改启动文件?
软件复位能否直接跳到main函数或其他的一些地方,而不仅仅是0x00?
因为硬件已经做出来了,很难改变,程序有些时候要跑飞。假如在某个程序可能跑飞的点进行现场保护,跑飞后看门狗复位,能否在中断服务程序正常退出后回到跑飞的那点?希望各位高手们指点一下,谢谢!
我知道答案 目前已有4人回答
回复

使用道具 举报

该用户从未签到

2

主题

10

帖子

0

新手上路

Rank: 1

积分
34
最后登录
1970-1-1
 楼主| 发表于 2010-8-20 12:19:22 | 显示全部楼层

RE:MCF52235看门狗的问题

52235启动:
asm_startmeup:
_asm_startmeup:
    /* Save off reset values of D0 and D1 */
    move.l  d0,d6
    move.l  d1,d7
   
    /* Initialize RAMBAR1: locate SRAM and validate it */
        move.l        #__RAMBAR,d0
    add.l   #0x21,d0
    movec   d0,RAMBAR1
        /* Locate Stack Pointer */
        move.l        #__SP_INIT,sp
    /* Initialize IPSBAR */
        move.l        #__IPSBAR,d0
    add.l   #0x1,d0
        move.l        d0,0x40000000
       
    /* Initialize FLASHBAR */
    move.l  #__FLASHBAR,d0
    cmp.l   #0x00000000,d0
    bne     change_flashbar
    add.l   #0x61,d0
    movec   d0,FLASHBAR
_continue_startup:
        /* Locate Stack Pointer */
        move.l        #__SP_INIT,sp
        /* Initialize the system */
        jsr                _SYSTEM_SysInit

    /* Save off intial D0 and D1 to RAM */
    move.l  d6,d0_reset
    move.l  d7,d1_reset
   
        /* Jump to the main process */
        jsr                _main
       
是否可以这样:在Initialize RAMBAR1之前判断是冷复位还是热复位,热复位的话直接跳main里去运行。
  • TA的每日心情
    难过
    2021-12-15 16:01
  • 签到天数: 1 天

    连续签到: 1 天

    [LV.1]初来乍到

    305

    主题

    4701

    帖子

    0

    中级会员

    Rank: 3Rank: 3

    积分
    377
    最后登录
    2023-8-16
    发表于 2010-8-20 14:31:30 | 显示全部楼层

    RE:MCF52235看门狗的问题

    首先要明确复位的作用。复位以后,RAM中的数据将被清除或者是随机的数据,不管是硬件复位还是软件复位,功能是一样。
    该会员没有填写今日想说内容.

    该用户从未签到

    2

    主题

    10

    帖子

    0

    新手上路

    Rank: 1

    积分
    34
    最后登录
    1970-1-1
     楼主| 发表于 2010-8-20 15:05:24 | 显示全部楼层

    回复:MCF52235看门狗的问题

    回复第 3 楼 安 于2010-08-20 06:31:30发表:
    首先要明确复位的作用。复位以后,RAM中的数据将被清除或者是随机的数据,不管是硬件复位还是软件复位,功能是一样。 

    也就是说要保存复位前的一些重要数据,必须把它们写入flash?复位后再读出来?
    有些单片机热复位后,RAM的值并不会发生变化啊。
  • TA的每日心情
    难过
    2021-12-15 16:01
  • 签到天数: 1 天

    连续签到: 1 天

    [LV.1]初来乍到

    305

    主题

    4701

    帖子

    0

    中级会员

    Rank: 3Rank: 3

    积分
    377
    最后登录
    2023-8-16
    发表于 2010-8-20 20:15:37 | 显示全部楼层

    RE:MCF52235看门狗的问题

    为了安全期间建议存储到flash中。
    该会员没有填写今日想说内容.

    该用户从未签到

    48

    主题

    141

    帖子

    1

    中级会员

    Rank: 3Rank: 3

    积分
    385
    最后登录
    2020-8-7
    发表于 2010-8-24 21:55:08 | 显示全部楼层

    RE:MCF52235看门狗的问题

            你最好先看懂main前的启动文件,你就理解了.RAM的值本身在非上电复位的情况下是不会变,你这个变的原因可能是程序跑飞的时候改变的,也可能是在启动程序里面改的(默认启动文件会清0你程序所使用的RAM空间).
           所谓的跑飞你也没理解,跑飞实际上就是PC指针的值意外改变,整个流程就变了,都已经迷路了你还怎么回去?从跑飞到看门狗复位是有段时间的,如果你程序没做这方面考虑的话什么情况都可能发生.
          复位起始地址在中断向量表里可以设置,不过建议你不要修改.复位后寄存器的值都恢复到默认值.一个正常的程序流程不会有你这种想法
    您需要登录后才可以回帖 注册/登录

    本版积分规则

    关闭

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

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

    GMT+8, 2025-7-20 20:48 , Processed in 0.134048 second(s), 26 queries , MemCache On.

    Powered by Discuz! X3.4

    Copyright © 2001-2024, Tencent Cloud.

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