历史上的今天
今天是:2025年03月03日(星期一)
2020年03月03日 | AVR看门狗心得
2020-03-03 来源:eefocus
简介:AVR单片机系列(例如,ATMEGA168等)使用增强功能的看门狗(Enhanced Watchdog Timer),与原来的看门狗相比较,除了有相同复位的功能以外,还增加了中断的功能设计时。使用看门狗的中断功能,可以实现从Power Down状态唤醒CPU;另外同时能使中断和复位功能,可以在系统发生错误时,先进入中断状态,保存关键数据到EEPROM,然后在进行系统复位。
AVR单片机系列(例如,ATMEGA168等)使用增强功能的看门狗(Enhanced Watchdog Timer),与原来的看门狗相比较,除了有相同复位的功能以外,还增加了中断的功能设计时。使用看门狗的中断功能,可以实现从Power Down状态唤醒CPU;另外同时能使中断和复位功能,可以在系统发生错误时,先进入中断状态,保存关键数据到EEPROM,然后在进行系统复位。
AVR新的看门狗与旧狗(例如,ATMEGA16等)比较,增加了新的功能的同时脾气也有了不少改变。设计时要摸清它的脾气,以防被狗咬。
下面说明以ATMEGA16和ATMEGA168作一个简单比较为例,简要地说明一下注意要点:
看门狗定时器控制寄存器– WDTCR:

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
#include
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置位。
史海拾趣
|
本帖最后由 paulhyde 于 2014-9-15 09:13 编辑 今天是来到长沙的第二天,参赛队可以在那里进行现场调试,我们的是上午九点到就点半,下午两点到两点半。 早上七点钟起来,吃完早餐后,坐公车到湖南大学~ 提前 九点钟进入场地调试,呵呵~ 迫不 ...… 查看全部问答> |
|
瘋狂的出jffs2_scan_eraseblock錯誤。 我使用的是 8M Nor Flash 但是 沒有分區,請問 分區的作用是什麽? 這個問題最可能的原因是什麽,仰仗各位的經驗了。… 查看全部问答> |
|
请教一下EVC的调试方法 如何使用模拟机,我的模拟机为什么总提示我连不上,我的程序使用我的SDK在目标机上都成功执行了? 我可以在模拟机上单步调试我的程序吗? 我可以在目标机上单步调试我的程序吗?… 查看全部问答> |
|
南京招聘:有嵌入式及硬件基础知识的Delphi BCB程序员,从事监控主站开发 南京招聘:有嵌入式及硬件基础知识的Delphi BCB程序员,从事监控主站开发 要求: 1:熟悉Delphi开发环境。 2:熟练使用SQL-Server编程语言 3:了解一定的硬件知识和 ...… 查看全部问答> |
|
MSP430F1232 只能用TI GANG430 编程器烧写程序,用利尔达 USB仿真器及自己制作的 JTAG 编程器不能 仿真 , 只能用TI GANG430 编程器烧写程序一次而且并没有烧断熔丝,以后再刷就得用BSL.… 查看全部问答> |
|
1 在WWDG工作时 假如窗口值为0x50 是不是只有在计数值在0x50~0x40之间重新刷入计数值才能不引起mcu复位??? 2 还有在RCC配置里有一条RCC_GetFlagStatus(RCC_FLAG_WWDGRST)/检验WWDG复位标志位是否职位是什么意思? 是指MCU本次复位是由W ...… 查看全部问答> |




