(Kinetis K60)WDOG看门狗测试

来源:互联网 发布:百度seo引流 编辑:程序博客网 时间:2024/06/10 22:36
原文地址:<wbr>K60)WDOG看门狗测试" HREF="http://blog.sina.com.cn/s/blog_51cf75010101jgbj.html" TARGET="_blank">(http://blog.sina.com.cn/s/blog_4ac1eaae0101dab5.html
看门狗是一种计数器。当计数的值溢出时会自动复位MCU。(需要在溢出前“喂狗”,避免复位
看门狗机制可以避免程序跑死(跑死时自动复位)
改变看门狗寄存器参数前必须解锁看门狗。freescalekinetis
看门狗解锁步骤是向看门狗的解锁寄存器连续写入0XC520和0xD928.两次写入不能超过20个时钟周期。

[转载](Kinetis <wbr><wbr>K60)WDOG看门狗测试注:程序需要烧至flash,否则复位后程序丢失。
[转载](Kinetis <wbr><wbr>K60)WDOG看门狗测试



初始化看门狗

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

    WDOG_TOVALH=0x0110;    //看门狗超时时间设置为3s
    WDOG_TOVALL= 0x5E90;

}
[转载](Kinetis <wbr><wbr>K60)WDOG看门狗测试


[转载](Kinetis <wbr><wbr>K60)WDOG看门狗测试

[转载](Kinetis <wbr><wbr>K60)WDOG看门狗测试

[转载](Kinetis <wbr><wbr>K60)WDOG看门狗测试


喂狗
void WDOG_Feed(void)
{
    WDOG_REFRESH= 0xA602;
    WDOG_REFRESH=0xB480;   //喂狗 
}
[转载](Kinetis <wbr><wbr>K60)WDOG看门狗测试

[转载](Kinetis <wbr><wbr>K60)WDOG看门狗测试

关闭和开启看门狗

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
}
[转载](Kinetis <wbr><wbr>K60)WDOG看门狗测试

=================================华丽的代码分割线===============================

所有代码
#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后熄灭
[转载](Kinetis <wbr><wbr>K60)WDOG看门狗测试


0 0
原创粉丝点击