AVR的新看门狗驯狗心得
新的AVR系列(例如,ATMEGA168等)使用增强功能的看门狗(Enhanced Watchdog Timer),与原来的看门狗相比较,除了有相同复位的功能以外,还增加了中断的功能设计时。使用看门狗的中断功能,可以实现从Power Down状态唤醒CPU;另外同时能使中断和复位功能,可以在系统发生错误时,先进入中断状态,保存关键数据到EEPROM,然后在进行系统复位。AVR新的看门狗与旧狗(例如,ATMEGA16等)比较,增加了新的功能的同时脾气也有了不少改变。设计时要摸清它的脾气,以防被狗咬。
下面说明以ATMEGA16和ATMEGA168作一个简单比较为例,简要地说明一下注意要点:
看门狗定时器控制寄存器– WDTCR:
Atmega16:
http://cache.amobbs.com/bbs_upload782111/files_5/armok01105306.JPG
Atmega168:
http://cache.amobbs.com/bbs_upload782111/files_5/armok01105307.JPG
1.A1tmega168由于具有中断功能,所以WDTCR增加了WDIF和WDIE两个额外的bit的功能;
2.增加了WDP3,溢出周期可以有长达8秒;
3.新的看门狗在初始化时,WDT的值不再一定是0。只要MCUSR寄存器上的WDRF置位,WDT也将被强制置位。这时,如果WDE要清零,必须要WDRF先清零。
4.在设计时即使不用WDT,它也可能在无意中被能使,例如在runaway指针和调电情况下。因此即使不用WDT,在初始代码中一定要检查复位标志,如果WDT系统复位发生要采取处理步骤。
最近重新设计一个项目,由原先使用的ATMEGA16更新到ATMEGA168。把原代码转换后,测试结果异常。经过一天多的测试,才发现是新的看门狗惹的祸。以前用ATMEGA16,在初始化后才开始喂狗,可是新的AVR系列(例如ATMEGA168等),系统复位发生时(除上电复位外) ,WDT可能继续运行,并使用最小溢出周期(大约15mS) ,造成了系统不断复位。根据datasheet,在程序开始时的关狗后一切就恢复正常了:
#include <stdint.h>
#include <avr/wdt.h>
uint8_t mcusr_mirror;
void get_mcusr(void) \
__attribute__((naked)) \
__attribute__((section(".init3")));
void get_mcusr(void)
{
mcusr_mirror = MCUSR;
MCUSR = 0;
wdt_disable();
}
5.使用看门狗的中断时,当WDIF和WDIE置位,就会产生中断。进入相应的中断程序后,系统自动WDIF和WDIE清零。下次要使用看门狗的中断时必须重新WDIE置位。
参考文档:
1."AVR132: Using the Enhanced Watchdog Timer";
2."Avr-Libc-User-Manual-1.4.3";
3."Atmega168 Datasheet"。 收藏!
./emotion/em105.gif./emotion/em105.gif 谢谢分享 感谢分享! 谢谢! 顶〉〉〉〉〉〉〉〉〉〉〉〉〉 我用mega88试了还是不行!你用的是哪种状态? 突生想法:软件模拟与实际调试 这方面也应该有所不同。
是否程序初始化就要执行一下关狗指令! 谢谢 路过 顶了收藏谢谢分享 以M48、88、168为代表的单片机增加了很多很诱人的功能。非常爽!
看门狗中断,真的非常好用。 路过 顶了收藏谢谢分享 “以M48、88、168为代表的单片机增加了很多很诱人的功能。非常爽! 看门狗中断,真的非常好用。”
弱问一下看门狗中断程序里一般都做什么?可以是跳转指令吗? 顶 谢谢。 够细致~~~~~~
过来让兄弟们赞一个,(*^__^*) 嘻嘻…… 顶 收藏 谢谢分享!! 有深度,表扬一哈。 谢谢分享 好东西,要顶 mark mark mark,以后用到 谢谢分享!学习了 学习了 新看门狗很好用,特别是做中断用 学习了,谢谢! 学习了 受教 mark sign 做了个小电器想加上看门狗安全点 好東西,謝謝了先! 因为以前一直都在别人的程序上修改
所以到现在才发现
在很多细节上
自己原来一无所知
实在惭愧
废话不多说
继续天天向上 其实初学就要在别人的程序上修改 天天向上 碰到了你的问题,,把熔丝位按出厂设置全部重置了,,就好了,,用高压编程器重置的~~
重置后,,使用内部晶振8M,,分频之后其实是1M,,程序能跑了再慢慢改熔丝,,
出厂熔丝位(mega88)ourdev_510217.doc(文件大小:228K) (原文件名:新建 Microsoft Word 文档.doc) 版主 楼上那个不是我。从没回复过这个。
再问问 楼上的哥们,在哪上的论坛,不会和我用过同一台电脑吧? 能给我提供一个Atmega88的看门狗用作定时中断的程序吗?捣鼓了2天了,一点效果都没有,谢谢了。本人比较菜。 mark 记过 amrk mark! mark 明白了 学习了 学习了 谢谢分享 谢谢分享 MARK mark 都没有弄过看门狗 酷毙了~
最近用1284P和128遇到类似问题,都郁闷死了,现在可是拨开迷雾看到光明了 mark 学习了,mark mark,非常有用 这个学习一下 收藏了。谢谢! mark !!!!!
页:
[1]