单片机
返回首页

基于WINCE6.0+S3C2443的camera驱动

2024-10-18 来源:cnblogs

1 watchdog的作用及工作原理

1.1  watchdog的作用

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


1.2  watchdog的工作原理

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


2 S3C2443的watchdog

2.1  watchdog概述

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


2.2  watchdog的特征


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


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


2.3  watchdog定时器的结构图

f74d0822b91fe9462083cc2b6420b5b9_0_1295680895aeJ8.gif

图1


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

5deeb5dea5d98dc707c6f7509593cc9c_0_12956809008PJJ.gif

图2


2.4  WTDAT和WTCNT寄存器的关系


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

7a3e56ab8166ad36969c275a9af82921_0_1295680907He2F.gif

图3


2.5  调试环境考虑因素


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


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


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


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

5187fe61d765f09b66c3784cd2e446ca_0_1295680914amqf.gif

图4


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


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

437fc5b4f2e502c047bcf4cd8911c353_0_1295680919yd6Z.gif

图5


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


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

18ca9e2831158d97365ef1c058b487bb_0_1295680924Lsr5.gif

图6


3 WINCE中的初始化代码


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

6f542a96c98e393d0dec62b865c04749_0_1295680929xHUu.gif

图7


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

57f85f5d2f28308c9f913bc7e3efa823_0_12956809378r73.gif

图8


上图的喂狗函数RefreshWatchdogTimer在watchdog.c中定义,见图1,而pfnOEMRefreshWatchDog和dwOEMWatchDogPeriod在WINCE600/public/common/oal/inc/bceoemglobal.h定义,见下图:

a88afce29dedad9a351a83838c63e757_0_1295680944Ru7I.gif

图9


上图的pfnRefreshWatchDog,dwWatchDogPeriod和dwWatchDogThreadPriority的定义在在WINCE600/public/common/oal/inc/oemglobal.h中定义,如下

33b81249a3577eab59913d51a38b1d2c_0_1295680948Q58T.gif

图10


进入单片机查看更多内容>>
相关视频
  • RISC-V嵌入式系统开发

  • SOC系统级芯片设计实验

  • 云龙51单片机实训视频教程(王云,字幕版)

  • 2022 Digi-Key KOL 系列: 你见过1GHz主频的单片机吗?Teensy 4.1开发板介绍

  • TI 新一代 C2000™ 微控制器:全方位助力伺服及马达驱动应用

  • MSP430电容触摸技术 - 防水Demo演示

精选电路图
  • 简洁的过零调功器电路设计与分析

  • 永不缺相启动运行的电动机控制电路

  • IGBT模块通过控制门极阻断过电流

  • CCFL的工作原理及电子驱动电路解析

  • 基于M66T旋律发​​生器的电路图解析

  • 基于TDA1554的立体声放大器电路

    相关电子头条文章