首页 > 其他分享 >ATtiny88初体验(四):看门狗

ATtiny88初体验(四):看门狗

时间:2023-08-25 15:35:11浏览次数:47  
标签:reset 初体验 WDE 复位 ATtiny88 看门狗 BV watchdog

ATtiny88初体验(四):看门狗

ATtiny88单片机的看门狗使用内部独立的128KHz时钟源,拥有3种工作模式:

  • Interrupt模式:超时产生中断;
  • System Reset模式:超时产生系统复位;
  • Interrupt & System Reset模式:超时产生中断,中断处理完成后产生系统复位。

image.png

当熔丝位 WDTON 被编程时(值为0),将强制将看门狗设为System Reset模式,此时 WDEWDIE 位将被锁定为 10

清除 WDE 位和修改 WDP 需要按照下面的顺序进行操作:

  1. WDCEWDE 位写1,不管 WDE 位先前是什么值,都必须写1。
  2. 在接下来的4个时钟里,修改 WDEWDP 位,清除 WDCE 位,这些必须在一次操作内完成。

注意:

  1. 为了防止程序陷入复位循环,不管有没有用到看门狗,在初始化时,都建议清除 WDRF 标志位和 WDE 位。
  2. 在任何对 WDP 位的修改之前,建议都复位看门狗,否则可能会导致意外的复位。

寄存器

image.png

  • WDRF :看门狗系统复位标志位。
  • BORF :欠压复位标志位。
  • EXTRF :外部复位标志位。
  • PORF :上电复位标志位。

image.png

  • WDIF :看门狗中断标志位。
  • WDIE :看门狗中断使能。
  • WDCE :看门狗修改使能,只有设置此位,才能修改 WDEWDP 位。
  • WDE :看门狗系统复位使能。
    image.png
  • WDP[3:0] :看门狗定时器分频。
    image.png

代码

代码的文件结构如下:

.
├── Makefile
├── inc
│   ├── serial.h
│   └── serial_stdio.h
└── src
    ├── main.c
    ├── serial.c
    └── serial_stdio.c

其中, src/main.c 的内容如下:

#include <stdint.h>
#include <stdio.h>
#include <avr/io.h>
#include <avr/interrupt.h>
#include <avr/wdt.h>
#include <serial_stdio.h>

static void watchdog_setup(void);

int main(void)
{
    cli();
    DDRD = _BV(DDD0);                   // set PD0 as output
    stdio_setup();                      // initialize stdio
    sei();

    if (MCUSR & _BV(WDRF)) {            // check if watchdog reset
        printf("Watchdog Reset.\r\n");
    }
    if (MCUSR & _BV(BORF)) {            // check if brown-out reset
        printf("Brown-out Reset.\r\n");
    }
    if (MCUSR & _BV(EXTRF)) {           // check if external reset
        printf("External Reset.\r\n");
    }
    if (MCUSR & _BV(PORF)) {            // check if power-on reset
        printf("Power-on Reset.\r\n");
    }
    MCUSR = 0;                          // clear reset flags

    watchdog_setup();                   // initialize watchdog as timer

    for (;;);
}

static void watchdog_setup(void)
{
    cli();
    wdt_reset();                        // reset watchdog counter
    MCUSR &= ~_BV(WDRF);                // clear watchdog reset flag
    WDTCSR = _BV(WDCE) | _BV(WDE);      // enable watchdog change
    WDTCSR = _BV(WDIE) | _BV(WDP2) | _BV(WDP0); // interrupt mode, 0.5s
    sei();
}

ISR(WDT_vect)
{
    uint8_t sreg = SREG;
    PIND = _BV(PIND0);                  // toggle PD0
    SREG = sreg;
}

上述代码将看门狗设置为定时器中断模式,定时周期为0.5s,在中断程序里,翻转PD0的输出状态。

参考资料

  1. ATtiny88 Datasheet

标签:reset,初体验,WDE,复位,ATtiny88,看门狗,BV,watchdog
From: https://www.cnblogs.com/chinjinyu/p/17657078.html

