实验5-2 看门狗实验

合集下载

窗口看门狗实验心得体会

窗口看门狗实验心得体会

窗口看门狗实验心得体会作为一种新兴的网络安全方案之一,窗口看门狗近年来备受关注。

作为一名从业人员,为了更好地掌握这项技术,我特地进行了一次窗口看门狗实验,并在此分享一下我的心得体会。

首先,我想简单介绍一下什么是窗口看门狗。

窗口看门狗实际上是一种Windows平台上的安全技术,主要是通过监控系统中的进程和网络通信来检测和预防恶意行为的发生。

简单来说,就是将一只“看门狗”放到了我们的电脑里,时刻“守护”着我们的安全。

那么,具体来说,窗口看门狗是如何实现的呢?其实,窗口看门狗主要通过以下四个方面来进行检测和防护:1. 监控系统中的进程。

窗口看门狗可以监控所有正在运行的进程,并对这些进程的行为进行监测,如进程的创建、关闭等。

如果发现某个进程的行为异常,窗口看门狗会立即进行预警或者阻止其继续运行。

2. 监控系统中的网络通信。

窗口看门狗可以监控所有的网络通信,包括传入和传出的数据包。

如果发现某个数据包包含恶意代码或者连接了不受信任的服务器,窗口看门狗会同样立即进行预警或者阻止其继续传输。

3. 杀毒软件兼容性。

窗口看门狗与杀毒软件相辅相成。

在进行防护的同时,窗口看门狗可以实时监测杀毒软件的状态,防止恶意软件对杀毒软件进行攻击,从而保证我们电脑的安全。

4. 无缝衔接Windows系统。

窗口看门狗的最大优点是它与Windows系统无缝衔接,并且对系统的影响极小。

所以即使我们安装了窗口看门狗,我们也感受不到什么不同,而且它不会影响我们使用电脑的速度。

说了这么多,其实窗口看门狗最最重要的作用还是能够为我们提供实时的安全保障。

在进行实验的过程中,我发现窗口看门狗可以监控系统中所有进程和网络通信,并进行智能的行为分析。

如果它发现有威胁性的行为发生,就会立即进行预警和阻止,从而保证我们电脑的安全。

当然,窗口看门狗也有一些不足之处。

比如,它只能保护我们的电脑防止恶意行为,但它不能修复或者清除已经感染的病毒。

所以,我们还需要配合使用杀毒软件等其他安全工具一起,才能更好地保护我们的电脑。

Arm实验看门狗

Arm实验看门狗

ARM实验姓名唐珊珊学号2011412614实验目的:掌握独立看门狗的工作原理和使用方法。

实验原理:调用固件库设置和初始化独立看门狗,通过Led4的状态指示系统运行,同时按下按键SW1不断重置看门狗寄存器(俗称喂狗),当停止按键后,,则MCU会在看门狗超时的作用下系统重启。

实验步骤:要实现本实验功能设计,需要进行必要的设置,其步骤如下:1)设置Led驱动管教为推挽输出,Sw1管脚为浮空输入。

2)Led4熄灭一下,以表示刚刚复位,3)调用IWDG_writeAccessCmd函数向IWDG_KR写入0X5555。

通过这步,我们取消看门狗寄存器的写保护。

4)设置看门狗的分频系数,本例中为32。

在固件库中,可以调用IWDG_SetPrescaler函数实现。

5)设置看门狗的重装载的值,本例中为625.在固件库中,可以调用IWDG_SetReload函数实现。

6)调用IWDG_Enable函数向IWDG_KR写入0xcccc。

通过这句,来启动STM32的看门狗。

7)检测按键Sw1,如果按下则调用IWDG_ReloadCounter函数使STM32重新加载IWDG_RlR的值到看门狗计数器里面。

也可以用该命令来喂狗。

