搜索
bottom↓
回复: 3

工程样片看门狗复位后就不能关闭看门狗了

[复制链接]

出0入0汤圆

发表于 2012-10-9 21:45:19 | 显示全部楼层 |阅读模式
使用内部rc

测试代码

    uint8_t i;

    //_delay_ms(2); //等待电平稳定
    wdt_enable( WDTO_512MS);
    if (MCUSR & _BV( WDRF))
    {
        //看门狗复位标志位
        wdt_disable();
        //MCUSR = 0;

        DDRD |= (1<<PD7);   //set led out
        while(1)
        {
            _delay_ms(200);
            ledYellowToggle();
            wdt_reset();
        }
    }
    else
    {

    }

    wdt_enable( WDTO_512MS);
    DDRD |= (1<<PD7);   //set led out
    ledYellowOn();
    _delay_ms(100);
    ledYellowOff();
    for (i=0; i<200; i++)
    {
        wdt_reset();
        _delay_ms(10);
    }
    //wdt_disable();

    while(1)
    {
        _delay_ms(50);
        ledYellowToggle();
    }


相关宏定义

/* 看门狗 */
#define WDTO_1MS   0
#define WDTO_2MS   1
#define WDTO_4MS   2
#define WDTO_8MS   3
#define WDTO_16MS   4
#define WDTO_32MS   5
#define WDTO_64MS   6
#define WDTO_128MS   7
#define WDTO_256MS   0x20
#define WDTO_512MS   0x21

#define wdt_enable(value)   \
__asm__ __volatile__ (  \
    "in __tmp_reg__,__SREG__" "\n\t"    \
    "cli" "\n\t"    \
    "wdr" "\n\t"    \
    "sts %0,%1" "\n\t"  \
    "out __SREG__,__tmp_reg__" "\n\t"   \
    "sts %0,%2" "\n\t" \
    : /* no outputs */  \
    : "M" (_SFR_MEM_ADDR(WDTCSR)), \
    "r" (_BV(4) | _BV(3)), \
    "r" ((uint8_t) (_BV(3) | \
       value) ) \
    : "r0"  \
)

#define wdt_disable() \
__asm__ __volatile__ (  \
    "in __tmp_reg__, __SREG__" "\n\t" \
    "cli" "\n\t" \
    "sts %0, %1" "\n\t" \
    "sts %0, __zero_reg__" "\n\t" \
    "out __SREG__,__tmp_reg__" "\n\t" \
    : /* no outputs */ \
    : "M" (_SFR_MEM_ADDR(WDTCSR)), \
    "r" ((uint8_t)(_BV(4) | _BV(3))) \
    : "r0" \
)


如果在看门狗复位之前关闭看门狗是有效的, 但是在看门狗引起复位后就不能关闭看门狗了.

请教LGT,是这样设计的还是工程样片的bug, 后面的已经修正? 使用的是内部RC.

阿莫论坛20周年了!感谢大家的支持与爱护!!

月入3000的是反美的。收入3万是亲美的。收入30万是移民美国的。收入300万是取得绿卡后回国,教唆那些3000来反美的!

出0入0汤圆

 楼主| 发表于 2012-10-9 21:53:53 | 显示全部楼层
解决了需要清复位标志

出0入0汤圆

发表于 2012-10-9 21:55:18 | 显示全部楼层
确定是工程样片的问题么?

出0入0汤圆

 楼主| 发表于 2012-10-9 22:13:27 | 显示全部楼层
不是问题, 以前没用过avr的芯片, 不知道要清复位标志后才能关闭看门狗. 1.6版本的手册上好像也没特别注明,

LGT LGT8F0XABSP 中的代码
        // 判断是否有WatchDog复位发生
        if((MCUSR & (1 << WDRF)))
        {
                // 清WatchDog复位标志
                MCUSR &= ~(1 << WDRF);

                DrvWDT_Close();
               
                Smpl_Msg("\n        WatchDog Reset \n\n", 0, 0);
               
                Smpl_Msg("\n", 0, 0);
                Smpl_MsgFlash(Test_Bar);
                Smpl_Msg("--- WatchDog Test End\n", 0, 0);
                Smpl_MsgFlash(Test_Bar);
                while(1);
        }

回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-4-25 09:31

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

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