基于mini2440的看门狗(裸机)
在由单片机构成的微型计算机系统中,由于单片机的工作常常会受到来自外界电磁场的干扰,造成程序的跑飞,而陷入死循环,程序的正常运行被打断,由单片机控制的系统无法继续工作,会造成整个系统的陷入停滞状态,发生不可预料的后果,所以出于对单片机运行状态进行实时监测的考虑,便产生了一种专门用于监测单片机程序运行状态的芯片,俗称"看门狗",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的看门狗(裸机)的更多相关文章
- 基于S3C2440的嵌入式Linux驱动——看门狗(watchdog)驱动解读
本文将介绍看门狗驱动的实现. 目标平台:TQ2440 CPU:s3c2440 内核版本:2.6.30 1. 看门狗概述 看门狗其实就是一个定时器,当该定时器溢出前必须对看门狗进行"喂狗“,如 ...
- 单片机成长之路(51基础篇) - 026 基于stm89c52之单片机看门狗
基于stc89c52的看门狗,代码如下: main.c #include "stc89c5x_Quick_configuration.h" // 自定义头文件 #include & ...
- mini2440裸机试炼之——看门狗中断和复位操作
看门狗的工作原理: 设本系统程序完整执行一周期的时间是Tp,看门狗的定时周期为Ti,Ti>Tp,在程序正常执行时,定时器就不会溢出,若因为干扰等原因使系统不能在Tp时刻改动定时器的记数值,定时器 ...
- Cubieboard2裸机开发之(五)看门狗操作
前言 说到看门狗,应该不会陌生,看门狗说白了就是一个定时器,但是它有一个非常重要的功能就是复位系统.在A20里,看门狗的操作非常简单,只有两个寄存器,不需要操作时钟相关的东西,系统起来后可以直接使用, ...
- [看门狗]基于Linux的嵌入式系统全程喂狗策略
转自:http://blog.csdn.net/erickhuang1989/article/details/8721548 在嵌入式系统中,为了使系统在异常情况下能自动恢复,一般都会引入看门狗电路. ...
- tiny4412 裸机程序 三、关闭看门狗和调用C程序【转】
本文转载自:http://blog.csdn.net/eshing/article/details/37112779 一.原理说明 上是章中大家可能有会觉得奇怪,CPU不是有看门狗嘛?为什么CPU没有 ...
- 基于mini2440的uboot移植(一)
一.移植环境 虚拟机:ubuntu12.04 uboot源码:u-boot-2008.10.tar.bz2 交叉编译:arm-linux-gcc-4.4.3 简单的记录下编译uboot的过程,要想具体 ...
- STM32F0xx_看门狗(独立+窗口)配置详细过程
Ⅰ.概述 对于看门狗,我觉得做单片机或者嵌入式开发的人员来说并不陌生,今天总结STM32F0看门狗的功能,F0的看门狗有两种:独立和窗口看门狗. 今天提供两种看门狗的软件工程实例,供大家下载. 两种看 ...
- WINCE平台下C#应用程序中使用看门狗
看门狗定时器(WDT,Watch Dog Timer)是单片机的一个组成部分,它实际上是一个计数器,一般给看门狗一个大数,程序开始运行后看门狗开始倒计数.如果程序运行正常,过一段时间CPU应发出指令让 ...
随机推荐
- OS X EI Capitan 10.11.1快速升级方法介绍
公告:本文纯粹是给国内小水管用户而写的,如果你们家网络是100M光线那么就不需要看本文了! 一句话概要本文:在本地山寨从App store服务器上下载安装包的动作! 导读:OS X EI Capita ...
- Android SQLiteDatabase使用总结
SQLiteDatabase数据库操作 1.创建一个继承了类SQLiteOPenHelper类复写相应的方法,和构造函数 2.然后创建一个类,定义一个私有变量(上述类的实例化对象),在构造函数中进行初 ...
- poj1969---找规律
题意:按照s型分别给数编号,给 #include <stdio.h> #include <stdlib.h> int main() { int n; while(scanf(& ...
- powerdesigner for sqlserver的一些实用配置
在实用powerdesigner生成sqlserver 数据表时常常遇到一些问题: 1.数据中定义的字段名称相同生成物理模型时会报错. 2.数据各表之间的主键不能定义一样的名称. 我现在的需求是将数据 ...
- python-面向对象(二)
面向对象总结 面向对象是一种编程方式,此编程方式的实现是基于对 类 和 对象 的使用 类 是一个模板,模板中包装了多个“函数”供使用(可以讲多函数中公用的变量封装到对象中) 对象,根据模板创建的实例( ...
- LCIS(线段树区间合并)
LCIS Time Limit: 6000/2000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total Submi ...
- Python入门-函数的使用到程序的公布安装
Python入门-函数的使用到Python的公布安装 本文主要适合有一定编程经验,至少掌握一门编程语言的人查看. 文中样例大多都是简单到认识英文单词就能看懂的水平,主要讲的是Python的总体使用方法 ...
- oracle11g ora-12514监听程序当前无法识别
环境:win7_x64 ,oracle11g 描写叙述:1第一天没问题,第二天就不能连接: 2:pl sql developer连接工具,自己安装的oracle数据库,又装了client 3:装了or ...
- 关于cocos2d安装时编译不成功(个人心得)
在解压cocos2d执行vs2010.sln时错误发生不能成功生成.遇到这样的错误: 1>c:\program files\microsoft sdks\windows\v7.0a\includ ...
- 用js获取周、月第一天和最后一天(转载)
var getCurrentWeek = function (day) { var days = ["周日", "周一", "周二", &q ...