程序为:独立看门狗#include "stm32f10x.h"void GPIO_Config(void);void delay(void);int main(void){GPIO_Config();GPIO_SetBits(GPIOC,GPIO_Pin_9);delay();GPIO_ResetBits(GPIOC,GPIO_Pin_9);IWDG_WriteAccessCmd(IWDG_WriteAccess_Enable);IWDG_SetPrescaler(IWDG_Prescaler_32);IWDG_SetReload(625);IWDG_Enable();while(1){if(GPIO_ReadInputDataBit(GPIOD,GPIO_Pin_3)==0)IWDG_ReloadCounter();}}void delay(void){uint32_t i;for(i=0;i<6000000;i++){}}void GPIO_Config(void){GPIO_InitTypeDef GPIO_InitStructure;RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOD|RCC_APB2Periph_GPIOC,ENA BLE);GPIO_InitStructure.GPIO_Pin=GPIO_Pin_9;GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP;GPIO_Init(GPIOC,&GPIO_InitStructure);GPIO_InitStructure.GPIO_Pin=GPIO_Pin_3;GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;GPIO_InitStructure.GPIO_Mode=GPIO_Mode_IN_FLOATING;GPIO_Init(GPIOD,&GPIO_InitStructure);}中断函数uint32_t led=1;void WWDG_IRQHandler(void){uint8_t cr;cr=WWDG->CR;cr&=0x7f;if(cr<0x50){WWDG_SetCounter(0x70);WWDG_ClearFlag();led=~led;if(led==0)GPIO_ResetBits(GPIOC,GPIO_Pin_9);elseGPIO_SetBits(GPIOC,GPIO_Pin_9);}}#include "stm32f10x.h"void GPIO_Config(void);void delay(void);//uint32_t led=0;int main(void){NVIC_InitTypeDef NVIC_InitStructure;GPIO_Config();GPIO_ResetBits(GPIOC,GPIO_Pin_9);delay();GPIO_SetBits(GPIOC,GPIO_Pin_9);delay();RCC_APB1PeriphClockCmd(RCC_APB1Periph_WWDG,ENABLE);WWDG_SetPrescaler(WWDG_Prescaler_8);WWDG_EnableIT();WWDG_SetWindowValue(0x50);WWDG_Enable(0x70);NVIC_InitStructure.NVIC_IRQChannel=WWDG_IRQn;NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=0x07; NVIC_InitStructure.NVIC_IRQChannelSubPriority=0x07;NVIC_InitStructure.NVIC_IRQChannelCmd=ENABLE;NVIC_Init(&NVIC_InitStructure);while(1){;}}void GPIO_Config(void){GPIO_InitTypeDef GPIO_InitStructure;RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC,ENABLE);GPIO_InitStructure.GPIO_Pin=GPIO_Pin_9;GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP;GPIO_Init(GPIOC,&GPIO_InitStructure);}void delay(void){uint32_t i;for(i=0;i<6000000;i++){}}中断函数为void WWDG_IRQHandler(void){uint8_t cr;cr=WWDG->CR;cr&=0x7f;if(cr<0x50){WWDG_SetCounter(0x70);WWDG_ClearFlag();led=~led;if(led==0)GPIO_ResetBits(GPIOC,GPIO_Pin_9);elseGPIO_SetBits(GPIOC,GPIO_Pin_9);}}一秒定时看门狗#include "stm32f10x.h"void GPIO_Config(void);void NVIC_Config(void);void TIM1_Config(void);void EXTI_Config(void);void IWDG_Config(void);int main(){GPIO_Config();NVIC_Config();TIM1_Config();EXTI_Config();IWDG_Config();while(1){}}void GPIO_Config(void){GPIO_InitTypeDef GPIO_InitStructure;RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC|RCC_APB2Periph_GPIOD,ENA BLE);GPIO_InitStructure.GPIO_Pin=GPIO_Pin_9;GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP;GPIO_Init(GPIOC,&GPIO_InitStructure);GPIO_InitStructure.GPIO_Pin = GPIO_Pin_3;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;GPIO_Init(GPIOD, &GPIO_InitStructure);}void NVIC_Config(void){NVIC_InitTypeDef NVIC_InitStructure;NVIC_InitStructure.NVIC_IRQChannel=TIM1_UP_IRQn;NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=0;NVIC_InitStructure.NVIC_IRQChannelSubPriority=1;NVIC_InitStructure.NVIC_IRQChannelCmd=ENABLE;NVIC_Init(&NVIC_InitStructure);NVIC_InitStructure.NVIC_IRQChannel = EXTI3_IRQn;NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0x07;NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0x07;NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;NVIC_Init(&NVIC_InitStructure);}void TIM1_Config(){TIM_TimeBaseInitTypeDef TIM_TimeBaseInitStructure;RCC_APB2PeriphClockCmd(RCC_APB2Periph_TIM1,ENABLE);TIM_TimeBaseInitStructure.TIM_ClockDivision=0;TIM_TimeBaseInitStructure.TIM_Period=(10000-1);TIM_TimeBaseInitStructure.TIM_Prescaler=(7200-1);TIM_TimeBaseInitStructure.TIM_CounterMode=TIM_CounterMode_Up;TIM_TimeBaseInitStructure.TIM_RepetitionCounter=0;TIM_TimeBaseInit(TIM1,&TIM_TimeBaseInitStructure);TIM_ClearITPendingBit(TIM1,TIM_IT_Update);TIM_ITConfig(TIM1,TIM_IT_Update,ENABLE);TIM_Cmd(TIM1,ENABLE);}void EXTI_Config(void){EXTI_InitTypeDef EXTI_InitStructure;RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO, ENABLE);GPIO_EXTILineConfig(GPIO_PortSourceGPIOD, GPIO_PinSource3);EXTI_InitStructure.EXTI_Line = EXTI_Line3;EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Falling;EXTI_InitStructure.EXTI_LineCmd = ENABLE;EXTI_Init(&EXTI_InitStructure);}void IWDG_Config(void){IWDG_WriteAccessCmd(IWDG_WriteAccess_Enable);IWDG_SetPrescaler(IWDG_Prescaler_32);IWDG_SetReload(4000);IWDG_Enable();}中端函数为int led=1;void TIM1_UP_IRQHandler(void){if(TIM_GetITStatus(TIM1,TIM_IT_Update)!=RESET){IWDG_ReloadCounter();led=~led;if(led==1)GPIO_SetBits(GPIOC,GPIO_Pin_9);elseGPIO_ResetBits(GPIOC,GPIO_Pin_9);TIM_ClearITPendingBit(TIM1,TIM_IT_Update);}}void EXTI3_IRQHandler(void){/* 检测EXTI3是否有效*/if(EXTI_GetITStatus(EXTI_Line3)!= RESET){while(1){/*可随便加入现象,便于观察*/GPIO_ResetBits(GPIOC,GPIO_Pin_9|GPIO_Pin_8|GPIO_Pin_7|GPIO_Pin_6);/* 清除EXTI3的悬起标志位*/EXTI_ClearITPendingBit(EXTI_Line3);}}}。

