历史上的今天
今天是:2024年12月14日(星期六)
2021年12月14日 | ATmega88 看门狗定时器
2021-12-14 来源:eefocus
看门狗定时器由独立的128 kHz片内振荡器驱动。通过设置看门狗定时器的预分频器可以调节看门狗复位的时间间隔,如 P44Table26 所示。看门狗复位指令 WDR 用来复位看门狗定时器。此外,禁止看门狗定时器或发生复位时它也被复位。复位时间有 10 个选项。如果没有及时复位定时器,一旦时间超过复位周期, ATmega88 就复位,并执行复位向量指向的程序。具体的看门狗复位时序在 P44Table26 有说明。
看门狗定时器还可用来产生中断。这在使用看门狗将系统从掉电状态唤醒是非常有用的。
为了防止无意之间禁止看门狗定时器或改变了复位时间,熔丝位 WDTON 为此提供了 2个不同的保护级别,如 Table 24.所示。请参见P47”改变看门狗定时器配置的时间序列” 。


看门狗定时器控制寄存器-WDTCSR

· Bits 7 – WDIF: 看门狗超时中断标志
当看门狗定时器超时且定时器作为中断使用时,该位置位。执行相应的中断处理程序时 WDIF 由硬件清零。也可通过对标志位写 "1” 对 WDIF 清零。当 SREG 寄存器中的 I 位与 WDIE 也置位时, MCU 执行看门狗超时中断。
· Bit 6 – WDIE: 看门狗超时中断使能
WDIE置"1”时WDE被清零,状态寄存器中的I位置位,看门狗超时中断使能。当看门狗定时器出现超时时执行相应的中断程序。
如果 WDE置位,当超时出现时, WDIE 由硬件自动清零。 这对使用中断时保证看门狗复 位的安全性非常有效。在 WDIE 位被清零后,下一个超时将引发系统复位。为避免看门狗 复位,在每次中断后必须对 WDIE置位。

· Bit 4 – WDCE: 看门狗修改使能
清零 WDE时必须置位 WDCE,否则不能禁止看门狗。一旦置位,硬件将在紧接的 4 个时 钟周期之后将其清零。请参考有关 WDE 的说明来禁止看门狗。修改预分频器也必须置位 WDCE,如 P47“改变看门狗定时器配置的时间序列”所示。
· Bit 3 – WDE: 使能看门狗
WDE为“1” 时,看门狗使能,否则看门狗将被禁止。只有在WDCE为“1”时WDE 才能清零。以下为关闭看门狗的步骤:
1. 在同一个指令内对WDCE 和WDE 写"1",即使WDE 已经为"1"。
2. 在紧接的4 个时钟周期之内对WDE 写"0"。这会禁用看门狗。
工作于安全级别 2 时,即使使用了上述的算法,也无法禁止看门狗定时器。参见 P47“改变看门狗定时器配置的时间序列”所示。
工作于安全级别 1 时, WDE 被 MCUSR 的 WDRF 功能所替换 ,请参见 P41”MCU 状态寄存器 – MCUSR” 中关于 WDRF 的说明。这意味着当 WDRF 置位时 WDE 同时置位。为清零 WDE,在使用上述过程禁用看门狗之前必须清零 WDRF。这一特性保证在出现故障时有多重复位,且在故障解决后可以安全地启动。
Note: 如果在应用中不需要使用看门狗定时器,则在器件初始化时应运行看门狗禁用程序。如果 看门狗被意外使能,如程序跑飞或出现 BOD,器件将会复位,且在结束复位时 WDRF 标 志位置位。这将自动激活看门狗,引发新的看门狗复位。为避免出现这种状况,在初始化 过程中应用程序应将 WDRF 标志位与 WDE控制位清零 。
· Bits 5,2..0 – WDP3..0:看门狗定时器预分频器 3, 2, 1, 与 0
当看门狗定时器使能时, WDP3..0 决定看门狗定时器的预分频器,如 Table26 所示。


下面的例子分别用汇编和 C 实现了关闭 WDT 的操作。在此假定中断处于用户控制之下 ( 比如已经禁止了x全局中断 ) ,因而在执行下面程序时中断不会发生。
汇编代码例程
WDT_off:
; MCUSR中的WDRF 清零
ldi r16, ( 0<< WDRF )
out MCUSR, r16 ; 置位WDCE 与 WDE
ldi r16, (1<< WDCE )|( 1<< WDE ) ; 关闭WDT
ldi r16, (0<< WDE )
out WDTCSR, r16
ret
C 代码例程
void WDT_off(void)
{
/*MCUSR 中的 WDRF清零*/
MCUSR = 0x00
/* 置位WDCE 与 WDE */
WDTCSR = (1<< WDCE) | (1<< WDE);
/* 关闭WDT */
WDTCSR = 0x00;
}
上一篇:ATmega88 中断向量
史海拾趣
|
诸位好: 我是刚学习的菜鸟,有一个问题,用mega48单片机,用双积分方法测量电阻(0.1欧搭配999.9欧) 设置6个数码管,两个按键。 先按一个按键,记录当前阻值R1,存如单片机,前4个数码管显示阻值 ...… 查看全部问答> |
|
要在wince下用DirectShow实现mp3的播放?但是没有mp3的filter,于是从xp里找了一个filter,请问该如何加载,能否给个实例?谢谢了… 查看全部问答> |
|
我现在用的是一快MC37I的GSM模块. 我通过串口操作如下: AT+CSQ +CSQ: 28,99 //确认有信号 AT+CREG=1 OK AT+COPS? +COPS: 0,0,\"CHINA MOBILE\" //确认已注册上中国移动 ATD15989500805 //拨打电话 NO CARRIER ...… 查看全部问答> |
|
网上到处都是例程里的多块写dma方式. 我就是想发一个cmd25指令连续写入N个扇区,这个应该可以实现的.但是现在写入前16个没问题,也看到确实写入了. 但到第17个扇区就报crc错误,咋回事呢?初步分析是sd卡缓冲区写满之后出问题了,这个该怎么操作呢?另 ...… 查看全部问答> |
|
msp430中usart模块的问题USART模块中 异步通信寄存器和同步通信寄存器中有些东西都一样么?比如IAR中里面用的 // Put state machine in reset UCB1CTL1 |= UCSWRST; 而我在头文件中查到: // UCAxCTL1 UART-Mode Co ...… 查看全部问答> |
|
TI资料:负载开关:什么是负载开关,为什么需要负载开关,如何选择正 负载开关:什么是负载开关,为什么需要负载开关,如何选择正 下载: 负载开关:什么是负载开关,为什么需要负载开关,如何选择正 ? … 查看全部问答> |
|
随着国防技术的发展,根据任务需求,越来越多的军用武器需要随时变更工作地点。为了保证这些军用武器的机动性能,往往以载车为运输载体,如火箭炮这样的大型武器就被安装在载车上。载车到达目的地后,借助平台快速将武器架设调至水平而后工作,工作 ...… 查看全部问答> |




