S3C2416 看门狗
原理:看门狗自己有个硬件计数器,看门狗开启后,计数器就开始计数,当计数为0时触发,触发事件有两个:系统复位和中断,可设置屏蔽。
在计数器计数到0之前,程序可以重新设置计数器中的数值,称之喟狗。计数器的值设置完后,计数器重新用新的数值开始计数。
看门狗开启后,由于应用程序挂了或系统当机了就会使得喟狗操作不再执行,计数器计数到0时就产生中断或复位。

喟狗时间=(((预分频设置值+1)*分频系数)/PCLK) *计数器值
主要设置2个寄存器:WTCON和WTCNT。另外WTDAT里面的值是给看门狗开启后第一次自动赋值给WTCNT的,之后不再从WTDAT赋值给WTCNT,必须手动更新WTCNT的值,此操作为喟狗。

关键驱动代码:
#define IOCTL_WDG_OPEN 0x20 // 打开看门狗 #define IOCTL_WDG_CLOSE 0x21 // 关闭看门狗 #define IOCTL_WDG_FEED 0x22 // 喟狗
BOOL
WDG_IOControl(
DWORD Handle,
DWORD dwIoControlCode,
PBYTE pInBuf,
DWORD nInBufSize,
PBYTE pOutBuf,
DWORD nOutBufSize,
PDWORD pBytesReturned
)
{
switch(dwIoControlCode)
{
case IOCTL_WDG_OPEN: // 打开设置看门狗
v_pWDGregs->WTCON = 0xFF39; //设置看门狗控制寄存器
v_pWDGregs->WTCNT = 0x3FC6;
RETAILMSG(, (TEXT("WDG: Open WatchDog\r\n")));
break;
case IOCTL_WDG_CLOSE: // 关闭看门狗
v_pWDGregs->WTCON = 0x0000;
RETAILMSG(, (TEXT("WDG: Close WatchDog\r\n")));
break;
case IOCTL_WDG_FEED: // 喟狗
v_pWDGregs->WTCNT = 0x3FC6; //Time=(((Prescaler+1)*Division)/PCLK) *WTCNT=(((255+1)*128)/(400M/6)) *16326=8.02455552秒
break;
default:
break;
}
return TRUE;
} // WDG_IOControl
C++应用程序:
#define IOCTL_WDG_OPEN 0x20 // 打开看门狗
#define IOCTL_WDG_CLOSE 0x21 // 关闭看门狗
#define IOCTL_WDG_FEED 0x22 // 喟狗
HANDLE wdgdriver;
void WDGInit()
{
wdgdriver= CreateFile(L,NULL,OPEN_EXISTING,,NULL);
}
void Openwdg()
{
//开启看门狗
DeviceIoControl(wdgdriver,IOCTL_WDG_OPEN,NULL,,NULL,,NULL,NULL);
}
void Feedwdg()
{
//喂狗
DeviceIoControl(wdgdriver,IOCTL_WDG_FEED,NULL,,NULL,,NULL,NULL);
}
void Closewdg()
{
//关闭看门狗
DeviceIoControl(wdgdriver,IOCTL_WDG_CLOSE,NULL,,NULL,,NULL,NULL);
}
C#应用程序:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.Runtime.InteropServices;
using System.Threading;
namespace WatchDog
{
public partial class WDG : Form
{
//几个驱动操作参数
;
const UInt32 GENERIC_READ = 0x80000000;
const UInt32 GENERIC_WRITE = 0x40000000;
;
private IntPtr hPort;
//导入设备管理器API
[DllImport("coredll.dll")]
public static extern IntPtr CreateFile(String lpFileName, UInt32 dwDesiredAccess, UInt32 dwShareMode, IntPtr lpSecurityAttributes, UInt32 dwCreationDisposition, UInt32 dwFlagsAndAttributes, IntPtr hTemplateFile);
[DllImport("coredll.dll")]
public static extern bool DeviceIoControl(IntPtr hDevice, UInt32 dwIoControlCode, UInt32 lpInBuffer, UInt32 nInBufferSize, Byte[] lpOutBuffer, UInt32 nOutBufferSize, UInt32 lpBytesReturned, IntPtr lpOverlapped);
public WDG()
{
InitializeComponent();
//打开看门狗驱动
hPort = CreateFile(, IntPtr.Zero, OPEN_EXISTING, , IntPtr.Zero);
if (hPort == (IntPtr)INVALID_HANDLE_VALUE)
{
MessageBox.Show("Open Driver WDG1: Failed");
return;
}
}
private void OpenWDG_Click(object sender, EventArgs e)
{
DeviceIoControl(hPort, , , , , IntPtr.Zero);//开始看门狗
}
private void CloseWDG_Click(object sender, EventArgs e)
{
DeviceIoControl(hPort, , , , , IntPtr.Zero);//关闭看门狗
}
private void FeedWDG_Click(object sender, EventArgs e)
{
DeviceIoControl(hPort, , , , , IntPtr.Zero);//喟狗
}
}
}
S3C2416 看门狗的更多相关文章
- STM32之看门狗(独立与窗口)
广大的互联网网友们,大家早上中午晚上好,我是某某某..对于狗..看过<忠犬八公>的我.无不深深的被狗的义气与灵气所震撼..我也觉得在所有mcu中用看门狗来形容让系统复位的功能是很恰当的.也 ...
- zigbee学习之路(十一):看门狗
一.前言 今天,我们要通过实验学习和认识一下看门狗的使用,看门狗是为了防止防止程序跑飞的,通过不断的喂狗,使看门狗能持续监管程序的运行状态,当程序跑飞时,能及时把程序拽回来. 二.原理与分析 在CPU ...
- STM32之独立看门狗与窗口看门狗总结
一.独立看门狗 STM32 的独立看门狗由内部专门的 40Khz 低速时钟驱动,即使主时钟发生故障,它也仍然有效. 看门狗的原理:单片机系统在外界的干扰下会出现程序跑飞的现象导致出现死循环,看门狗电路 ...
- [ZigBee] 12、ZigBee之看门狗定时器——饿了就咬人的GOOD DOG
引言:硬件中的看门狗,不是门卫的意思,而是一只很凶的狗!如果你不按时喂它,它就会让系统重启!这反而是我们想要的功能~ 1.看门狗概述 看门狗定时器(WDT,Watch Dog Timer)是单片机的一 ...
- 5、CC2541芯片中级教程-OSAL操作系统(PWM+看门狗)
本文根据一周CC2541笔记汇总得来—— 适合概览和知识快速索引—— 全部链接: 中级教程-OSAL操作系统\OSAL操作系统-实验01 OSAL初探 [插入]SourceInsight-工程建立方法 ...
- 给NIOS II CPU增加看门狗定时器并使用
给NIOS II CPU增加看门狗定时器并使用 配置看门狗定时器: 设置计时溢出时间为1秒 计数器位宽为32位 勾选No Start/Stop control bits 勾选Fixed perio ...
- Cubieboard2裸机开发之(五)看门狗操作
前言 说到看门狗,应该不会陌生,看门狗说白了就是一个定时器,但是它有一个非常重要的功能就是复位系统.在A20里,看门狗的操作非常简单,只有两个寄存器,不需要操作时钟相关的东西,系统起来后可以直接使用, ...
- CC2540开发板学习笔记(八)—— 看门狗
一.功能: 防止程序跑飞,使得系统重新进入工作状态,即一种复位操作吧. 但需要不停地喂狗= =(就是不断的执行某种操作),假如说你的程序跑到了不知道哪里去的错误时,即不会实现喂狗,就会发生复位,程序就 ...
- linux设备驱动归纳总结(十一):写个简单的看门狗驱动【转】
本文转载自:http://blog.chinaunix.net/uid-25014876-id-112879.html linux设备驱动归纳总结(十一):写个简单的看门狗驱动 xxxxxxxxxxx ...
随机推荐
- 【转载】C/C++中extern关键字详解
1 基本解释:extern可以置于变量或者函数前,以标示变量或者函数的定义在别的文件中,提示编译器遇到此变量和函数时在其他模块中寻找其定义.此外extern也可用来进行链接指定. 也就是说extern ...
- 006-Map、Tuple、Zip实战解析
006-Map.Tuple.Zip实战解析 实战代码 Map实战 本身是映射,映射关系在实际中应用非常广泛,比如:配置信息都是Key-Value形式 键值对不存在下边关系 是一个immutable(不 ...
- JAVA中SERIALVERSIONUID的解释
serialVersionUID作用: 序列化时为了保持版本的兼容性,即在版本升级时反序列化仍保持对象的唯一性.有两种生成方式: 一个是默认的1L,比如:private st ...
- Devexpress DateEdit控件的值不反馈到数据源的处理方式。
如果在GridControl中要把编辑的值反馈到数据源,可以用Gridview1.PostEdit()方法. 可是在datalayout中使用就会遇到一些问题:比如说DateEdit控件,在保存数据的 ...
- hibernate开发(1)
1 什么是ORM OR-mapping 是 object relational mapping 对象关系映射,是一种程序技术,用于实现面向对象编程语言里不同类型系统的数据之间的转换.解决了不同数据库s ...
- if 判断中出现逗号
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/ ...
- oracle分析函数与over()(转)
文章参考:http://blog.csdn.net/haiross/article/details/15336313 -- Oracle分析函数入门-- 分析函数是什么? 分析函数是Oracle专门用 ...
- 用tcpdump分析tcp三次握手,四次挥手
1.tcpdump 简介 tcpdump是一个对网络上的数据包进行截获的包分析工具,一般linux系统以命令的形式使用 2.tcp三次握手 建立一个tcp连接会发生下面三个过程: 1.服务器必须准备好 ...
- asp.net中的GridView控件的部分知识点
<PagerTemplate> <br /> <asp:Label ID="lblPage" runat="server" Tex ...
- OC calendar 实践中的那些坑
博客已经迁移到www.chjsun.top 最近想做一个万年历似的东西,因为需要把农历也添加进去,就想直接调用苹果自带的api,这样还方便一些, 搜索了一下,苹果对于时间的处理,还是提供了很多选择给我 ...