看门狗定时器实验

看门狗定时器实验

看门狗定时器实验1.实验目的(1)掌握LM3S8962中的看门狗定时器(WDT)的功能和使用方法(2)掌握正确使用看门狗的方法2.实验内容(1)ARM的初始化配置(2)WDT的初始化和中断/复位设置(3)编程演示使用看门狗对系统进行监控3.WDT的功能图1 WDT模块结构图嵌入式控制系统运行时受到外部干扰或者系统错误,程序有时会出现“跑飞”,导致整个系统瘫痪。

为了防止这一现象的发生,在对系统稳定性要求较高的场合往往要加入看门狗(Watchdog)电路。

看门狗电路的作用就是当系统“跑飞”而进入死循环时,恢复系统的运行。

在Stellaris 系列ARM里集成有硬件的看门狗定时器模块。

该模块有两个功能:当看门狗定时器的复位功能禁能时,可以把看门狗作为一个普通定时器来使用;当看门狗定时器的复位功能使能时,用作看门狗定时器,一旦产生了“二次超时”事件,将引起处理器复位。

看门狗定时器具有“二次超时”特性。

当32位计数器在使能后递减计数到0 状态时,看门狗定时器模块产生第一个超时信号,并产生中断触发信号。

在发生了第一个超时事件后,32 位计数器自动重装看门狗定时器装载寄存器(WDTLOAD)的值并重新递减计数。

如果没有清除第一个超时中断状态,则当计数器再次递减到0 时,且复位功能已使能,则看门狗定时器会向处理器发出复位信号。

如果中断状态在32位计数器到达其第二次超时之前被清除,则自动重装32位计数器,并重新开始计数,从而可以避免处理器被复位。

为了防止在程序跑飞时意外修改看门狗模块的配置,特意引入了一个锁定寄存器。

在配置看门狗定时器之后,只要写入锁定寄存器一个不是十六进制0x1ACCE551的任何数值,看门狗模块的所有配置都会被锁定,拒绝软件修改。

