在由单片机构成的微型计算机系统中,由于单片机的工作常常会受到来自外界电磁场的干扰,造成程序的跑飞,而陷入死循环,程序的正常运行被打断,由单片机控制的系统无法继续工作,会造成整个系统的陷入停滞状态,发生不可预料的后果,所以出于对单片机运行状态进行实时监测的考虑,便产生了一种专门用于监测单片机程序运行状态的芯片,俗称"看门狗",s3c2440中也集成了看门狗,在受到干扰或者系统错误时是芯片复位。s3c2440的看门狗有两个特点:1、提供16bit的时间间隔的中断。2、128个PCLK的周期复位信号。看门狗的结构:

看门狗定时器频率计算如下:

分频值从0到2的8次方减1,分频系数可选:16、32、64、128。s3c2440看门狗操作需要三个寄存器:WTCON、WTDAT、WTCNT。分别是看门狗控制、限时、计数。在启动时候WTDAT不会自动装载到WTCNT,所以初始化时一定要写定时值到WTCNT中。

测试程序:

测试中我们将分频值设置为249,分频系数设置为16。可计算看门狗时间间隔t_watchdog为0.00008s,设置4秒中断一次的话那么WTDAT的值应设置为50000。每次中断蜂鸣器响起,并用串口显示相关信息。程序如下:

主程序部分:

#define  GLOBAL_CLK 1

#include<string.h>
#include "def.h"
#include "option.h"
#include "2440addr.h"
#include "profile.h"
#include "mmu.h" extern void watchdog_set(unsigned int wtcnt);
extern void feed_watchdog(unsigned int wtcnt);
extern unsigned char watchdog_flag; void delay(int num)
{
int i, j, k;
for(i=0;i<num;i++)
for(j=0;j<1000;j++)
for(k=0;k<1000;k++);
} void Main(void)
{ rGPBCON = (1<<0);//GPIOB[0]设为输出
rGPBDAT = (0<<0);//关闭蜂鸣器 MMU_Init();//地址的重映射
watchdog_set(50000); while (1){
if (1 == watchdog_flag){
rGPBDAT = 1;//打开蜂鸣器
delay(50);
Uart_Printf("\nwatchdog on\n");
} watchdog_flag = 0;
rGPBDAT = 0;//关闭蜂鸣器
}
}

看门狗部分:

#include "2440addr.h"

unsigned char watchdog_flag = 0;//看门狗中断标志
void __irq watchdog_interrupt(void); /*看门狗初始化*/
void watchdog_set(unsigned int wtcnt)
{
/*开始时不自动装载因此需先设置计数值*/
rWTDAT = wtcnt;
rWTCNT = wtcnt; /*使用中断但不复位CPU*/
rWTCON |= (249<<8 | 1<<5 | 1<<2 | 0); rINTSUBMSK &= ~(1<<13);//允许看门狗中断
rINTMSK &= ~(1<<9); /*设置中断向量*/
pISR_WDT_AC97 = (unsigned)watchdog_interrupt;
} /*喂狗操作*/
void feed_watchdog(unsigned int wtcnt)
{
rWTCNT = wtcnt;
} /*看门狗中断服务函数*/
void __irq watchdog_interrupt(void)
{
rSUBSRCPND |= 1<<13;//清除中断
rSRCPND |= 1<<9;
rINTPND |= 1<<9;
watchdog_flag = 1;//设置用户中断标志
}

运行结果:

源代码地址:http://download.csdn.net/detail/a16839678/6272069

