基于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应发出指令让 ...
随机推荐
- Javascript 学习笔记 无缝滚动
效果 : 鼠标移入图片 停止滚动, 鼠标移出自动滚动 可以调整向左或右方向滚动 <style type="text/css"> * { margin:; padding ...
- subline text 3的模版设置
文件目录在这个地方,然后用St3打开,进行模版修改就行了
- UDP聊天实现(简单版)
两者代码基本一致 关于套接字: 甲方: #include <stdio.h> #include <string.h> #include <netinet/in.h> ...
- Pthon MySQLdb 的安装
说明: 要用python 去连接MySQL我们需要一个驱动程序这个程序就是MySQL-python,所以我们首先就是要下一个对应版本的MySQL-python (注意这个驱动程序只有32位版本的,所以 ...
- 项目中引用ThinkPHP框架
ThinkPHP是一个宽度.兼容且简单的国产的轻量级框架,具有优良的性能,并且非常注重易用性. 那么,我们该如何将ThinkPHP引入自己的项目中,使得自己的项目可以使用这款优良的框架呢? 首先介绍下 ...
- Copy an serializable object deeply
http://www.java2s.com/Tutorial/Java/0100__Class-Definition/Copyanserializableobjectdeeply.htm http:/ ...
- Nginx模块开发入门(转)
前言 Nginx是当前最流行的HTTP Server之一,根据W3Techs的统计,目前世界排名(根据Alexa)前100万的网站中,Nginx的占有率为6.8%.与Apache相比,Nginx在高并 ...
- 使用sphinx索引mysql数据
数据库表如下 mysql> select * from tb_account; +----+-------+------+ | id | name | age | +----+-------+- ...
- 奔五的人,准备学习iOS开发
这些年一直在java/web/android方面折腾,去年最终换成了apple的设备,本想就開始折腾iOS,却始终没能进入状态. 从今天開始,本人宣布:正式进入iOS/xcode 5的编程学习中,也希 ...
- mysql关联更新
update tb_sdd_info a,tb_bnm_evian_info b set a.username=b.username where a.username=b.memberno and ...