因此以后要修改看门狗模块的配置,包括清除中断状态(即喂狗操作),都必须要首先解锁。

解锁方法是向锁定寄存器写入十六进制数值0x1ACCE551 。

如果在看门狗定时器计数器正在计数时把新的值写入WDTLOAD,则计数器将装入新的值并继续计数。

华清远见实习报告

华清远见实习报告

华清远见嵌入式系统实训报告(2017—2018学年第一学期)姓名:******专业班级:************学号:**************学院:电气工程与自动化学院带队教师: 乔美英,胡伟2017年9月25日华清远见嵌入式系统实训报告一、实习时间2017.9.25--2017.9.29二、实习的性质、目的2.1 实习性质虽然嵌入式系统是近几年才开始真正风靡起来的,但事实上嵌入式这个概念却很早就已经存在了。

从上个世纪70年代单片机的出现到今天各种嵌入式微处理器、微控制器的广泛应用,嵌入式系统少说也有了近30年的历史。

从嵌入式系统的构成上看,嵌入式系统是集软硬件于一体的、可独立工作的计算机系统。

从外观上看,嵌入式系统像是一个“可编程”的电子“器件”从功能上看。

它是对宿主对象进行控制,使其具有“智能”的控制器。

从应用的角度看,嵌入式系统与通用计算机系统相比,有如下一些特点:(1)专用性强由于嵌入式系统通常是面向某个特定应用的,所以嵌入式系统的硬件和软件,尤其是软件,都是为特定用户群来设计的,它通常都具有某种专用性的特点。

(2)实时性好目前,嵌入式系统广泛应用于生产过程控制、数据采集、传输通信等场合,主要用来对宿主对象进行控制。

所以都对嵌入式系统有或多或少的实时性。

例如,对嵌入在武器装各中的嵌入式系统、在火箭中的嵌入式系统、一些工业控制装置中的控制系统等应用中的实时性要求就极高。

也正因为这种要求,在硬件上嵌入式系统极少使用存取速度慢的磁盘等存储器。

在软件上更是加以精心设计,从而可使嵌入式系统快速地响应外部事件。

当然,随着嵌入式系统应用的扩展,有些系统对实时性要求也并不是很高,例如近年来发展速度比较快的手持式计算机、掌上电脑等。

但总体来说,实时性是对嵌入式系统的普遍要求,是设计者和用户重点考虑的一个重要指标。

(3)可裁剪性好从嵌入式系统专用性的特点来看,作为嵌入式系统的供应者,理应提供各式各样的硬件和软件以各选用。

51单片机的看门狗

51单片机的看门狗

“看门狗”概念及其应用在由单片机构成的系统中,由于单片机的工作有可能会受到来自外界电磁场的干扰,造成程序的跑飞,从而陷入死循环,程序的正常运行被打断,由单片机控制的系统便无法继续工作,这样会造成整个系统陷入停滞状态,发生不可预料的后果,所以出于对单片机运行状态进行实时监测的考虑,便产生了一种专门用于监测单片机程序运行状态的芯片,俗称“看门狗”(watch dog)。

加入看门狗电路的目的是使单片机可以在无人状态下实现连续工作,其工作过程如下:看门狗芯片和单片机的一个I/O引脚相连,该I/O引脚通过单片机的程序控制,使它定时地往看门狗芯片的这个引脚上送入高电平(或低电平),这一程序语句是分散地放在单片机其他控制语句中间的,一旦单片机由于干扰造成程序跑飞后而陷入某一程序段进入死循环状态时,给看门狗引脚送电平的程序便不能被执行到,这时,看门狗电路就会由于得不到单片机送来的信号,便将它和单片机复位引脚相连的引脚上送出一个复位信号,使单片机发生复位,从而单片机将从程序存储器的起始位置重新开始执行程序,这样便实现了单片机的自动复位。

通常看门狗电路需要一个专门的看门狗芯片连接单片机来实现,不过这样会给电路设计带来复杂,STC单片机内部自带有看门狗,通过对相应特殊功能寄存器的设置就可实现看门狗的应用,STC89系列单片机内部有一个专门的看门狗定时器寄存器,Watch Dog Timer 寄存器,其相应功能见下个知识点。

看门狗定时器寄存器(WDT_CONTR)STC单片机看门狗定时器寄存器在特殊功能寄存器中的字节地址为E1H,不能位寻址,该寄存器用来管理STC单片机的看门狗控制部分,包括启停看门狗、设置看门狗溢出时间等。

