看门狗的工作原理:

设本系统程序完整执行一周期的时间是Tp,看门狗的定时周期为Ti,Ti>Tp,在程序正常执行时,定时器就不会溢出,若因为干扰等原因使系统不能在Tp时刻改动定时器的记数值,定时器将在Ti时刻溢出,引发系统复位,使系统得以又一次执行,从而起到监控的作用。

看门狗具有两个功能:

1、 当做常规时钟,能够产生中断;

2、 当看门狗定时器使用,当计数器WTCNT为0时,产生复位;

看门狗的功能方框图:



我程序中PCLK为50MHz,预分频值=77,时钟除数因子选128,

时钟周期t_watchdog=1/[PCLK/(预分频值+1)/时钟除数因子]

=1/[50*1000000/(77+1)/128]=0.0002

t_watchdog表示的是看门狗计数计时器WTCNT每降低1所用的时间,WTCNT又相当于一个节拍的作用,当WTCNT为0时,假设看门狗控制寄存器WTCON[0]开启复位功能,则复位;假设看门狗控制寄存器WTCON[0] 禁止复位,开启中断,则中断操作,并数据(WTDAT)寄存器又一次赋值到计数(WTCNT)寄存器内,循环中断操作(这里的中断就类似RTC的闹钟中断)。

所谓的喂狗:就是使WTCNT在为0之前又一次赋值,不使之发生中断或者复位。

引用赵老师的一段话:

s3c2440的看门狗定时器不仅能够引起系统复位,还能够引起一般的中断,因此s3c2440的看门狗定时器能够当作一般的定时器使用。

看门狗中断结果:

每四秒一个中断,LED点亮并串口提示

看门狗复位结果:

AXD调试执行到看门狗计数器rWTCNT为零时,进入复位,CPU停止工作,也就不产生中断。

复位关闭axd后,u-boot串口初始化提示(没能及时在第一次蜂鸣器响按下按键停止autoboot):

复位关闭axd后,u-boot串口初始化提示(及时在第一次蜂鸣器响按下按键停止autoboot):

这里就是复位到用uboot初始化开发板的时候,可是不明确为什么必需要在第一次蜂鸣器就按下按键才干进到uboot

附:

硬件环境:J-link v8、mini2440、J-link转接板、串口转USB线

软件环境:windows7(32位)、开发板uboot(NandFlash)、J-link驱动(J-Link ARM V4.10i)、SecureCRT、ADS1.2

 

代码块

//====================================================================
// 实现功能:
// 看门狗中断和复位操作
// 当WTCON[0] 开启复位功能; 实现复位
// 当WTCON[0] 禁止复位,WTCON[2]开启中断; 实现中断
// by:梁惠涌
//====================================================================
#include "2440addr.h"
#include "def.h"
#include "2440lib.h" static U8 led_flag=0;
/**************************************************************
看门狗初始化函数
**************************************************************/
void watchdog_init(){
rWTCON=((77<<8)|(1<<5)|(3<<3)|(1<<2)); //预分频值=77;看门狗定时器使能;时钟除数因子=128 ;看门狗中断使能;
//时钟周期t_watchdog=1/[PCLK/(预分频值+1)/时钟除数因子]=1/[50*1000000/(77+1)/128]=0.0002
//t_watchdog表示的是看门狗计数计时器WTCNT每降低1所用的时间
rWTDAT=20000; //WTDAT看门狗数据寄存器,看门狗定时器重载的计数值
rWTCNT=20000; //WTCNT看门狗计数寄存器,看门狗定时器当前计数值
} /**************************************************************
看门狗中断函数
**************************************************************/
void __irq watchdog_isr(){
rSUBSRCPND |=1<<13; //清除次级中断挂起状态
rSRCPND|=0x1<<9; //清除中断挂起状态
rINTPND|=0x1<<9; //中断LED点亮
led_flag++;
Uart_Printf("\n -----看门狗中断,点亮LED %d\n",led_flag);
rGPBCON=0x015400;
switch(led_flag){
case 1: rGPBDAT=0xe<<5 ;break;
case 2: rGPBDAT=0xd<<5 ;break;
case 3: rGPBDAT=0xb<<5 ;break;
case 4: rGPBDAT=0x7<<5 ;break;
}
if(led_flag==4) led_flag=0; rSUBSRCPND &=(~0x1<<13);
rSRCPND &=(~0x1<<9); //开中断
rINTPND &=(~0x1<<9);
} /**************************************************************
看门狗子函数
**************************************************************/
void watchdog(){ watchdog_init(); //初始化看门狗寄存器 //选择是否开启复位
//rWTCON |= (1<<0);//开启复位
rWTCON |= (0<<0);//禁止复位 rINTSUBMSK &=~(1<<13);//开看门狗次级中断
rINTMSK &=~(1<<9); //开看门狗中断
pISR_WDT_AC97=(unsigned)watchdog_isr; while(1){
}
}


