看门狗系统的设计
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
福建农林大学金山学院
《嵌入式系统原理及应用》课程设计报告
设计题目看门狗系统的设计
专业年级 13级电子科学与技术
姓名******
学号
成绩
2016 年 6月28日
看门狗系统的设计
学号:136711069 姓名:江建淡
摘要:在嵌入式应用中,CPU必须可靠工作,系统由于种种原因,程序运行时会不按指定指令运行,导致死锁,系统无法运行下去,这时需能使系统复位即可使程序重新投入运行。
看门狗(Watch Dog)技术就是实现崩溃系统的自动恢复,保证系统的稳定性。
一、课程设计目的
(1)了解WATCHDOG的作用;
(2)掌握WATCHDOG的使用方法。
二、课程设计内容
(1)熟悉嵌入式开发环境的建立和使用
(2)演绎看门狗的功能
三、设计内容
看门狗WDT的基本原理:设某系统程序完整运行一周期的时间是Tp,看门狗的定时周期为Ti,Ti>Tp,在程序运行一周后就重新设置定时器的计数值,只要程序正常运行,定时器就不会溢出,若由于干扰等原因使系统不能在Tp时刻修改定时器的计数值,定时器将在Ti时刻溢出,引发系统复位,是系统得以重新运行,从而起到监控作用。
看门狗定时器的组成框图它唯一的时钟源MCLK,内部有8位预分频器(由WTCON[15:8]选择,最大28—1)将MCLK首次分频,通过与分屏器分频的值称为预分频值,然后按照16、32、64和128的系数通过多路选择开关(MUX)进行二次分频,这次分频的值称为分频系数,在看门狗定时器的控制寄存器作用下(WTCON[4:3])选择所需分频系数,得到WTD计数所需时钟,通过内部递减计数器(16位)WTC减
法计数,当没有加以干预,计数到0时,产生中断输出或产生复位信号RESET使系统复位。
(如下看门狗定时器的组成框图)
ARM7TDMI-S是一个通用的32位微处理器,它可提供高性能和低功耗。
ARM 结构是基于精简指令集计算机(RISC)原理而设计的。
指令集和相关的译码机制比复杂指令集计算机要简单得多。
这样使用一个小的、廉价的处理器核就可实现很高的指令吞吐量和实时的中断响应。
使用了流水线技术,处理和存储系统的所有部分都可连续工作。
通常在执行一条指令的同时对下一条指令进行译码,并将第三条指令从存储器中取出。
看门狗通过检查各应用任务是否在规定的时间内对其“喂软狗”来确定各任务的运行状态,硬件看门狗通过检查软件看门狗是否在规定的时间内对其“喂狗”来实现对监视器任务的监视.通过微处理器的定时器中断机制,为每个任务分配计时单元和运行标志.系统具体的执行操作如下:
(1 )系统中某任务空闲时,以小于“喂软狗”设定的时间间隔为周期,周期性地“喂软狗”.
(2 )在该任务执行时,预计执行所需的最长耗时,并用稍大于该最大耗时的时问间隔设置监视器中与其对应的定时器参数,同时中断周期性“喂软狗”模块,启动监视器任务中的定时器倒计数.当该任务正常执行完毕时,发送信号“喂软狗”,对定时器清零,复位该任务供下次使用,同时恢复周期性“喂软狗”模块.(3 )当任务出现异常时,不能在设定的时间间隔内完成该任务,不能对软件看门狗及时清零,使得监视器中相应的定时器溢出,监视器任务通过内核服务发送指令,把该任务的堆栈地址指到其起始地址,重启该任务,累计其复位次数,同时把该任务的计时器清零.如果在设定的次数内不能够有效启动该任务,软件看门狗则延时喂内置硬件看门狗,内置看门狗计数器溢出,自动重启系统.当系统主程序出现问题或者系统硬件出问题时,软件按看门狗也延迟“喂狗”,重新启动系统,以确保系统长时间稳定运行.
程序框图
四、设计结果
五、设计体会与心得
虽然在做这个课设的过程中遇到的问题比较多,但这也恰恰让我自己认识到自己的不足。
通过对这次对嵌入式系统原理及应用的课程设计,让我更近一步地认识到看门狗的具体原理与实现该功能的流程。
巩固了课本的知识也拓展了嵌入式的实践流程。
同时这次实验让我明白不论是在做实验还是在今后的学习中,都应该有一种坚定不移不达目的不罢休的信念,只有这样才能达到自己的最终目标!成功就是在不断摸索中前进实现的,遇到问题我们不能灰心、烦躁,甚至放弃,而要静下心来仔细思考,分部检查,找出最终的原因进行改正,这样才会有进步,才会一步步向自己的目标靠近,才会取得自己所要追求的成功。
参考文献
【1】马维华,白延敏[M ]1北京:邮电大学出版社, 2015.1。
【2】陈赜.嵌入式技术原理与应用.北京航空航天大学出版社
【3】周立功.ARM嵌入式系统基础教程[M].北京:北京航空航天大学出版社,2008
程序附件
/****************************************Copyright
(c)***************************************************/
#ifndef __CONFIG_H
#define __CONFIG_H
//This segment should not be modified
#ifndef TRUE
#define TRUE 1
#endif
#ifndef FALSE
#define FALSE 0
#endif
typedef unsigned char uint8; /* defined for unsigned 8-bits integer variable 无符号8位整型变量*/
typedef signed char int8; /* defined for signed 8-bits integer variable 有符号8位整型变量*/
typedef unsigned short uint16; /* defined for unsigned 16-bits integer variable 无符号16位整型变量*/
typedef signed short int16; /* defined for signed 16-bits integer variable 有符号16位整型变量*/
typedef unsigned int uint32; /* defined for unsigned 32-bits integer variable 无符号32位整型变量*/
typedef signed int int32; /* defined for signed 32-bits integer variable 有符号32位整型变量*/
typedef float fp32; /* single precision floating point variable (32bits) 单精度浮点数(32位长度)*/
typedef double fp64; /* double precision floating point variable (64bits) 双精度浮点数(64位长度)*/
/********************************/
/* ARM specital code */
/* ARM的特殊代码*/
/********************************/
//This segment should not be modify
//这一段无需改动
#include "LPC2124.h"
#include <stdio.h>
/********************************/
/*Application Program Configurations*/
/* 应用程序配置*/
/********************************/
//This segment could be modified as needed.
//以下根据需要改动
/********************************/
/*Configuration of the example */
/* 本例子的配置*/
/********************************/
/* System configuration .Fosc、Fcclk、Fcco、Fpclk must be defined */
/* 系统设置, Fosc、Fcclk、Fcco、Fpclk必须定义*/
#define Fosc 11059200 //Crystal
frequence,10MHz~25MHz,should be the same as actual status.
//应当与实际一至晶振频率,10MHz~25MHz,应当与实际一至//
#define Fcclk (Fosc * 4) //System frequence,should be (1~32)multiples of Fosc,and should be equal or less than 60MHz.
//系统频率,必须为Fosc的整数倍(1~32),且<=60MHZ #define Fcco (Fcclk * 4) //CCO frequence,should be 2、4、8、16 multiples of Fcclk, ranged from 156MHz to 320MHz.
//CCO频率,必须为Fcclk的2、4、8、16倍,范围为156MHz~320MHz
#define Fpclk (Fcclk / 4) * 1 //VPB clock frequence , must be 1、2、4 multiples of (Fcclk / 4).
//VPB时钟频率,只能为(Fcclk / 4)的1、2、4倍
#include "target.h" //This line may not be deleted 这一句不能删除
#endif
/**************************************************************************
End Of File
*************************************************************************/。