单片机复位时该寄存器不一定全部被清0,在STC下载程序软件界面上可设置复位关看门狗或只有停电关看门狗的选择,大家根据需要可做出适合自己设计系统的选择。

其各位的定义如表4.2.1所示。

表1看门狗定时器寄存器(WDT_CONTR)EN_WDT:看门狗允许位,当设置为“1”时,启动看门狗。

单片机实验看门狗实验

单片机实验看门狗实验

实验八 看门狗实验

/***************************************************************************** // Function name : rtc_get_date // Description : 获取实时时钟当前时间、日期 // Return type : void // Argument : p_date, 返回日期的指针 *****************************************************************************/ void rtc_get_date(st_date* p_date) { rRTCCON = 0x01; p_date->year = rBCDYEAR ; p_date->mon = rBCDMON ; p_date->day = rBCDDAY ; p_date->week_day= rBCDDATE ; p_date->hour = rBCDHOUR ; p_date->min = rBCDMIN ; p_date->sec = rBCDSEC ; rRTCCON = 0x00; } /***************************************************************************** // Function name : rtc_tick_init // Description : 初始化S3C2410的TICK定时器 // Return type : void // Argument : tick, 设置的TICK频率(时钟滴答的周期为 (1+tick)/128秒) *****************************************************************************/

实验八 看门狗实验

实验八 看门狗实验

实验八看门狗实验一、实验目的1、了解看门狗的作用;2、掌握看门狗的使用方法。

二、实验内容1、编程实现看门狗功能,观察看门狗作用;2、编程实现看门狗喂狗。

三、实验设备1、硬件:JX44B0实验板;PC机;JTAG仿真器;2、软件:PC机操作系统(WINDOWS 2000);ARM Developer Suite v1.2;Multi-ICE V2.2.5(Build1319);四、基础知识1、用ADS集成开发环境,编写和调试程序的基本过程;2、应用程序的框架结构。

五、实验说明1、看门狗的功能和工作原理嵌入式系统运行时受到外部干扰或者系统错误,程序有时会出现“跑飞”,导致整个系统瘫痪。

为了防止这一现象的发生,在对系统稳定性要求较高的场合往往要加入看门狗电路。

看门狗的作用就是当系统“跑飞”而进入死循环时,恢复系统的运行。

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

在一个完整的嵌入式机系统或单片机最小系统中通常都有看门狗定时器。

而且一般集成在处理芯片中,看门狗实际上就是一个定时器,只是它在期满后将自动引起系统复位。

2、S3C44B0看门狗的控制S3C44B0的看门狗定时器有两个功能:1)为常规定时器使用,而且可以引发中断;2)为看门狗定时器使用,期满时,它可以产生128个时钟周期的复位信号。

下图是S3C44B0看门狗的示意图。

输入时钟为MCLK(该时钟频率等于系统的主频),它经过两级分频,最后将分频后的时钟作为该定时器的输入时钟,当计数器期满后可以产生中断或者复位信号。

S3C44B0看门狗电路示意图看门狗定时器计数值的计算公式如下:t_watchdog = 1 / (PCLK / (Prescaler value + 1 ) / Division_factor)看门狗的定时周期:T = WTCNT * t_watchdog看门狗定时器相关寄存器如下:控制寄存器(WTCON)通过该寄存器,可以使能/禁止看门狗、选择输入时钟源、使能/关闭中断、使能/关闭输出。

实验6--看门狗错误喂狗产生中断实验

实验6--看门狗错误喂狗产生中断实验
*/
int main (void)
{
uint32 i;
PINSEL0 = 0x00000000;//管脚连接GPIO
IO0DIR = BEEP;//设置LED9和BEEP控制口输出
IO0SET = BEEP;
IO0SET = LED2;
IRQEnable();//使能IRQ中断
/*中断初始化*/
VICIntSelect = 0x00000000;//连接所有中断到向量中断
**函数功能:错误喂狗产生WDT中断演示
**调试说明:需要在startup.s文件中使能IRQ中断
*********************************************************************************************************
WDTC = 0x606;//设定看门狗超时值
WDMOD = 0x01;//看门狗中断使能
WDFEED = 0xAA;//第一次喂狗启动WDT
WDFEED = 0x55;
/*错误喂狗*/
for(i = 0; i < 0xFF; i++);
WDFEED = 0xAA;
WDFEED = 0x54;
while (1);
}
/*闪烁LED2 */
if((IO0SET & LED2) == 0) IO0SET = LED2;
else ;IO0CLR = LED2;
DelayNS(50);
VICIntEnClr = 1 << WDT;//看门狗喂狗中断,只能通过禁止VIC中断的方法返回
WDMOD=0x00;//清除看门狗超时位WDTOF
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

