[高等教育]关键词jk.doc_第1页
[高等教育]关键词jk.doc_第2页
[高等教育]关键词jk.doc_第3页
[高等教育]关键词jk.doc_第4页
[高等教育]关键词jk.doc_第5页
已阅读5页,还剩3页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

关键词:看门狗; DS1232; 接口;1. DS1232的结构及特点1.1 引脚功能及内部结构DS1232是由美国DALLAS公司生产的微处理器监控电路,采用8脚DIP封装,如图1所示。各引脚功能如下:PBRST:按钮复位输入端;TD:看门狗定时器延时设置端;TOL:5或10电压监测选择端;GND:电源地;RST:高电平有效复位输出端;RST:低电平有效复位输出端;ST:周期输入端;Vcc:电源。1.2 DS1232的内部结构 DS1232的内部结构框图如图2所示。1.3 主要特点DS1232具有如下特点:具有8脚DIP封装和16脚SOIC贴片封装两种形式,可以满足不同设计要求;在微处理器失控状态下可以停止和重新启动微处理器;微处理器掉电或电源电压瞬变时可自动复位微处理器;精确的5或10电源供电监视; 不需要分立元件;适应温度范围宽,4085。2. DS1232的功能2.1 电源电压监视DS1232能够实时监测向微处理器供电的电源电压,当电源电压VCC低于预置值时,DS1232的第5脚和第6脚输出互补复位信号RST和RST。预置值通过第3脚(TOL)来设定;当TOL接地时,RST 和RST信号在电源电压跌落至4.75V以下时产生;当TOL与VCC相连时,只有当VCC跌落至4.5V以下时才产生 RST和RST信号。当电源恢复正常后, RST和RST信号至少保持250ms,以保证微处理器的正常复位。2.2 按键复位在单片机产品中,最简单的按键复位电路是由电阻和电容构成的,如果系统扩展存在需要和微处理器同时复位的其他接口芯片,这种简单的阻容复位电路往往不能满足整体复位的要求。DS1232提供了可直接连接复位按键的输入端PBRST(第1脚),在该引脚上输入低电平信号,将在RST和RST端输出至少250ms的复位信号,具体电路如图3所示。2.3 看门狗定时器在DS1232内部集成有看门狗定时器,当DS1232的ST端在设置的周期时间内没有有效信号到来时,DS1232的RST和RST端将产生复位信号以强迫微处理器复位。这一功能对于防止由于干扰等原因造成的微处理器死机是非常有效的。看门狗定时器的定时时间由DS1232的TD引脚确定,详见表1。看门狗定时器的周期输入信号ST可以从微处理器的地址信号、数据信号或控制信号中获得,不论哪种信号都必须能够周期性的访问DS1232,对于MCS51系列单片机,推荐使用ALE信号。3. DS1232典型应用电路DS1232与MCS51系列单片机的典型接口电路如图3所示。4. 使用注意事项DS1232虽然具有与微处理器接口简单的特点,但在使用中也应注意以下几点:(1)ST除了可以和MCS51单片机的ALE相连接外,也可以和其它信号线相连,但是必须保证在看门狗定时器计数溢出前复位看门狗定时器。(2)DS1232内部第6引脚没有上拉电阻,如果单片机的其它外围接口芯片需要用到低电平复位信号,那么,必须在该引脚上外接一个上拉电阻,如图3中的R。(3)如果用仿真器调试用户目标板,并且ST端与单片机的ALE相连,那么最好先不要插上DS1232芯片,因为在仿真器与PC机相连单步运行程序时,单片机的ALE信号并不是连续供给的,容易造成非正常复位,影响调试工作的进行。看门狗分硬件看门狗和软件看门狗。硬件看门狗是利用一个定时器电路,其定时输出连接到电路的复位端,程序在一定时间范围内对定时器清零(俗称“喂狗”),因此程序正常工作时,定时器总不能溢出,也就不能产生复位信号。如果程序出现故障,不在定时周期内复位看门狗,就使得看门狗定时器溢出产生复位信号并重启系统。软件看门狗原理上一样,只是将硬件电路上的定时器用处理器的内部定时器代替,这样可以简化硬件电路设计,但在可靠性方面不如硬件定时器,比如系统内部定时器自身发生故障就无法检测到。当然也有通过双定时器相互监视,这不仅加大系统开销,也不能解决全部问题,比如中断系统故障导致定时器中断失效。看门狗本身不是用来解决系统出现的问题,在调试过程中发现的故障应该要查改设计本身的错误。加入看门狗目的是对一些程序潜在错误和恶劣环境干扰等因素导致系统死机而在无人干预情况下自动恢复系统正常工作状态。看门狗也不能完全避免故障造成的损失,毕竟从发现故障到系统复位恢复正常这段时间内怠工。同时一些系统也需要复位前保护现场数据,重启后恢复现场数据,这可能也需要一笔软硬件的开销。图1:(a)多任务系统看门狗示意图;(b) 相应的看门狗复位逻辑图。在单任务系统中看门狗工作原理如上所述,容易实现。在多任务系统中情况稍为复杂。假如每个任务都像单任务系统那么做,如图1(a)所示,只要有一个任务正常工作并定期“喂狗”,看门狗定时器就不会溢出。除非所有的任务都故障,才能使得看门狗定时器溢出而复位,如图1(b)。而往往我们需要的是只要有一个任务故障,系统就要求复位。或者选择几个关键的任务接受监视,只要一个任务出问题系统就要求复位,如图2(a)所示,相应的看门狗复位逻辑如图2(b)所示。在多任务系统中通过创建一个监视任务TaskMonitor,它的优先级高于被监视的任务群Task1、Task2.Taskn。TaskMonitor在Task1Taskn正常工作情况下,一定时间内对硬件看门狗定时器清零。如果被监视任务群有一个Task_x出现故障,TaskMonitor就不对看门狗定时器清零,也就达到被监视任务出现故障时系统自动重启的目的。另外任务TaskMonitor自身出故障时,也不能及时对看门狗定时器清零,看门狗也能自动复位重启。接下来需要解决一个问题是:监视任务如何有效监视被监视的任务群。图2:(a) 多任务系统看门狗示意图;(b) 正确的看门狗复位逻辑图。在TaskMonitor中定义一组结构体来模拟看门狗定时器组,typedef structUINT32 CurCnt, LastCnt;BOOL RunState;int taskID; STRUCT_WATCH_DOG;该结构体包括被监视的任务号taskID,用来模拟“喂狗”的变量CurCnt、LastCnt(具体含义见下文),看门狗状态标志RunState用来控制当前任务是否接受监视。被监视的任务Task1Taskn调用自定义函数CreateWatchDog(int taskid)来创建看门狗,被监视任务一段时间内要求“喂狗”,调用ResetWatchDog(int taskid),这个“喂狗”动作实质就是对看门狗定时器结构体中的变量CurCnt加1操作。TaskMonitor大部分时间处于延时状态,假设硬件看门狗定时是2秒,监视任务可以延时1.5秒,接着对创建的看门狗定时器组一一检验,延时前保存CurCnt的当前值到LastCnt,延时后比较CurCnt与LastCnt是否相等,都不相等系统才是正常的。需要注意的是CurCnt和LastCnt数据字节数太小,而“喂狗”过于频繁,可能出现CurCnt加1操作达到一个循环而与LastCnt相等。如果有任意一组的CurCnt等于LastCnt,认为对应接受监视的任务没有“喂狗”动作,也就检测到该任务出现故障需要重启,这时候TaskMonitor不对硬件看门狗定时器清零,或者延时很长的时间,比如10秒,足以使得系统重启。反之,系统正常,Task1Taskn定期对TaskMonitor“喂狗”,TaskMonitor又定期对硬件看门狗“喂狗”,系统就得不到复位。还有一点,被监视任务可以通过调用PauseWatchDog(int taskid)来取消对应的看门狗,实际上就是对STRUCT_WATCH_DOG结构体中的RunState操作,该标志体现看门狗有效与否。这种方式可监视的最大任务数由STRUCT_WATCH_DOG结构数据的个数决定。程序中应该有一个变量记录当前已创建的看门狗数,判断被监视任务Task1Taskn是否“喂狗”只需比较CurCnt与LastCnt的值n次。图3:系统复位逻辑图。硬件看门狗监视TaskMonitor任务,TaskMonitor任务又监视其他的被监视任务Task1Taskn,形成这样一种链条。这种方式系统的故障图表示如图3所示。被监视任务Task1Taskn及TaskMonitor都是或的关系,因此被监视的任一任务发生故障,硬件电路看门狗就能复位。为实现多任务系统的看门狗监视功能额外增加了TaskMonitor任务,这个任务占用执行时间多少也是一个重要问题。假设TaskMonitor任务一个监视周期延时1.5秒,此外需要执行保存当前计数值,判断是否“喂狗”等语句,它的CPU占用时间是很小的。用一个具体的试验证实,使用50M工作频率的CPU(S3C4510),移植vxWorks操作系统,cache不使能条件下监视10个任务,每个监视周期占用220240微秒。可见该任务绝大多数时间都处于任务延时状态。被监视任务可能有获取消息、等待一个信号量等的语句,往往这个消息、信号量的等待是无限期的等待。这就需要将这类语句作一些修改。比如在vxWorks中将一次无期限的获取信号量操作semTake(semID, WAIT_FOREVER); / WAIT_FOREVER为无限时间等待分解为doResetWatchDog; / “喂狗”操作while(semTake(semID, sysClkRateGet( ) != OK); / 1s内的等待信号量操作多次的时间范围内的获取信号量操作,这样才能保证及时“喂狗”。另外需要注意的是系统中是否有的任务优先级比TaskMonitor高并且长时间处于执行状态,TaskMonitor长时间得不到调度,使得看门狗错误复位。良好的任务划分,配置是不应该出现这种高优先级任务长期执行状况的。软件看门狗(WATCH DOG)也叫做程序运行监视系统。当程序运行受到干扰,程序飞到一个临时构成的死循环中时,系统将完全瘫痪,软件陷阱也无能为力了,这时就需要人工复位或硬件复位;如果没有人工操作和硬件复位系统,我们采用软件看门狗技术同样也能使系统复位,恢复正常。这种程序监视系统就好比主人家养了一条狗,主人总要定时喂狗,如果主人忘了喂狗(程序受到干扰,跑飞掉了),狗就会大叫起来,提醒主人(程序重新运行)。软件看门狗的特性如下:1、本身独立工作,基本上不依赖CPU;2、CPU在一个固定的时间间隔内和系统打一次交道(喂一次狗),以表明系统目前工作正常。3、当CPU陷入死循环后,能及时发觉并使系统复位。 当系统陷入死循环后,怎样才能从死循环中跳出来呢?只有比这个死循环更高级的中断程序才能夺走CPU的控制权。为此,可以用一个定时器来做软件看门狗,因为定时器在运行时不占用CPU资源,它是独立工作的,所以,将它的溢出中断设定为最高优先级中断,系统的其它中断均设为比它低级的中断优先级。然后根据看门狗的定时时间来设定定时器初值。软件看门狗启动后,系统工作程序必须经常“喂它”,且每两次之间的间隔不得大于定时器的定时时间。程序中只要设立一个设置定时器初值的子程序,喂它时只要调用这个子程序即可。 当程序陷入死循环后,定时器溢出,产生高优先级中断,从而跳出死循环。我们还可以在定时器中断服务程序中放置一条LJMP ERR指令,即可使程序转向出错处理程序;由出错程序来完成以后的工作,并用软件的方法使系统复位。以下是一个用定时/计数器T0作软件看门狗的完整程序:ORG0000HAJMPMAINORG000BHLJMPERRMAIN:MOVSP,#60HMOVPSW,#00HMOVSCON,#00HMOVTMOD,#01H;设置T0为16位定时器SETBET0;允许T0中断SETBPT0;设置T0中断为高级中断MOVTL0,#0

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论