第8讲 复位与看门狗定时器

复位是处理器必备的功能之一,ATmega32单片机在复位后,所有的寄存器都被设置为初始值,I/O口被复位成三态,程序从复位向量处开始重新执行。当复位信号结束后,芯片内部的延时计数器被激活,将内部复位的时间延长,使单片机在正常工作之前有一个稳定的供电环境。

5.3.1

复位源

引发ATmega32单片机复位的复位源有以下五种:

1.上电复位(POR)

当电源电压低于上电复位门限电压时,单片机复位。单片机上电后,片内POR电路随即检测供电电压的上升情况,当供电电压达到上电门限电压(V 当RESET引脚被外围电路驱动为低电平时,在上电复位发生后单片机仍将保持在复位状态,直至RESET引脚被驱动为高电平后,复位延迟计数器触发,复位状态将持续保持到计数溢出。RESET引脚由外围电路控制时上电复位时序如图5-15所示。

2.外部复位

外部复位由外加于RESET引脚的低电平产生。当RESET引脚上的低电平持续时间大于最小脉冲宽度时,即触发单片机复位。当RESET引脚为高电平时,复位延迟计数器触发,复位状态将持续保持直到计数溢出。AVR单片机的外部复位电路如图5-16所示,外部复位时序如图5-17所示。

3.掉电检测复位(BOD)

ATmega32单片机具有片内掉电检测BOD电路,用于将单片机的供电电压与固定的触发电平进行比较,以检测工作过程中电压的变化。掉电检测复位功能被使能后,当电源电压低于掉电检测复位门限电压(V 4.看门狗复位

看门狗使能后,当看门狗定时器溢出时会产生一个复位脉冲,此脉冲会引发单片机复位,同时复位延迟计数器被触发,复位状态将持续保持直到延迟计数器溢出。看门狗复位的时序如图5-19所示。

5.JTAG AVR复位

通过JTAG指令,可以使JTAG复位寄存器置1,单片机进入复位状态。ATmega32单片机的复位逻辑如图5-20所示。

5.3.2

复位的相关寄存器

ATmega32单片机的MCUCR寄存器是CPU的控制和状态寄存器,包含了多个复位状态标志位以及与电源管理相关的控制位。

MCUCSR寄存器:CPU的控制和状态寄存器

bit 7-6暂不介绍。

bit 5未用位。

bit 4JTRF:JTAG复位标志位。通过JTAG指令可以使JTAG复位寄存器置1,并引发MCU复位,此时JTRF位置1。上电复位将使该位清零,与其他寄存器不同的是,可以通过对该位写0来清零此位。

bit 3WDRF:看门狗复位标志位。当看门狗复位发生时该位置1,上电复位将使其清零,也可以通过软件对该位写0来清零此位。

bit 2BORF:掉电检测复位标志位。当掉电检测复位发生时该位置1,上电复位将使其清零,也可以通过软件对该位写0来清零此位。

bit 1EXTRF:外部复位标志位。当外部复位发生时该位置1,上电复位将使其清零,也可以通过软件对该位写0来清零此位。

bit 0PORF:上电复位标志位。当上电复位发生时该位置1,只能通过软件对该位写0来清零此位。

注意:当需要判断复位的种类时,可以通过读取MCUCSR寄存器来检查复位的状态,之后应立即用软件对发生复位的标志位写0以清除该位,从而方便下一次检测。

5.4

看门狗定时器

看门狗定时器是单片机的一个独立的组成部分,它实际上是一个计数器,当启用了看门狗定时器后,伴随着程序的运行,看门狗计数器开始计数。一般情况下,如果使能了看门狗,在程序的主循环中需要定时地加入喂狗指令(CLRWDT),让看门狗计数器在没有发生计数溢出之前将其清零并重新开始计数。一旦程序运行出现问题,清零看门狗指令就不能得到及时的执行,导致独立运行的看门狗计数器发生溢出,此溢出事件会强制单片机复位。

5.4.1

看门狗定时器的结构

为了确保安全,ATmega32单片机片内的看门狗电路在硬件上相对于芯片其他部分是独立的,并且由片内专用的1MHz振荡电路提供计数时钟,该时钟配有可编程的预分频器,允许通过设置不同的预分频比来调节看门狗复位的时间间隔。在看门狗启用时,1MHz时钟源也将随之启动。ATmega32单片机看门狗定时器的原理如图5-21所示。

从图5-21中我们可以看出,独立的看门狗振荡器产生的1MHz时钟信号经预分频器后,输出了多种时钟频率用于看门狗电路的计数时钟,具体输出频率由WDTCR寄存器的WDP2:WDP0位决定,计数频率不同会使对应的看门狗溢出时间也不相同。如果没有及时复位看门狗定时器,一旦时间超过复位周期,ATmega32单片机就会复位。这里需要特别说明的是,禁用看门狗定时器或发生溢出复位时定时器也将被复位。

5.4.2

看门狗定时器的控制

看门狗定时器有自己专用的控制寄存器WDTCR,用于看门狗定时器的开启、关闭以及复位周期的设定。

WDTCR寄存器:看门狗定时器控制寄存器

bit 7-5未用位。

bit 4WDTOE:看门狗关闭使能位。该位置1时允许关闭看门狗,一旦WDTOE置1,单片机会在接下来的4个时钟周期之后将其硬件清零。

bit 3WDE:看门狗使能位。该位置1时看门狗定时器使能,清零时看门狗被禁止,而且只有在WDTOE置1时WDE才能被清零。

bit 2-0WDP2:WDP0:看门狗定时器预分频器分频比设定位。不同的预分频值对应着不同的溢出周期,具体设置详见表5-4。

为了防止软件无意之间禁用看门狗定时器,在禁用时必须跟随一个特定的修改序列,关闭看门狗的步骤如下:

1)使用同一条指令对WDTOE和WDE位写1,即使WDE位已经为1也需执行此步骤。

2)在接下来的4个时钟周期之内对WDE位写0,方可禁用看门狗。

软件关闭看门狗可以参考以下代码:

WDTCR|=0x18; //

使用同一条指令对WDTOE 和WDE 位写1

WDTCR=0x00; //

关闭看门狗

 


评论:

AVR单片机基础教程

作者:高显生   共18讲

AVR系列单片机是8位单片机中第一个真正的RISC结构单片机,它采用了大型快速存取寄存器组、快速的单周期指令系统以及单级流水线等诸多先进技术,使得AVR单片机具备了高达1MIPS/MHz的运行处理能力。