********************************LoongEmbedded********************************

作者:LoongEmbedded(kandi)

时间:2011.01.22

类别:WINCE OAL开发

********************************LoongEmbedded********************************

1 watchdog的作用及工作原理

1.1watchdog的作用

在嵌入式控制系统运行时收到外部干扰或者系统错误,这时候程序就有可能出现“跑飞”,从而导致整个系统瘫痪。为了防止这种现象的发生,在对系统稳定性要求较高的场合往往要加入看门狗(watchdog)电路或者开启集成在CPU中的watchdog timer(看门狗定时器)Watchdog的作用就是当系统“跑飞”而进入死循环的时候,可以复位系统,让系统继续重新运行。

1.2watchdog的工作原理

watchdog原理上就是一个定时器,定时器timer对时钟进行计数,当定时器溢出时,产生复位信号,使得整个系统复位。其基本原理为:设本系统程序完整运行一周期的时间是tp,看门狗的定时周期为ti,且ti>tp,在程序运行一周期后就修改(再重新设定看门狗的定时周期)定时器的计数值(俗称“喂狗”),只要程序正常运行,定时器就不会溢出。若由于干扰等原因使系统不能在tp时刻修改定时器的计数值,定时器将在ti时刻溢出,引发系统复位,使系统得以重新运行,从而起到监控作用。

2S3C2443watchdog

2.1watchdog概述

S3C2443的看门狗定时器用于控制器因为噪声或系统错误等故障干扰时恢复控制器系统的正常工作,它能作为通用的16位的定时器来请求中断服务。看门狗定时器可以产生128PCLK周期的复位信号

2.2watchdog的特征

用于中断请求的通用的定时器模式。

当定时器计数值减到0(计时时间到),激活128PCLK周期的复位信号。

2.3watchdog定时器的结构图

1

从上图可知PCLK是看门狗定时器的时钟源,PCLK经过一个预分频器后产生合适的看门狗定时器时钟,这个时钟经过MUX再次被分频。这个8位的预分频值和频率分频系数由看门狗定时器控制寄存器(分别由WTCON[15:8]WTCON[4:3]来确定)。其中有效的预分频值的范围是028-1,频率分配系数的值可以是1632164128。我们可以用下面的方程式来计算看门狗定时器频率和每个定时器时钟周期持续时间。

2

2.4WTDATWTCNT寄存器的关系

一旦使能看门狗定时器,看门狗定时器数据寄存器(WTDAT)不能被自动重新装入到看门狗定时器计数寄存器中(WTCNT),因此,在看门狗定时器开始之前,一个初始值必须被写入到看门狗定时器计数寄存器中。

3

2.5调试环境考虑因素

S3C2443debug模式使用Embedded ICE(in-circuit Emulator)时,不能操作看门狗定时器。看门狗定时器能够通过CPU内核信号(DBGACK信号)来判断当前是否工作在debug模式下。一旦CPU内核的DBGACK信号生效,看门狗定时器在计时结束时不会激活复位输出,这样就不能复位系统。

2.6看门狗定时器专用寄存器

看门狗定时器控制(WTCON)寄存器

WTCON寄存器允许用户使能或关闭看门狗定时器,可以从4个不同的时钟源中来选择时钟信号,可以使能和关闭中端,可以使能和关闭看门狗定时器输出。看门狗定时器用于在上电后出现故障的情况下来复位重启S3C2443系统。如果控制器不希望重启,可以关闭看门狗定时器。如果用户把看门狗定时用作普通的定时器,就需要使能中断(WTCON[2])和关闭看门狗定时器(WTCON[5])

4

看门狗定时器数据(WTDAT)寄存器

WTDAT寄存器用于指定超时时间,在初始化看门狗定时器操作的时候(也即第一次初始化时)WTDAT寄存器的内容不能被自动加载到看门狗定时器计数寄存器中(WTCNT),但是使用初始值0x8000可以驱动第一次超时,在这种情况下,WTDAT寄存器的值将自动重新加载到WTCNT寄存器中。

5

看门狗定时器计数(WTCNT)寄存器

WTCNT寄存器包含正常操作时看门狗定时器当前的计数值,注意,在看门狗定时器被开始使能的时候WTDAT寄存器的值不能被自动加载到WTCONT寄存器中,所以我们在使能看门狗定时器前要为WTCONT寄存器初始化一个初始值。

6

3WINCE中的初始化代码

Init.c文件中的OEMInit函数调用OALTimerInit函数,下面是OALTimerInit函数初始化watchdog的代码

7

SMDKInitWatchDogTimer函数在watchdog.c中实现,如下:

8

