[Kinetis] (Kinetis K60)WDOG看门狗测试

[复制链接]
 楼主| 仙女山 发表于 2015-10-10 21:03 | 显示全部楼层 |阅读模式
看门狗是一种计数器。当计数的值溢出时会自动复位MCU。(需要在溢出前“喂狗”,避免复位)
看门狗机制可以避免程序跑死(跑死时自动复位)
改变看门狗寄存器参数前必须解锁看门狗。freescale kinetis看门狗解锁步骤是向看门狗的解锁寄存器连续写入0XC520和0xD928.两次写入不能超过20个时钟周期。


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


初始化看门狗
  1. void WDOG_Init(void)
  2. {
  3.     WDOG_UNLOCK = 0xC520;      
  4.     WDOG_UNLOCK = 0xD928;               //解锁看门狗寄存器(重新写入前必须解锁)两次写入不能超过20个时钟周期

  5.     WDOG_PRESC = 0x0700;  //(7+1)分频

  6.     WDOG_TOVALH = 0x0110;    //看门狗超时时间设置为3s
  7.     WDOG_TOVALL = 0x5E90;
  8. }


 楼主| 仙女山 发表于 2015-10-10 21:04 | 显示全部楼层







喂狗
  1. void WDOG_Feed(void)
  2. {
  3.     WDOG_REFRESH = 0xA602;
  4.     WDOG_REFRESH = 0xB480;   //喂狗
  5. }


 楼主| 仙女山 发表于 2015-10-10 21:04 | 显示全部楼层



5158.jpg (44.14 KB, 下载次数: 0)
下载附件
2015-5-15 14:42 上传




关闭和开启看门狗
  1. void WDOG_Close(void)
  2. {
  3.     WDOG_UNLOCK = 0xC520u;
  4.     WDOG_UNLOCK = 0xD928u;
  5.     WDOG_STCTRLH &= ~0x0001; //关闭看门狗 WDOTEN 0
  6. }
  7. void WDOG_Open(void)
  8. {
  9.     WDOG_UNLOCK = 0xC520;
  10.     WDOG_UNLOCK = 0xD928;
  11.     WDOG_STCTRLH |= 0x0001;  //打开看门狗 WDOTEN 1
  12. }


 楼主| 仙女山 发表于 2015-10-10 21:05 | 显示全部楼层



======================= 华丽的代码分割线===============================
所有代码
  1. #include "LED.h"

  2. void WDOG_Init(void);
  3. void WDOG_Feed(void);
  4. void WDOG_Close(void);
  5. void WDOG_Open(void);

  6. void main(void)
  7. {
  8.     DisableInterrupts;
  9.     WDOG_Init();      //初始化看门狗  
  10.     init_LED();      
  11.     EnableInterrupts;

  12.     WDOG_Open();     //开启看门狗            

  13.     Delay(1500);
  14.     while(1)
  15.     {
  16.         LED1(0);
  17.         LED2(0);
  18.         LED3(0);
  19.         LED4(0);
  20.         //WDOG_Feed();     //喂狗
  21.     }

  22. }

  23. void WDOG_Init(void)
  24. {
  25.     WDOG_UNLOCK = 0xC520;      
  26.     WDOG_UNLOCK = 0xD928;               //解锁看门狗寄存器(重新写入前必须解锁)两次写入不能超过20个时钟周期

  27.     WDOG_PRESC = 0x0700;  //(7+1)分频

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

  30. }

  31. void WDOG_Feed(void)
  32. {
  33.     WDOG_REFRESH = 0xA602;
  34.     WDOG_REFRESH = 0xB480;   //喂狗
  35. }
  36. void WDOG_Close(void)
  37. {
  38.     WDOG_UNLOCK = 0xC520u;
  39.     WDOG_UNLOCK = 0xD928u;
  40.     WDOG_STCTRLH &= ~0x0001; //关闭看门狗 WDOTEN 0
  41. }
  42. void WDOG_Open(void)
  43. {
  44.     WDOG_UNLOCK = 0xC520;
  45.     WDOG_UNLOCK = 0xD928;
  46.     WDOG_STCTRLH |= 0x0001;  //打开看门狗 WDOTEN 1
  47. }


 楼主| 仙女山 发表于 2015-10-10 21:06 | 显示全部楼层

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




(Kinetis K60)WDOG看门狗测试.pdf

519.79 KB, 下载次数: 1

您需要登录后才可以回帖 登录 | 注册

本版积分规则

36

主题

340

帖子

2

粉丝
快速回复 在线客服 返回列表 返回顶部