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看门狗解析
推荐阅读最新更新时间:2024-03-16 15:29
S3C2440的Keil启动文件S3C2440.s添加中断配置
前言 本文主要描述如何在Keil自带的S3C2440.s文件中添加中断配置及中断地址映射,从而可以在中断产生时跳转到用户代码中的中断服务函数。目前在TQ2440开发板是实测可用。 工程源代码下载 本文所有代码都是截取代码,“…”代表其还有上下文。可根据代码中上下文的残缺部分找到该代码添加的位置。 一,添加中断相关寄存器地址符号映射 因为原始S3C2440.s文件中不含中断相关寄存器的地址,所以需要在开头添加: ... ; * RAM_INTVEC: when set the startup code copies exception vectors ; * from execution address to
[单片机]
s3c2440GPIO程序编写
1.GPIO简介: GPIO(通用输入/输出端口)是相对于芯片而言的,如果在对应的芯片存在GPIO引脚则可以通过读这些引脚来获取引脚的变化(即:引脚的高低电平的变化). s3c2440属于ARM920T,共有GPIO130个,分为A~J这9组 每一组GPIO对应三个寄存器,通过这三个寄存器来控制和访问 GPxCON:GPIO 控制寄存器 GPxDAT:GPIO数据寄存器 GPxUP:上拉电阻使能寄存器 每一个GPIO口又分为好几个GPIO口, GPF0, GPF1, GPF2, GPF3,GPF4,GPF5, GPF6, GPF7, GPG0,GPG1, GPG2, GPG3, GPG4, G
[单片机]
LINUX中s3c2440总线频率、时钟的设置
很多硬件的正常运行需要有总线时钟的支持,比如LCD、I2C等设备。本文分析一下s3c2440的总线时钟,以及在linux中对s3c2440总线时钟频率的相关操作。首先分析硬件s3c2440的总线时钟。 1. s3c2440的FCLK HCLK PCLK: 时钟源首先来自外部晶振12MHz。对于必须运行在200MHz以上的ARM920t内核来说,这个频率实在太低了,不能直接使用,所以首先要通过s3c2440片上的pll硬件电路将12MHz的晶振时钟信号升频,而具体升到多少MHz是通过MPLL控制寄存器来控制的。比如MPLLCON赋值为 0x5c 12 | 2 4 | 1就可以将PLL电路的输出时钟设置为400MHz,也就是将
[单片机]
S3C2440-WDT
当系统运行受到外部干扰或者系统错误,程序有时会出现跑飞,导致整个系统瘫痪。他会设置一段时间,当超出这段 时间,从程序中跳出进入中断处理程序。WatchDog本质上是一种定时器,那么普通定时器拥有的特性它也应该具备,是的当它计时超时时也会引起事件的发生,只是这个事件除了可以是系统中断外,他也可以是一个系统重启信号(Reset Signal)。可以这么说,能发送系统重启信号的定时器我们就叫它WatchDog。看门狗定时器中断是我们不希望看到的,因此我们要想方设法避免它发生。主要的方法就是在中断发生前,重新对看门狗定时器的寄存器进行赋值,使它的定时器重新开始记时,这种方法俗称喂狗。 S3C2440看门狗定时器的功能: 作为常规时钟,
[单片机]
STM8s窗口看门狗
看看窗口看门狗的框图 从图里看出产生复位信号有2个方式: 1 WDGCR寄存器的T6 由1变0,也就是从此寄存器的值从0x40变成0x3F会产生复位信号; 2 当寄存器WDGCR的值大于WDGWR的时候写WDGCR寄存器会产生复位信号; 解释: WDGCR的最高位WDGA是开启看门狗的(WDGA=1开启),当然如果开启了硬件看门狗这个位就没用了。硬件看门狗在OPTION BYTES里设置。 WDGCR的低六位是计数用的从图里可以得出这个计数器的时钟是fCPU时钟分频得来的。这个分频值固定是12288,根据这个可以计算看门狗的延时时间。 WDGWR是窗口寄存器,最高位保留,低六位保存的是窗口值,从图里的逻辑图发现co
[单片机]
s3c2440裸机-内存控制器(三-1、norflash编程之NorFlash原理)
1.flash种类与特性: flash一般分为nand flash和nor flash,各自特性如下表: - Nor NAND XIP(片上执行) yes no 性能(擦除) 非常慢(5s,块太大) 快(3ms) 性能(写) 慢 快 性能(读) 快 快 可靠性 高 一般(容易出现位反转) 可擦除次数 10000 ~ 100000 100000 ~ 1000000 接口 与ram类似,可直接访问任意地址 I/O接口(无地址线,必须串行访问,命令、地址、数据共用8位IO) 易用性 容易 复杂 主要用途 常用于保存代码和关键数据 用于保存数据 价格 高 低 容量 小 大 常用文件系统类型 jffs yaff
[单片机]
基于S3C2440的Linux内核移植和yaffs2文件系统制作--编译内核
1.3.4、编译内核 编译内核需要遵守以下步骤: 1、make dep make dep的意思就是说:如果你使用程序A(比如支持特殊设备),而A需用到B(比如B是A的一 个模块/子程序)。而你在做make config的时候将一个设备的驱动 由内核支持改为module,或取消支持,这将可能影响到B的一个参数的设置,需重新编译B,重新编译或连接A....如果程序数量非常多, 你是很难手工完全做好此工作的。make dep实际上读取配置过程生成的配置文件,来创建对应于配置的依赖关系树,从而决定哪些需要编译而那些不需要编译。所以,你要make dep。 2、make clean 清除一些以前留下的文件,比如以前编译生成的目标文
[单片机]
爱特梅尔将AVR 8位微控制器与LIN系统基础芯片集成为一个小封装的单芯片
最高程度的集成 全球领先的半导体解决方案开发和制造商爱特梅尔公司 (Atmel Corporation) (美国纳斯达克交易代号:ATML) 宣布其ATA6602和ATA6603多芯片模组现已推出市场,进一步扩展了爱特梅尔针对 LIN 应用而设现有的IC 产品系列。这些全新器件特为汽车舒适性应用 (比如车窗升降器、反光镜和座椅调节器) 和动力系统常见的致动器装置而设计。加上体积小巧,ATA6602和ATA6603还适合于传感器节点的应用,如控制面板、空调、下雨/日晒传感器等等。 通过多芯片模组的方式,ATA6602和ATA6603将微控制器 (8位AVR)和LIN系统基础芯片 (LIN SBC) 集成为一个封装 (SiP片内系
[新品]