mini2440裸机试炼之——看门狗中断和复位操作的更多相关文章

  1. mini2440裸机试炼之—RTC闹钟中断,节拍中断

    版权声明:博客地址:http://blog.csdn.net/muyang_ren.源代码能够在我的github上找看看 https://blog.csdn.net/muyang_ren/articl ...

  2. S5PV210 看门狗定时和复位

    第一节 S5PV210的看门狗定时器S5PV210上的看门狗定时器相当于一个普通的16bit的定时器,它与PWM定时器的区别是看门狗定时器可以产生reset信号而PWM定时器不能,S5PV210看门狗 ...

  3. mini2440裸机试炼之——DMA直接存取 实现Uart(串口)通信

    这个仅仅能作为自己初步了解MDA的开门篇 实现功能: 将字符串数据通过DMA0通道传递给UTXH0,然后在终端 显示.传输数据完后.DMA0产生中断,beep声, LED亮. DMA基本知识 计算机系 ...

  4. mini2440裸机试炼之——Uart与pc端实现文件、字符传输

    1.  波特率(Baud rate)即调制速率,1波特即指每秒传输1个符号. 2.  非FIFO模式,即数据传输不利用FIFO缓存,一个字节一个字节地传输. 3.  位能够用来推断发送缓存器中是否为空 ...

  5. S3C2440看门狗解析

    个PCLK周期的复位信号 也就是说,在某些环境下,看门狗可以当做定时器使用,当他中断的时候并不发生复位,只发生中断,我看看图 看门狗的中断和复位信号是可以依靠wtcon来切断的(看门狗的时钟是无法切断 ...

  6. 基于mini2440的看门狗(裸机)

    在由单片机构成的微型计算机系统中,由于单片机的工作常常会受到来自外界电磁场的干扰,造成程序的跑飞,而陷入死循环,程序的正常运行被打断,由单片机控制的系统无法继续工作,会造成整个系统的陷入停滞状态,发生 ...

  7. linux内核中断之看门狗

    一:内核中断 linux内核中的看门狗中断跟之前的裸板的中断差不多,在编写驱动之前,需要线把内核自带的watch dog模块裁剪掉,要不然会出现错误:在Device Drivers /Watchdog ...

  8. zigbee学习之路(十一):看门狗

    一.前言 今天,我们要通过实验学习和认识一下看门狗的使用,看门狗是为了防止防止程序跑飞的,通过不断的喂狗,使看门狗能持续监管程序的运行状态,当程序跑飞时,能及时把程序拽回来. 二.原理与分析 在CPU ...

  9. STM32之独立看门狗与窗口看门狗总结

    一.独立看门狗 STM32 的独立看门狗由内部专门的 40Khz 低速时钟驱动,即使主时钟发生故障,它也仍然有效. 看门狗的原理:单片机系统在外界的干扰下会出现程序跑飞的现象导致出现死循环,看门狗电路 ...

随机推荐

  1. bzoj1798 维护序列

    Description 老师交给小可可一个维护数列的任务,现在小可可希望你来帮他完成. 有长为N的数列,不妨设为a1,a2,…,aN .有如下三种操作形式: (1)把数列中的一段数全部乘一个值; (2 ...

  2. [转]Android 中fill_parent与wrap_content的区别

        在Android中,对于组件的属性“layout_width”和“layout_height”, 其值总是设置为“wrap_content”或“fill_parent”. 那么,这两个值有什么 ...

  3. memcached添加日志输出

    引子:qa的memcached总是隔一段时间挂掉,导致qa进不去.决定查一下原因,于是添加日志输出,等下次出错便于查阅.定位问题. memcache默认没有日志输出.如果想把memecache服务日志 ...

  4. 参加SAP VT项目有感

    凡事预则立,不预则废. 没有接到录取电话还是有些悲伤的,虽然知道最终被录取的可能性不大,但是之前还是抱着一丝期望的,毕竟是自己的处女面,就这么以失败的结果结束了. 从最开始的投递简历,到后来的电话面试 ...

  5. 如何解决IIS7上传文件大小限制,.NET 上传文件后 找不到目录解决

    IIS7 默认文件上传大小是30M,那么超过30M的文件就无法上传了,那么就需要对IIS的配置文件进行修改. 在实际应用中往往会出现上传文件太大,无法上传的情况,那是因为IIS对上传文件大小有限制,I ...

  6. React-如何在jsx中自动补全标签(vscode)

    痛点:  React库最近的增长趋势很明显, 很多朋友都在选择学习, 很多公司也在选择使用React栈. 但在使用React库写代码的时候, 有一个很让人苦恼的问题, 就是标签在jsx语法中不能自动补 ...

  7. OpenVPN配置网桥模式的一些理解

    说明: 1.网桥的作用是将所有的网卡都能直连主机所在的路由器,可以把它当做一个独立的PC. 2.OpenVPN设置成网桥之后,IP设置成主机所在的IP网段,这样客户端连接进来之后就是所在主机所在的网络 ...

  8. combotree的总结(这个好)

    1:最近有这个需求,就是ext下的combo下拉是树,网上的例子很多,封装的也很好,基本都可以满足下拉框下出现想要的树,但是我的使用情况是比如在用户编辑的时候,要把用户已经选择过的数值自动再赋值到下拉 ...

  9. Spring工具类ToStringBuilder用法简介

    比如说我们需要打印某个方法的User参数对象 package test; /** * * @author zhengtian * @time 2012-6-28 */ public class Use ...

  10. Visual SVN 企业版代码管理平台的建设

    通常需要完整的SVN的代码管理平台系统的搭建,需要安装三个文件,Visual SVN server  , TortoiseSVN, Visual SVN. Visual SVN server  企业版 ...