原理:看门狗自己有个硬件计数器,看门狗开启后,计数器就开始计数,当计数为0时触发,触发事件有两个:系统复位和中断,可设置屏蔽。

  在计数器计数到0之前,程序可以重新设置计数器中的数值,称之喟狗。计数器的值设置完后,计数器重新用新的数值开始计数。

  看门狗开启后,由于应用程序挂了或系统当机了就会使得喟狗操作不再执行,计数器计数到0时就产生中断或复位。

喟狗时间=(((预分频设置值+1)*分频系数)/PCLK) *计数器值

主要设置2个寄存器:WTCON和WTCNT。另外WTDAT里面的值是给看门狗开启后第一次自动赋值给WTCNT的,之后不再从WTDAT赋值给WTCNT,必须手动更新WTCNT的值,此操作为喟狗。

关键驱动代码:

  1. #define  IOCTL_WDG_OPEN     0x20 // 打开看门狗
  2. #define  IOCTL_WDG_CLOSE    0x21 // 关闭看门狗
  3. #define  IOCTL_WDG_FEED     0x22 // 喟狗
  1. BOOL
  2. WDG_IOControl(
  3. DWORD Handle,
  4. DWORD dwIoControlCode,
  5. PBYTE pInBuf,
  6. DWORD nInBufSize,
  7. PBYTE pOutBuf,
  8. DWORD nOutBufSize,
  9. PDWORD pBytesReturned
  10. )
  11. {
  12. switch(dwIoControlCode)
  13. {
  14. case IOCTL_WDG_OPEN: // 打开设置看门狗
  15. v_pWDGregs->WTCON = 0xFF39; //设置看门狗控制寄存器
  16. v_pWDGregs->WTCNT = 0x3FC6;  
  17. RETAILMSG(, (TEXT("WDG: Open WatchDog\r\n")));
  18. break;
  19.  
  20. case IOCTL_WDG_CLOSE: // 关闭看门狗
  21. v_pWDGregs->WTCON = 0x0000;
  22. RETAILMSG(, (TEXT("WDG: Close WatchDog\r\n")));
  23. break;
  24.  
  25. case IOCTL_WDG_FEED: // 喟狗
  26. v_pWDGregs->WTCNT = 0x3FC6;  //Time=(((Prescaler+1)*Division)/PCLK) *WTCNT=(((255+1)*128)/(400M/6)) *16326=8.02455552秒
  27. break;
  28.  
  29. default:
  30. break;
  31. }
  32.  
  33. return TRUE;
  34. } // WDG_IOControl

附件下载

C++应用程序:

  1. #define IOCTL_WDG_OPEN 0x20 // 打开看门狗
  2. #define IOCTL_WDG_CLOSE   0x21 // 关闭看门狗
  3. #define IOCTL_WDG_FEED 0x22 // 喟狗
  4.  
  5. HANDLE wdgdriver;
  6.  
  7. void WDGInit()
  8. {
  9. wdgdriver= CreateFile(L,NULL,OPEN_EXISTING,,NULL);
  10. }
  11.  
  12. void Openwdg()
  13. {
  14. //开启看门狗
  15. DeviceIoControl(wdgdriver,IOCTL_WDG_OPEN,NULL,,NULL,,NULL,NULL);
  16. }
  17.  
  18. void Feedwdg()
  19. {
  20. //喂狗
  21. DeviceIoControl(wdgdriver,IOCTL_WDG_FEED,NULL,,NULL,,NULL,NULL);
  22. }
  23.  
  24. void Closewdg()
  25. {
  26. //关闭看门狗
  27. DeviceIoControl(wdgdriver,IOCTL_WDG_CLOSE,NULL,,NULL,,NULL,NULL);
  28. }