实验5-2 看门狗定时器应用实验1、实验目的了解watchdog 的作用掌握S3C2410A 的watchdog 定时器的使用方法2、实验内容实现看门狗复位编程实现看门狗喂狗3、实验设备S3C2410A 开发板ADS1.2 集成开发环境,ARM 仿真器、串口连接线4、实验原理4.1 看门狗功能简述嵌入式系统运行时受到外部干扰或者系统错误,程序有时会出现“跑飞”,导致整个系统瘫痪。

为了防止这一现象的发生,在对系统稳定性要求较高的场合往往要加入看门狗(watchdog)电路。

看门狗的作用就是当系统“跑飞”而进入死循环时,恢复系统的运行。

4.2 看门狗的工作原理其基本原理为:设本系统程序完整运行一周期的时间是Tp,看门狗的定时周期为Ti,Ti>Tp,在程序正常运行时,定时器就不会溢出,若由于干扰等原因使系统不能在Tp 时刻修改定时器的记数值,定时器将在Ti 时刻溢出,引发系统复位,使系统得以重新运行,从而起到监控的作用。

4.3 S3C2410A 的看门狗S3C2410A 的看门狗定时器有两个功能:作为常规时钟,并且可以产生中断;作为看门狗定时器使用,当时钟计数减为0(超时)时,它将产生一个128 个时钟周期(PCLK)的复位信号。

主要特性如下:通用的中断方式的16bit 定时器。

当计数器减到0(发生溢出),产生128 个PCLK 周期的复位信号。

下图为看门狗的电路示意图,看门狗时钟使用PCLK 作为他的时钟源,PCLK 通过预分频产生适合的看门狗时钟。

看门狗模块包括一个预比例因子放大器,一个是四分频器,一个16bit 计数器。

看门狗的时钟源来自PCLK,为了得到较宽范围的看门狗信号,PCLK 先被预分频,之后再经过分频器分频。

预分频比例因子的分频值,都可以由看门狗控制器(WTCON)决定,预分频值的有效范围从0 到256-1。

分频因子可以选择16、32、64 或者128。

看门狗定时器记数值的计算公式如下:t_watchdog=1/ [PCLK/( prescaler value +1)/ Division_factor ]看门狗的定时周期为T=WTCH×t_watchdog一旦看门狗定时器被允许,看门狗定时器数据寄存器(WTDAT)的值不能被自动的装载到看门狗计数器(WTCNT)中。

因此,看门狗启动前要将一个初始值写入看门狗计数器(WTCNT)中。

调试环境下的看门狗当S3C2410A 用嵌入式ICE 调试的时候,看门狗定时器的复位功能不能启动,看门狗定时器能从CPU 内核信号判断出当前CPU 是否处于调试状态,如果看门狗定时器确定当前模式是调试模式,尽管看门狗能产生溢出信号,但是仍然不会产生复位信号。

5、S3C2410A 相关寄存器WTCON――看门狗定时器控制寄存器看门狗控制寄存器能够禁止或者允许看门狗时钟,从四个不同的时钟源中挑选时钟信号,允许或禁止中断,并且能允许或禁止看门狗时钟输出。

如果用户想要使用看门狗作为普通时钟,应该中断使能,禁止看门狗定时器复位。

WTDAT――看门狗定时器数据寄存器WTDAT 用于设置看门狗定时器的超时时间值,在初始化看门狗过程中,WTDAT 的值不会自动加载到定时计数器中,首次使用定时器超时值为其初始值即0x8000,以后该寄存器的值会被自动加载到WTCNT 寄存器中。

WTCNT――看门狗定时器计数寄存器WTCNT 为看门狗定时器工作的时间计数器的当前计数值,注意在初始化看门狗操作后,看门狗数据寄存器(WTDAT)的值不能自动装载到看门狗计数寄存器(WTCNT)中,所以看门狗被允许之前应该初始化看门狗计数寄存器的值。