上图的喂狗函数RefreshWatchdogTimerwatchdog.c中定义,见图1,而pfnOEMRefreshWatchDogdwOEMWatchDogPeriodWINCE600/public/common/oal/inc/bceoemglobal.h定义,见下图:

9

上图的pfnRefreshWatchDogdwWatchDogPerioddwWatchDogThreadPriority的定义在在WINCE600/public/common/oal/inc/oemglobal.h中定义,如下

10

ARM之看门狗

http://blog.csdn.net/genglei1022/archive/2010/05/15/5594634.aspx

嵌入式系统之WATCHDOG(看门狗)概述

http://blog.csdn.net/Chenah/archive/2009/09/22/4575434.aspx

看门狗watchdog的理解

http://blog.csdn.net/dadalan/archive/2008/09/14/2803318.aspx

WINCE6.0+S3C2443下WatchDog学习相关推荐

  1. WINCE6.0+S3C2443下的activesync问题

    ********************************LoongEmbedded******************************** 作者:LoongEmbedded(kandi ...

  2. WINCE6.0+S3C2443下的usb function(功能)驱动

    ********************************LoongEmbedded************************ 作者:LoongEmbedded(kandi) 时间:201 ...

  3. WINCE6.0+S3C2443下ADC在电池驱动应用

    ********************************LoongEmbedded************************ 作者:LoongEmbedded(kandi) 时间:201 ...

  4. WINCE6.0+S3C2443的启动过程---内核启动

    ********************************LoongEmbedded******************************** 作者:LoongEmbedded(kandi ...

  5. WINCE6.0 + S3C2443的启动过程---nboot篇

    WINCE6.0 + S3C2443的启动过程---nboot篇 我们启动WINCE6.0的方式是:nboot+eboot+NK.那么是如何启动WINCE6.0系统映像的呢?首先是nboot把eboo ...

  6. WINCE6.0+S3C2443的启动过程---eboot1

    WINCE6.0+S3C2443的启动过程---eboot 我们知道从nboot把eboot从nandflash中拷贝到内存指定的地址后,就接着在这个地址处开始运行eboot了,之后,nboot的工作 ...

  7. WINCE6.0+S3C2443睡眠和唤醒(sleep and wake up)的实现

    1. 系统进入睡眠状态的过程 1.1 硬件相关电路 我们的产品使用GPF0/EINT0作为系统进入睡眠和从睡眠中唤醒的唤醒源,如下图所示: EINT0作为唤醒源,而EINT0在S3C2443的data ...

  8. 基于WINCE6.0+S3C2443的camera驱动

    ********************************LoongEmbedded************************ 作者:LoongEmbedded(kandi) 时间:201 ...

  9. WINCE6.0+S3C2443的启动过程---eboot2

    1.3系统时钟设置 我的另一篇博客介绍了S3C2443的时钟管理http://blog.csdn.net/chinesedragon2010/archive/2010/09/24/5903553.as ...

最新文章

  1. java 锁竞争_Java多线程中的竞争条件、锁以及同步的概念
  2. 电商网站数据分析的重要性
  3. mysql登录、导入导出、用户权限、事务操作汇总大全
  4. OpenCASCADE:Mac OS X平台使用Xcode构建OCCT
  5. sublime python调试_如何用sublime调试程序
  6. 客户机容易随机出现自动重启、游戏卡问题?不妨优化下BIOS中节能技术!
  7. [C++]动态规划系列之币值最大化
  8. 计算机组成原理感想,学习计算机组成原理的感想
  9. js实现斗地主的算法 验证牌型 找大于上家的牌型
  10. 宝塔面板是干什么的?有哪些典型的功能作用?
  11. ROC曲线下面积为什么越大越好 (TPR FPR)
  12. 20210610 线程数不断飙升问题定位
  13. 老瞎眼 pk 小鲜肉
  14. studio 和mac快捷键
  15. 点线面的意义_论文:点线面在设计中的运用
  16. springboot报错:Could not get a resource from the pool redis.clients.jedis.exceptions.JedisConnection
  17. 删除指定位置的元素(数组)
  18. 分析方法4---多维度拆解分析
  19. appium自带的appium insepect
  20. 电脑如何通过滑动关机?

热门文章

  1. SQL语句中 LIMIT与OFFSET
  2. oracle交流 提问,Oracle常见提问5(转)
  3. linux下 发布qt程序,Linux下发布qt程序
  4. 串口屏与6050_MPU6050温度值的读取与转换及串口通信,请指导
  5. httpservletrequest_了解HttpServletRequest 对象 基本应用
  6. Android 测试教程
  7. python中文件分类_Python中的类是否在不同的文件中?
  8. mysql using filesort_mysql using filesort Using temporary
  9. Python基础数据之列表知识(二)
  10. java 打包apk_Android APK打包流程