C#应用程序:

  1. using System;
  2. using System.Collections.Generic;
  3. using System.ComponentModel;
  4. using System.Data;
  5. using System.Drawing;
  6. using System.Text;
  7. using System.Windows.Forms;
  8.  
  9. using System.Runtime.InteropServices;
  10. using System.Threading;
  11.  
  12. namespace WatchDog
  13. {
  14. public partial class WDG : Form
  15. {
  16. //几个驱动操作参数
  17. ;
  18. const UInt32 GENERIC_READ = 0x80000000;
  19. const UInt32 GENERIC_WRITE = 0x40000000;
  20. ;
  21.  
  22. private IntPtr hPort;
  23.  
  24. //导入设备管理器API
  25. [DllImport("coredll.dll")]
  26. public static extern IntPtr CreateFile(String lpFileName, UInt32 dwDesiredAccess, UInt32 dwShareMode, IntPtr lpSecurityAttributes, UInt32 dwCreationDisposition, UInt32 dwFlagsAndAttributes, IntPtr hTemplateFile);
  27. [DllImport("coredll.dll")]
  28. public static extern bool DeviceIoControl(IntPtr hDevice, UInt32 dwIoControlCode, UInt32 lpInBuffer, UInt32 nInBufferSize, Byte[] lpOutBuffer, UInt32 nOutBufferSize, UInt32 lpBytesReturned, IntPtr lpOverlapped);
  29.  
  30. public WDG()
  31. {
  32. InitializeComponent();
  33.  
  34. //打开看门狗驱动
  35. hPort = CreateFile(, IntPtr.Zero, OPEN_EXISTING, , IntPtr.Zero);
  36.  
  37. if (hPort == (IntPtr)INVALID_HANDLE_VALUE)
  38. {
  39. MessageBox.Show("Open Driver WDG1: Failed");
  40. return;
  41. }
  42. }
  43.  
  44. private void OpenWDG_Click(object sender, EventArgs e)
  45. {
  46. DeviceIoControl(hPort, , , , , IntPtr.Zero);//开始看门狗
  47. }
  48.  
  49. private void CloseWDG_Click(object sender, EventArgs e)
  50. {
  51. DeviceIoControl(hPort, , , , , IntPtr.Zero);//关闭看门狗
  52. }
  53.  
  54. private void FeedWDG_Click(object sender, EventArgs e)
  55. {
  56. DeviceIoControl(hPort, , , , , IntPtr.Zero);//喟狗
  57. }
  58.  
  59. }
  60. }

S3C2416 看门狗的更多相关文章

  1. STM32之看门狗(独立与窗口)

    广大的互联网网友们,大家早上中午晚上好,我是某某某..对于狗..看过<忠犬八公>的我.无不深深的被狗的义气与灵气所震撼..我也觉得在所有mcu中用看门狗来形容让系统复位的功能是很恰当的.也 ...

  2. zigbee学习之路(十一):看门狗

    一.前言 今天,我们要通过实验学习和认识一下看门狗的使用,看门狗是为了防止防止程序跑飞的,通过不断的喂狗,使看门狗能持续监管程序的运行状态,当程序跑飞时,能及时把程序拽回来. 二.原理与分析 在CPU ...

  3. STM32之独立看门狗与窗口看门狗总结

    一.独立看门狗 STM32 的独立看门狗由内部专门的 40Khz 低速时钟驱动,即使主时钟发生故障,它也仍然有效. 看门狗的原理:单片机系统在外界的干扰下会出现程序跑飞的现象导致出现死循环,看门狗电路 ...

  4. [ZigBee] 12、ZigBee之看门狗定时器——饿了就咬人的GOOD DOG

    引言:硬件中的看门狗,不是门卫的意思,而是一只很凶的狗!如果你不按时喂它,它就会让系统重启!这反而是我们想要的功能~ 1.看门狗概述 看门狗定时器(WDT,Watch Dog Timer)是单片机的一 ...

  5. 5、CC2541芯片中级教程-OSAL操作系统(PWM+看门狗)

    本文根据一周CC2541笔记汇总得来—— 适合概览和知识快速索引—— 全部链接: 中级教程-OSAL操作系统\OSAL操作系统-实验01 OSAL初探 [插入]SourceInsight-工程建立方法 ...

  6. 给NIOS II CPU增加看门狗定时器并使用

    给NIOS II CPU增加看门狗定时器并使用   配置看门狗定时器: 设置计时溢出时间为1秒 计数器位宽为32位 勾选No Start/Stop control bits 勾选Fixed perio ...

  7. Cubieboard2裸机开发之(五)看门狗操作

    前言 说到看门狗,应该不会陌生,看门狗说白了就是一个定时器,但是它有一个非常重要的功能就是复位系统.在A20里,看门狗的操作非常简单,只有两个寄存器,不需要操作时钟相关的东西,系统起来后可以直接使用, ...

  8. CC2540开发板学习笔记(八)—— 看门狗

    一.功能: 防止程序跑飞,使得系统重新进入工作状态,即一种复位操作吧. 但需要不停地喂狗= =(就是不断的执行某种操作),假如说你的程序跑到了不知道哪里去的错误时,即不会实现喂狗,就会发生复位,程序就 ...

  9. linux设备驱动归纳总结(十一):写个简单的看门狗驱动【转】

    本文转载自:http://blog.chinaunix.net/uid-25014876-id-112879.html linux设备驱动归纳总结(十一):写个简单的看门狗驱动 xxxxxxxxxxx ...