基于mini2440的看门狗(裸机)的更多相关文章

  1. 基于S3C2440的嵌入式Linux驱动——看门狗(watchdog)驱动解读

    本文将介绍看门狗驱动的实现. 目标平台:TQ2440 CPU:s3c2440 内核版本:2.6.30 1. 看门狗概述 看门狗其实就是一个定时器,当该定时器溢出前必须对看门狗进行"喂狗“,如 ...

  2. 单片机成长之路(51基础篇) - 026 基于stm89c52之单片机看门狗

    基于stc89c52的看门狗,代码如下: main.c #include "stc89c5x_Quick_configuration.h" // 自定义头文件 #include & ...

  3. mini2440裸机试炼之——看门狗中断和复位操作

    看门狗的工作原理: 设本系统程序完整执行一周期的时间是Tp,看门狗的定时周期为Ti,Ti>Tp,在程序正常执行时,定时器就不会溢出,若因为干扰等原因使系统不能在Tp时刻改动定时器的记数值,定时器 ...

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

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

  5. [看门狗]基于Linux的嵌入式系统全程喂狗策略

    转自:http://blog.csdn.net/erickhuang1989/article/details/8721548 在嵌入式系统中,为了使系统在异常情况下能自动恢复,一般都会引入看门狗电路. ...

  6. tiny4412 裸机程序 三、关闭看门狗和调用C程序【转】

    本文转载自:http://blog.csdn.net/eshing/article/details/37112779 一.原理说明 上是章中大家可能有会觉得奇怪,CPU不是有看门狗嘛?为什么CPU没有 ...

  7. 基于mini2440的uboot移植(一)

    一.移植环境 虚拟机:ubuntu12.04 uboot源码:u-boot-2008.10.tar.bz2 交叉编译:arm-linux-gcc-4.4.3 简单的记录下编译uboot的过程,要想具体 ...

  8. STM32F0xx_看门狗(独立+窗口)配置详细过程

    Ⅰ.概述 对于看门狗,我觉得做单片机或者嵌入式开发的人员来说并不陌生,今天总结STM32F0看门狗的功能,F0的看门狗有两种:独立和窗口看门狗. 今天提供两种看门狗的软件工程实例,供大家下载. 两种看 ...

  9. WINCE平台下C#应用程序中使用看门狗

    看门狗定时器(WDT,Watch Dog Timer)是单片机的一个组成部分,它实际上是一个计数器,一般给看门狗一个大数,程序开始运行后看门狗开始倒计数.如果程序运行正常,过一段时间CPU应发出指令让 ...

随机推荐

  1. 自学HTML5第二节(标签篇---新增标签详解)

    HTML5新增标签: <article> 标签 规定独立的自包含内容.一篇文章应有其自身的意义,应该有可能独立于站点的其余部分对其进行分发. <article> 元素的潜在来源 ...

  2. ParseChat应用源码ios版

    ParseChat是一个完全原生的iPhone应用程序,用于创建实时的.基于文本的Parse聊天室.功能:支持多台设备之间的实时聊天,可动态添加新的聊天室,支持基本配置,可发送和接收音效以及任意大小的 ...

  3. SublimeText3常用快捷键和优秀插件(转载)

    SublimeText是前端的一个神器,以其精简和可DIY而让广大fans疯狂.好吧不吹了直入正题 -_-!! 首先是安装,如果你有什么软件管家的话搜一下就好,一键安装.然后,有钱的土豪就自己买个吧, ...

  4. [LeetCode]题解(python):147-Insertion Sort List

    题目来源: https://leetcode.com/problems/insertion-sort-list/ 题意分析: 用插入排序排序一个链表. 题目思路: 这题没什么好说的,直接用插入排序就行 ...

  5. J2SE知识点摘记(十)

    1.        多线程的同步 2.        同步代码块 即程序中不能有多个线程同时在这两句代码之间执行.(必须两句代码执行完,其他线程才可以公用执行) 同步代码块定义语法如下 ... syn ...

  6. 保存网页为图片——滚动截取IE(WebBrowse)

    对IE进行编程一直觉得是相当可怕的事情,里面的接口.函数.事件之多,解释之乱,需要了解的方方面面知识之博,让我仿佛看到了微软就是造物主,因为它已成功制造了这样的混沌,弄就了宇宙的初始状态…… 近来做个 ...

  7. centos 6.7 perl 5.22 安装DBD 需要使用老的perl版本

    zjzc01:/usr/bin# mv perl.bak perlold zjzc01:/usr/bin# cd zjzc01:/root# cd DBD-Oracle-1.36 zjzc01:/ro ...

  8. 解决android开发webservice的发布与数据库连接的问题

    由于app后续开发的需要,移植了两次webservice和数据库,遇到了不少问题,也花费了很多时间,实践告诉我要学会寻找问题的根源,这样才能在开发中节省时间,尽快解决问题!好,废话不多说,转入正题…… ...

  9. C++赋值运算符、函数调用运算符、下标运算符(“=”、“()”、“[]”)重载

    #include <iostream>#include <assert.h>#include <string.h> using namespace std; cla ...

  10. cocos2d-x 3.0rc2 对于每个包执行情况的重要平台 (超级方便)

    首先,你需要下载三个文件:每间 android-ndk android-sdk ant 下载位置可以随意:由于3.0rc2执行setup.py  自己主动搜索这三个文件 win32cmd以下: (1) ...