6、实验程序由于看门狗是对系统的复位或者中断的操作,所以不需要外围的硬件电路。

要实现看门狗的功能,只需要对看门狗的寄存器组进行操作。

即对看门狗的控制寄存器(WTCON)、看门狗数据寄存器(WTDAT)、看门狗计数寄存器(WTCNT)的操作。

设计流程如下:设置看门狗中断操作,包括全局中断和看门狗中断的使能,看门狗中断向量的定义。

频值、中断使能和复位使能等。

对看门狗数据寄存器(WTDAT)和看门狗计数寄存器(WTCNT)的设置。

启动看门狗定时器。

6.1 主功能函数int Main(void){ChangeClockDivider(1,1);ChangeMPllValue(0xa1,0x3,0x1);Port_Init();Uart_Select(0);Uart_Init(0,115200);Uart_Printf("watchdog test is beginning\n");watchdog_test();while(1);6.2 看门狗复位功能程序实现void watchdog_test(void){//Prescaler value=100;lock division factor=128 ;PCLK=67.5MHz//t_watchdog=1/[PCLK/(Prescaler value+1)/Division_factor]=0.0002//disable watchdogrWTCON=((100<<8)|(3<<3));//看门狗时钟周期T=WTCNT*t_watchdog=3S//看门狗喂狗rWTDAT=15000;rWTCNT=15000;//disable watchdog interruptrWTCON &= ~(3<<1);//enable Watchdog timer;reset signal.rWTCON|=((1<<5)|(1<<0));while(1);}6.3 看门狗定时器功能程序实现void watchdog_test(void){{//initialize interrupt registersClearPending(BIT_WDT);//建立WatchDog 中断pISR_WDT=(unsigned)watchdog_int;//Prescaler value=100、clock division factor=128//t_watchdog=1/[PCLK/(Prescaler value+1)/Division_factor]=0.00025856 //disable watchdogrWTCON=((100<<8)|(3<<3));//看门狗时钟周期T=WTCNT*t_watchdog=4S//看门狗喂狗rWTDAT=15000;rWTCNT=15000;rWTCON|=((1<<5)|(1<<2));//enable Watchdog timer ang watchdog interrupt //rWTCON|=((1<<5)|(1<<2)|1);//watchdog 复位,时间间隔为4S。

rWTCON|=(1<<5)|(1<<2);//每4S watchdog 一次中断。

//设置watchdog 为IRQ 中断模式rINTMOD&=0xFFFFFDFF;//开中断EnableIrq(BIT_WDT);while(f_ucSencondNo<11);/**** watchdog_int ****/void __irq watchdog_int(void){//清除中断ClearPending(BIT_WDT);f_ucSencondNo++;if(f_ucSencondNo<11)Uart_Printf("%ds",f_ucSencondNo);else{//mask watchdog timer interruptDisableIrq(BIT_WDT);Uart_Printf("watch dog is ok\n");}}7、实验步骤1. 连接好实验环境,将仿真器的一端通过并口连接到PC 机,将仿真器的另一端通过JTAG 线连接到GEC2410 的JTAG 接口。

2. 将串口线一端接到PC 机,另一端接到GEC2410 的UART0 接口(即P1 口);打开串口超级终端dnw.exe,设置串口Baud Rate 为115200,选择COM1。

3. 重起GEC2410,开发板会执行flash 中的BIOS 程序,选择GEC2410_Watchdog 目录下的可执行映象文件GEC2410_Watchdog.bin 将该文件下载到SDRAM。

4. 下载结束后,会提示是否要立即运行,这时输入“Y”,执行GEC2410_Watchdog.bin。

5. 在dnw 中观察实验结果。

注意:如果做看门狗复位功能实验,打开ADS CodeWarrior,在ADS CodeWarrior 中打开实验工程GEC2410_Watchdog.mcp;将文件watchdog_reset.c 加载到工程中,删除watchdog.c 文件,并对工程进行编译。

然后在对新的GEC2410_Watchdog.bin 按照上述方法下载到SDRAM 内调试,运行映象文件,从串口观察实验结果,经过几秒钟开发板重新启动,串口输出bios 字符。

8、实验结果1、观察看门狗定时器功能。

2、观察看门狗复位功能。

相关文档
最新文档