zoukankan      html  css  js  c++  java
  • (Kinetis K60)WDOG看门狗测试

    看门狗是一种计数器。当计数的值溢出时会自动复位MCU。(需要在溢出前“喂狗”,避免复位
    看门狗机制可以避免程序跑死(跑死时自动复位)
    改变看门狗寄存器参数前必须解锁看门狗。freescale kinetis
    看门狗解锁步骤是向看门狗的解锁寄存器连续写入0XC520和0xD928.两次写入不能超过20个时钟周期。

    注:程序需要烧至flash,否则复位后程序丢失。

    初始化看门狗

    void WDOG_Init(void)
    {
        WDOG_UNLOCK = 0xC520;       
        WDOG_UNLOCK = 0xD928;               //解锁看门狗寄存器(重新写入前必须解锁)两次写入不能超过20个时钟周期
       
        WDOG_PRESC = 0x0700;  //(7+1)分频
    
        WDOG_TOVALH = 0x0110;    //看门狗超时时间设置为3s
        WDOG_TOVALL = 0x5E90;
    
    }

    喂狗

    void WDOG_Feed(void)
    {
        WDOG_REFRESH = 0xA602;
        WDOG_REFRESH = 0xB480;   //喂狗 
    }

    关闭和开启看门狗

    void WDOG_Close(void)
    {
        WDOG_UNLOCK = 0xC520u;
        WDOG_UNLOCK = 0xD928u; 
        WDOG_STCTRLH &= ~0x0001; //关闭看门狗 WDOTEN 0
    }
    void WDOG_Open(void)
    {
        WDOG_UNLOCK = 0xC520;
        WDOG_UNLOCK = 0xD928; 
        WDOG_STCTRLH |= 0x0001;  //打开看门狗 WDOTEN 1
    }

    所有代码

    #include "LED.h"
    
    void WDOG_Init(void);
    void WDOG_Feed(void);
    void WDOG_Close(void);
    void WDOG_Open(void);
    
    void main(void)
    {
        DisableInterrupts; 
        WDOG_Init();      //初始化看门狗  
        init_LED();       
        EnableInterrupts;
       
        WDOG_Open();     //开启看门狗             
    
        Delay(1500);
        while(1)
        {
            LED1(0);
            LED2(0);
            LED3(0);
            LED4(0);
            //WDOG_Feed();     //喂狗
        }
    
    }
    
    void WDOG_Init(void)
    {
        WDOG_UNLOCK = 0xC520;       
        WDOG_UNLOCK = 0xD928;               //解锁看门狗寄存器(重新写入前必须解锁)两次写入不能超过20个时钟周期
       
        WDOG_PRESC = 0x0700;  //(7+1)分频
    
        WDOG_TOVALH = 0x0110;    //看门狗超时时间设置为3s
        WDOG_TOVALL = 0x5E90;
    
    }
    
    void WDOG_Feed(void)
    {
        WDOG_REFRESH = 0xA602;
        WDOG_REFRESH = 0xB480;   //喂狗 
    }
    void WDOG_Close(void)
    {
        WDOG_UNLOCK = 0xC520u;
        WDOG_UNLOCK = 0xD928u; 
        WDOG_STCTRLH &= ~0x0001; //关闭看门狗 WDOTEN 0
    }
    void WDOG_Open(void)
    {
        WDOG_UNLOCK = 0xC520;
        WDOG_UNLOCK = 0xD928; 
        WDOG_STCTRLH |= 0x0001;  //打开看门狗 WDOTEN 1
    }

    ===========================华丽的代码分割===============================
    注释掉“喂狗后”LED 1.5秒闪烁(初始化LED为低电平)3秒看门狗复位
    喂狗,LED亮1.5后熄灭

  • 相关阅读:
    套接字中的setsockopt接口功能
    memmove()函数介绍
    static 关键字和类的加载顺序
    Navicat 链接mysql 显示 Clinet dose not support authentication protocol request by server ;consider upgrading MySQL client
    maven项目引入依赖之后,jar包没有自动导入报错
    @RequestParam 和@RequestBody 的区别?
    java中 & ^ ~ 的运算
    form表单post请求乱码问题
    struts2+hibernate3.2分页
    AJAX建立和服务器连接,接收服务器技术处理服务器返回的数据
  • 原文地址:https://www.cnblogs.com/hebaichuanyeah/p/3124179.html
Copyright © 2011-2022 走看看