看门狗(WDOG)

一.看门狗介绍

看门狗(WatchDog)是一种硬件模块,用于防止程序跑飞。正常情况下,程序会定时喂狗;若程序跑飞,则无法继续喂狗,导致超时并触发CPU复位,使程序重新启动。看门狗(WDOG)_第1张图片

二.I.MX6ull Watchdog Timer

        1.功能概述

         I.MX6ull的看门狗定时器(WDOG)提供一种机制来防止系统因意外事件或编程错误而故障。一旦激活,WDOG必须由软件定期服务,否则计时器超时后将触发内部系统复位信号(WDOG_RESET_B_DEB),发送给系统复位控制器(SRC)。看门狗(WDOG)_第2张图片

        2.超时周期与配置

        WDOG支持0.5秒到128秒的超时周期,分辨率为0.5秒。用户通过写入看门狗控制寄存器(WDOG_WCR)中的WT[7:0]字段来设置超时值,并通过设置WDE位启用WDOG。启用后,计数器开始倒计时,达到零时触发复位信号。若在计数器归零前执行服务例程(写入特定值到WDOG_WSR),则可重新加载计数器,避免超时。

        3.服务序列

        正确的服务序列是先写入0x_5555,再写入0x_AAAA到WDOG_WSR。两次写入间可以执行任意指令,但顺序和值必须正确,否则计数器不会重新加载。

三.重点寄存器

  • Watchdog Control Register (WDOGx_WCR):控制WDOG的启用、超时值等。看门狗(WDOG)_第3张图片看门狗(WDOG)_第4张图片
  • Watchdog Service Register (WDOGx_WSR):用于重载计数器。看门狗(WDOG)_第5张图片
  • SRC Control Register (SRC_SCR):控制复位方式,包括冷启动和热启动。看门狗(WDOG)_第6张图片

四.看门狗复位系统

        编程思路包括使能看门狗时钟、设置复位方式、配置定时时间、使能WDOG并进行喂狗服务。如果不喂狗导致超时,将触发复位信号,重启开发板。

代码实现:      ·设置复位信号产生后以冷启动方式复位
                        ·关闭看门狗控制器
                        ·设置看门狗定时器定时时间
                        ·使能看门狗
                        ·进行喂狗服务,重置看门狗定时器
                        ·不喂狗看门

                        ·不喂狗看门狗定时器超时,产生复位信号,复位开发

                               

#include "wdog.h"
void wdog_init(){
    //使能时钟
    CCM->CCGR3 |= (0x3<<16);
    //设置冷启动
    SRC->SCR &= ~(0x1<<0);
    //关闭控制器
    WDOG1->WCR &=~(0x1<<2);
    //定时
    WDOG1->WCR &= ~(0xff<<8);
    WDOG1->WCR |= (0x9<<8);
    //使能
    WDOG1->WCR |= (0x1<<2);
}

void dog_servering(){
    WDOG1->WSR =0x5555;
    uart_printf("dog servering.........\r\n");
    WDOG1->WSR =0xAAAA;
}

void dog_test(){
    wdog_init();
    int i;
    for(i=0;i<10;i++){
        dog_servering();
        uart_printf("%d",i);
        gpt_delay_second(1);
    }
}

你可能感兴趣的:(单片机,嵌入式硬件)