相关文章

  • tnn初体验
    tnn-sourcedownload-model......
  • ATtiny88初体验(二):呼吸灯
    ATtiny88初体验(二):呼吸灯前面的“点灯”实验实现了间隔点亮/熄灭LED,但是间隔时间和亮度都没法控制,为了解决这个问题,可以使用ATtiny88的定时器模块。ATtiny88单片机含有2个定时器,定时器0是8bit的,定时器1是16bit的,其中定时器1支持PWM功能。查询手册得知,定时器1的两个通道的输出脚为......
  • ATtiny88初体验(一):点灯
    ATtiny88初体验(一):点灯最近逛淘宝时,发现一块ATtiny88核心板(MH-ETLIVETiny88)用完红包后只剩4块钱了,果断下单,准备好好把玩一番。MH-ETLIVETiny88介绍这块核心板使用的MCU型号是ATtiny88,主要参数如下:资源主要特征Flash8KBSRAM512B频率12MHzEEPROM64B......
  • SpringBoot初体验
    1.何为SpringBoot简单理解:是集成于spring的优点继而简化spring配置SpringBoot简化了整个搭建与开发的过程当然,其通过集成大量的框架使得依赖包的版本冲突,以及引用的不稳定性等问题得到了很好的解决。2.springboot优势(1)可以创建独立的Spring应用程序,并且基于其Maven或Gradle插......
  • 在CentOS小实验看门狗watchdog
    前言继续上文内容https://blog.51cto.com/infrado/7083074,上文说到,看门狗的调用。环境实验环境同上文,继续是ESXi环境,进行一些有趣的实验,以及在x86服务器硬件上,看门狗是如何工作的,以及arm环境的Linux系统看门狗的小实验。watchdog经常被用于重置系统,其实在很多业务中相当实用,但是极......
  • JDK 17 营销初体验 —— 亚毫秒停顿 ZGC 落地实践 | 京东云技术团队
    前言自2014年发布以来,JDK8一直都是相当热门的JDK版本。其原因就是对底层数据结构、JVM性能以及开发体验做了重大升级,得到了开发人员的认可。但距离JDK8发布已经过去了9年,那么这9年的时间,JDK做了哪些升级?是否有新的重大特性值得我们尝试?能否解决一些我们现在苦恼的......
  • JDK 17 营销初体验 —— 亚毫秒停顿 ZGC 落地实践
    前言自2014年发布以来,JDK8一直都是相当热门的JDK版本。其原因就是对底层数据结构、JVM性能以及开发体验做了重大升级,得到了开发人员的认可。但距离JDK8发布已经过去了9年,那么这9年的时间,JDK做了哪些升级?是否有新的重大特性值得我们尝试?能否解决一些我们现在苦恼......
  • 15. 窗口看门狗
    一、什么是窗口看门狗  窗口看门狗(Windowwatchdog,简称WWDG)通常被用来监测由外部干扰或不可预见的逻辑条件造成的应用程序背离正常的运行序列而产生的软件故障。窗口看门狗它是一个能产生系统复位信号和提前唤醒中断的递减计数器,不同的是它们的复位条件不一样。窗口......
  • 【我和openGauss的故事】openGauss初体验
    T[openGauss](javascript:void(0);)2023-07-2917:58发表于四川收录于合集#第六届openGauss技术文章征集初审合格文章62个一:openGauss环境准备1.安装openGauss个人如果要使用openGauss数据库可以在本地进行安装,由于我们使用的大多是windows系统,而openGauss的安装只支持在Linux......
  • 14. 独立看门狗
    一、什么是独立看门狗  独立看门狗(Independentwatchdog,简称IWDG)本质上是一个能产生系统复位的定时器。该定时器是一个12位的递减计数器,当计数器的值减到0的时候,就会产生一个复位信号。如果在计数没减到0之前,重置计数器的值的话,那么就不会产生复位信号,这个动作我们......