随机推荐

  1. eclipse 导入工程报错Unable to execute dex: Multiple dex files define Landroid/annotation/SuppressLint

    对策: 检查libs 是否有重复加载的.

  2. 作业七:团队项目——Alpha版本冲刺阶段004

    今日进展:我们的扫雷基本界面已经差不多了,准备开始编写内部代码. 今日安排:做好界面,准备开始代码编写.

  3. Cordova+ionic 开发hybird App --- 开发环境搭建

    Cordova 开发hybird App 开发环境搭建 一.一些基础概念: Ant : 简单说来可以这么理解,如果你用记事本写JAVA程序,然后在cmd里输入javac命令编译它,但是有一天你发现每次 ...

  4. post和get请求

    get请求:不安全,参数在url地址中的参数的长度不能大于1024字节 post请求:安全,参数都是凤凰族昂在data里的,参数长度不限

  5. Win7 下IIS(7.5)发布 ASP.NET MVC

    操作系统 Win 7 旗舰版 开发工具 VS2015 使用技术 IIS7.5 + MVC4.0 一 . 在IIS上部署程序后出现错误-当前标识(NT AUTHORITY/NETWORK SERVICE ...

  6. Java 单列模式(Singleton)

    单例模式(Singleton) 定义:保证一个类仅有一个实例,并提供一个访问它的全局访问点. 目的:使得类的一个对象成为系统中的唯一实例. 如何保证一个类只有一个实例并且这个实例易于被访问呢? 我们都 ...

  7. 安全协议系列(三)----CCMP与WPA-PSK

    本节讨论 CCM 在 WiFi 中的实际应用 -- CCMP 协议 根据 RFC 3610,完成 CCMP 报文的加解密,需要提供:分组密钥(K).随机数(Nonce).附加认证数据(AAD),这三个 ...

  8. iOS学习之下拉刷新、上拉加载

    http://blog.csdn.net/mx_xuanxiao/article/details/50595370

  9. Android实战技巧:ViewStub的应用

    在开发应用程序的时候,经常会遇到这样的情况,会在运行时动态根据条件来决定显示哪个View或某个布局.那么最通常的想法就是把可能用到的View都写在上面,先把它们的可见性都设为View.GONE,然后在 ...

  10. layer弹框

    官网http://layer.layui.com/ /!*如果是页面层*/layer.open({ type: 1, content: '传入任意的文本或html' //这里content是一个普通的 ...