S3C2440看门狗解析
S3C2440A的看门狗定时器是用于当其由于噪声和系统错误引起的故障干扰时恢复控制器的工作。它可以被用作普通16位内部定时器来请求中断服务。看门狗定时器产生128个PCLK周期的复位信号
也就是说,在某些环境下,看门狗可以当做定时器使用,当他中断的时候并不发生复位,只发生中断,我看看图
看门狗的中断和复位信号是可以依靠wtcon来切断的(看门狗的时钟是无法切断的)
使用看门狗主要靠这几个寄存器
用来选择时钟源,分频系数,启动看门狗以及看门狗中断和复位的连接
流程基本上就是,第一次对wtcnt赋值之后启动看门狗,看门狗自动减,到达0的时候触发中断,如果连接了复位则触发复位
未连接则触发中断,另外,
看门狗定时器数据寄存器(WTDAT)的值不能被自动重载到定时计数器(WTCNT)中。由于这个理由,必须在看门狗定时器启动前写入一个初始值到看门狗定时器计数寄存器(WTCNT)中
请看具体代码,两种看门狗的使用都有
#include "watchdog.h" u8 wwdgUp = 0; void __irq Wdt_Int(void)
{
rSRCPND |=BIT_WDT_AC97;
rINTPND |=BIT_WDT_AC97;
rSUBSRCPND |= BIT_SUB_WDT; //清除中断标志 // WatchdogInit(0);
wwdgUp = 1;
} //看门狗不连接系统复位
//prescaler 分频系数 8位
//mux 始终选择 0 16 1 32 2 64 3 128
//countValue 计数值
void WWDGInitForTimer(u8 prescaler,u8 mux,u16 countValue)
{ rWTCON &= ~(1<<5);//看门狗禁止 rWTCON &= 0xff00;//清除预分频系数
rWTCON |= prescaler<<8;//设置预分频系数 rWTCON &= ~(0x03<<3);
rWTCON |= mux<<3;//设置时钟选择器 rWTCON |= 1<<2;//使能中断]
rWTCON &= ~(1<<0);//禁止复位
rWTDAT = countValue;
rWTCNT = countValue;//初次使用,必须设置CNT的值 rSRCPND |=BIT_WDT_AC97; //清除标志
rINTPND |=BIT_WDT_AC97;
rSUBSRCPND |= BIT_SUB_WDT; //清除子中断标志 rINTMOD &= ~BIT_WDT_AC97;//设置中断模式为IRQ模式
rINTMSK &= ~(BIT_WDT_AC97); //开中断
rINTSUBMSK &= ~(BIT_SUB_WDT);//开子中断 pISR_WDT_AC97=(unsigned)Wdt_Int;//设置中断程序入口 rWTCON |= (1<<5);//看门狗启动 } //看门狗连接系统复位
//prescaler 分频系数 8位
//mux 始终选择 0 16 1 32 2 64 3 128
//countValue 计数值
void WWDGInitForReset(u8 prescaler,u8 mux,u16 countValue)
{ rWTCON &= ~(1<<5);//看门狗禁止 rWTCON &= 0xff00;//清除预分频系数
rWTCON |= prescaler<<8;//设置预分频系数 rWTCON &= ~(0x03<<3);
rWTCON |= mux<<3;//设置时钟选择器 rWTCON &= ~(1<<2);//禁止中断]
rWTCON |= (1<<0);//使能复位
rWTDAT = countValue;
rWTCNT = countValue;//初次使用,必须设置CNT的值 rWTCON |= (1<<5);//看门狗启动 } void Watchfeed(u16 count) //看门狗喂狗
{
rWTCNT=count; //喂狗
}
#ifndef __WATCHDOG_H
#define __WATCHDOG_H
#include "2440addr.h"
#include "def.h" void WWDGInitForTimer(u8 prescaler,u8 mux,u16 countValue); void WWDGInitForReset(u8 prescaler,u8 mux,u16 countValue); void Watchfeed(u16 count); //看门狗喂狗 extern u8 wwdgUp; #endif
S3C2440看门狗解析的更多相关文章
- 基于S3C2440的嵌入式Linux驱动——看门狗(watchdog)驱动解读
本文将介绍看门狗驱动的实现. 目标平台:TQ2440 CPU:s3c2440 内核版本:2.6.30 1. 看门狗概述 看门狗其实就是一个定时器,当该定时器溢出前必须对看门狗进行"喂狗“,如 ...
- 基于mini2440的看门狗(裸机)
在由单片机构成的微型计算机系统中,由于单片机的工作常常会受到来自外界电磁场的干扰,造成程序的跑飞,而陷入死循环,程序的正常运行被打断,由单片机控制的系统无法继续工作,会造成整个系统的陷入停滞状态,发生 ...
- S3C3440看门狗驱动程序
S3C3440看门狗驱动程序 http://www.cnblogs.com/lfsblack/archive/2012/09/13/2684079.html 看门狗是当CPU进入错误状态后,无法恢复的 ...
- 嵌入式 uboot以及kernel添加看门狗临时记录(个人记录未整理乱)
Uboot_Kernerl_Add_Watch_Dog: U-Boot 2010.06 (Nov 01 2013 - 15:28:44) DRAM: 128 MiBCheck spi flash c ...
- linux设备驱动归纳总结(十一):写个简单的看门狗驱动【转】
本文转载自:http://blog.chinaunix.net/uid-25014876-id-112879.html linux设备驱动归纳总结(十一):写个简单的看门狗驱动 xxxxxxxxxxx ...
- nano100B的看门狗讲解
看门狗定时器的用途是在软件出问题时执行系统复位功能,这可以防止系统无限期地挂起.除此之外,看门狗定时器还支持将CPU 从掉电模式唤醒的功能.看门狗定时器包含一个18 位的自由运行计数器,定时溢出间隔可 ...
- mini2440裸机试炼之——看门狗中断和复位操作
看门狗的工作原理: 设本系统程序完整执行一周期的时间是Tp,看门狗的定时周期为Ti,Ti>Tp,在程序正常执行时,定时器就不会溢出,若因为干扰等原因使系统不能在Tp时刻改动定时器的记数值,定时器 ...
- u-boot分析(五)----I/D cache失效|关闭MMU和cache|关闭看门狗
u-boot分析(五) 上篇博文我们按照210的启动流程,对u-boot启动中的设置异常向量表,设置SVC模式进行了分析,今天我们继续按照u-boot的启动流程对以下内容进行分析. 今天我们会用到的文 ...
- 【Linux开发】linux设备驱动归纳总结(十一):写个简单的看门狗驱动
linux设备驱动归纳总结(十一):写个简单的看门狗驱动 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx ...
随机推荐
- php cookies自动登录
<?php header('Content-type: text/html; charset=utf-8'); error_reporting(0); //自动登陆 if($_COOKIE[&q ...
- Loadrunner之文件的上传(八)
老猪提供: https://mp.weixin.qq.com/s?__biz=MzIwOTMzNDEwNw==&mid=100000013&idx=1&sn=624f5bc74 ...
- 快学Scala-第三章 数组相关操作
知识点: 1.定长数组 Array val nums = new Array[Int](10) //10个整数的数组,所有元素初始化为0 val a = new Array[String](10) / ...
- Dom+2016/4/20
元素.parentNode父节点 offsetParent
- java 接口与实现
Computable.java public interface Computable { int MAX = 46; int f(int x); } China.java public class ...
- Git学习 -- 删除文件
1 从版本库删除文件 git rm <file> git commit -m "xxx" 2 工作区中文件被误删,但版本库中没有删除,可以恢复到工作区 git chec ...
- opencv mat 转灰度图
Imgproc.cvtColor(sshotmat, sshotmatgray, Imgproc.COLOR_BGR2GRAY); 更多参数看 public class Imgproc { priv ...
- 转载 C++学习第9篇---类和类的封装
http://blog.csdn.net/zuheyawen/article/details/7324340
- DLL、lib等链接库文件的使用
由于遇见过多次动态链接库的使用,自己也写过DLL,每次都要费好大劲去配置,现在就简单的总结一下,争取以后少走弯路! 一般都会有三个文件: .h 头文件 .lib 静态链接库 .dll 动态链接库 ...
- 页面加载完毕执行多个JS函数
通常我们需要在打开页面时加载脚本,这些脚本必须在页面加载完毕后才可以执行,因为这时候DOM才完整,可以利用window.onload确保这一点,如:window.onload=firstFunctio ...