CortexM3 (NXP LPC1788)之WDT窗口看门狗定时器
CortexM3 (NXP LPC1788)之WDT 窗口看门狗定时器
看门狗定时器的用途是在微控制器进入错误状态后的一段合理时间内
将其复位。
看门狗被是能后,如果用户没有在预先设定的时间内喂狗,那么会
产生一个看门狗事件。
看门狗定时器的寄存器有看门狗定时器常数计数器WDTC,每当在喂狗寄存器WDFEED 中写入喂狗序列,WDTC 中的值就会被
写入看门狗定时计数器WDTV,WDTV 中的值在看门狗时钟的驱动下递减。
我们可以通过设置看门狗定时器报警中断寄存器WDWARNINT 寄存器,当WDWARNINT 中的值和WDTV 中的值匹配时,可以形成中断。
最重要的还有
看门狗模式寄存器WDMOD,它控制着看门狗的使能,复位,更新模式以及超
时标识和中断标志。
此外还有一个看门狗定时器窗口寄存器WDWINDOW,它
决定了喂狗过程中允许的最大的WDTV。
看门狗的时钟有一个专用的振荡器,提供了500KHZ 的时钟,该时钟通
过4 分频,提供DWTV 计数。
因此在下面的程序中给WDTC 赋值1000000,
则看门狗计数的周期为(1/500KHZ)*1000000*4 = 8S .所以看门狗中断每8 秒产
生一次。
程序配置看门狗超时不复位,进入超时中断以后软件清除中断标志和
超时标识。
注意:为了程序的简洁,省去了之前介绍了的系统时钟配置和串口的配置。
具体的信息可查询之前的文章。
#include “LPC1788_REG.h”#include“uart.h”#define rWDMOD(*(volatile unsigned*)0x40000000)#define rWDTC(*(volatile unsigned*)0x40000004)#define rWDFEED(*(volatile unsigned*)0x40000008)#define rWDTV(*(volatile unsigned*)0x4000000C)#define rWDWARNINT(*(volatile unsigned*)0x40000014)#define rWDWINDOW(*(volatile。
Cortex-M3 (NXP LPC1788)之GPIO
Cortex-M3 (NXP LPC1788)之GPIO经过前一篇的分析,现在可以进入C 环境进行各个模块的学习。
首先进行简单的GPIO 控制LED 灯的操作,开发板通过GPIO1.18 控制LED 灯,电路如下图:为了对LPC1788 的内部结构有更好的理解和学习,虽然NXP 给出了封装好的库函数,但是我将自己编写代码便于直接对内部原理进行分析。
代码如下#definerFIO1DIR(*(volatileunsigned*)0x20098020)//高速GPIO 方向控制寄存器,用于配置管脚的输入或输出,默认为输入#definerFIO1MASK(*(volatileunsigned*)0x20098030)//高速GPIO 屏蔽寄存器,被屏蔽的位将不能进行GPIO 的控制操作,默认无效#definerFIO1PIN(*(volatileunsigned*)0x20098034)//高速GPIO 管脚值寄存器,可以操作未被FIOXMASK 屏蔽的GPIO 端口#definerFIO1SET(*(volatileunsigned*) 0x20098038)//高速GPIO 管脚置位寄存器,置一操作使相应位输出高电平#definerFIO1CLR(*(volatileunsigned*)0x2009803c)//高速GPIO 管脚清楚寄存器,置一操作使相应位输出低电平voidDelay(int);intmain(void){rFIO1DIR|=(1OUTPUTwhile(1){rFIO1SET|=(1 程序比较简单,对于GPIO 的操作我们可以使用输出置位寄存器FIOXSET 和输出清零寄存器FIOXCLR 进行操作,也可以直接使用GPIO 管脚值寄存器FIOXPIN 进行操作。
程序最后写了一个void SystemInit(void)空函数,是因为在启动程序startup_LPC177x_8x.S 中IMPORT SystemInit 声明了一个外部函数,并且LDR R0, =SystemInit 执行该函数。
嵌入式看门狗定时器
看门狗定时器在由单片机构成的系统中,由于单片机的工作有可能会受到来自外界电磁场的干扰,造成程序的跑飞,从而陷入死循环,程序的正常运行被打断,由单片机控制的系统便无法继续工作,这样会造成整个系统陷入停滞状态,发生不可预料的后果,所以出于对单片机运行状态进行实时监测的考虑,便产生了一种专门用于监测单片机程序运行状态的芯片,俗称“看门狗”(watch dog)。
加入看门狗电路的目的是使单片机可以在无人状态下实现连续工作,其工作过程如下:看门狗芯片和单片机的一个I/O引脚相连,该I/O引脚通过单片机的程序控制,使它定时地往看门狗芯片的这个引脚上送入高电平(或低电平),这一程序语句是分散地放在单片机其他控制语句中间的,一旦单片机由于干扰造成程序跑飞后而陷入某一程序段进入死循环状态时,给看门狗引脚送电平的程序便不能被执行到,这时,看门狗电路就会由于得不到单片机送来的信号,便将它和单片机复位引脚相连的引脚上送出一个复位信号,使单片机发生复位,从而单片机将从程序存储器的起始位置重新开始执行程序,这样便实现了单片机的自动复位。
通常看门狗电路需要一个专门的看门狗芯片连接单片机来实现,不过这样会给电路设计带来复杂,STC单片机内部自带有看门狗,通过对相应特殊功能寄存器的设置就可实现看门狗的应用,STC89系列单片机内部有一个专门的看门狗定时器寄存器,Watch Dog Timer 寄存器看门狗定时器寄存器(WDT_CONTR)STC单片机看门狗定时器寄存器在特殊功能寄存器中的字节地址为E1H,不能位寻址,该寄存器用来管理STC单片机的看门狗控制部分,包括启停看门狗、设置看门狗溢出时间等。
单片机复位时该寄存器不一定全部被清0,在STC下载程序软件界面上可设置复位关看门狗或只有停电关看门狗的选择,大家根据需要可做出适合自己设计系统的选择。
其各位的定义如表1所示。
CLR_WDT :看门狗清“0”位,当设为“1”时,看门狗定时器将重新计数。
PIC看门狗定时器的理解
PIC 看门狗定时器的理解
pic 单片机看门狗计时器(Watch Dog Timer)是一个片内自振式的RC 振荡计时器,无需任何的外接元件。
这意味着即使芯片OSC1/OSC2 上振荡停
止了(例如执行指令SLEEP 后),WDT 照样保持计时。
WDT 计时溢出将产
生RESET。
在PIC16C5X 芯片内有一个特殊的谓之定义EPROM (Configuration EPROM)的单元,其中的一个位是用于定义WDT 的。
你可以将其置0 来抑制WDT 使之永远不起作用。
这将在第七章的烧写器介绍部
分详细说明,请参阅。
1、WDT 周期
WDT 有一个基本的溢出周期16ms(无预分频器pic16F917),如果你需要更长的WDT 周期,可以把预分频器分配给WDT,最大分频比可达1:128,
这时的WDT 溢出周期约为2.5S。
pic16F917 看门狗还提供了一个16 位的预分频器,使WTD 的超时值提高到268s。
WDT 溢出周期和环境温度、VDD
等参数有关系,请参阅附录的图表。
CLRWDT 和SLEEP 指令将清除WDT 计时器以及预分频器里已有的计数
值(当预分频器分配给WDT 时)。
WDT 一般用来防止系统失控或者说防止
单片机程序运行失控。
在正常情况下,WDT 应在计满溢出前被CLRWDT 指
令清零,以防止产生RESET。
如果程序由于某种干扰而失控,那幺不能在WDT 溢出前执行一条CLRWDT 指令,就会使WDT 溢出而产生RESET,使系统重新启动运行而不至失去控制。
若WDT 溢出产生RESET,则状态寄存。
看门狗定时器实训报告
本次实训旨在使学生了解看门狗定时器的基本原理、工作方式以及在嵌入式系统中的应用,通过实际操作,掌握看门狗定时器的配置、使用方法,并学会利用看门狗定时器解决嵌入式系统中的故障和异常。
二、实训内容1. 看门狗定时器原理- 看门狗定时器是一种监测硬件或软件故障的定时器,其工作原理是在程序运行过程中不断重装载,以防止溢出引发中断或复位。
- 看门狗定时器分为独立看门狗和窗口看门狗两种类型。
2. 独立看门狗(FWDGT)- 独立看门狗使用独立的32kHz内部时钟,适用于对计时精度要求不高的场合。
- 独立看门狗内部有一个12位的向下计数的定时器,当计数值达到0时,会产生一个系统复位。
3. 窗口看门狗(WWDGT)- 窗口看门狗使用PCLK分频而来的时钟,计数器位数较小,需要在窗口范围内重装载以防复位。
4. 看门狗定时器的配置与使用- 了解看门狗定时器的相关寄存器,如预分频器、计数器、重装载寄存器、键寄存器和状态寄存器等。
- 根据实际需求配置看门狗定时器的时钟源、计数器值、窗口范围等参数。
- 在程序中定期重装载看门狗定时器,以防止系统复位。
5. 看门狗定时器的实际应用- 利用看门狗定时器解决嵌入式系统中的故障和异常。
- 通过看门狗定时器监控程序运行状态,防止死锁。
- 作为系统安全特性的一部分,确保在检测到异常时能够安全地重启系统。
1. 准备工作- 准备好实训所需的硬件设备和软件环境,如单片机开发板、调试器、IDE等。
2. 环境搭建- 根据实际需求搭建实训环境,包括硬件电路连接和软件配置。
3. 看门狗定时器配置- 了解看门狗定时器的相关寄存器,如预分频器、计数器、重装载寄存器、键寄存器和状态寄存器等。
- 根据实际需求配置看门狗定时器的时钟源、计数器值、窗口范围等参数。
4. 程序编写- 编写程序,实现看门狗定时器的初始化、重装载和监控功能。
- 在程序中定期重装载看门狗定时器,以防止系统复位。
5. 调试与验证- 使用调试器对程序进行调试,观察看门狗定时器的运行状态。
《PIC系列单片机C程序设计方案与proteus仿真》学习之、看门狗定时器(WDT)和EEPPROM的读写
学习之6---看门狗定时器(WDT)//PIC.H中定义了宏#define CLRWDT() asm("clrwdt")因此在PICC的c语言中可以直接使用CLRWDT()对WDT清0//若单片机WDT使能,在适当位置加入CLRWDT(),程序进入正常运行时,每隔一定时间均会执行CLRWDT()语句对WDT清0,芯片不会复位//如果程序陷入死循环,不会执行到CLRWDT()语句,则超出所设定的时间后,WDT溢出使芯片复位,从头(000H)开始执行,单片机恢复正常运行//PIC16F单片机,看门狗定时器的启用只能在芯片的烧写时确定,即无法用软件来开启或关闭WDT,但在PIC16f88X中可以。
//PIC16单片机的WDT基本溢出时间为18MS,由RC充放电时间确定,在-40~85度之间变化时,WDT基本溢出时间在7-33ms变化#include<pic.h>__CONFIG(0X3F3D)。
//开启WTDvoid DELAY(unsigned int)。
#define LED1 RB1main(void){TRISB=0B11111101。
OPTION=0B11111011。
//WDT的分频比为1:8,最大复位时间为18*8=144ms if(TO==0)// 若写成T0,则编译出错。
{LED1=1。
//看门狗定时器溢出,仿真时溢出TO不会清零 }elseLED1=0。
while(1){DELAY(100)。
//模拟一个运行100ms的子程序 CLRWDT()。
DELAY(200)。
//模拟一个运行200ms的子程序,此时会产生溢出(200ms>144ms)CLRWDT()。
}。
}void DELAY(unsigned int n) {unsigned int j。
char k。
for(j=0。
j<n。
j++) for(k=246。
k>0。
内部与外部看门狗定时器的比较
内部与外部看门狗定时器的比较摘要:本文对内部(集成在处理器内部)看门狗定时器(wtd)与外部(基于硬件)wdt的优势和劣势进行了对比。
内部看门狗便于设计,但容易失效。
maxq2000微控制器的wdt可以作为内部看门狗的一个例子。
基于硬件的看门狗定时器需要占用额外的电路板空间,但在对于可靠性要求较高的设计中确实不可或缺的。
本文给出了一个对照表,总结了每种wdt方案的优缺点。
引言看门狗定时器(wdt)在发生违宪的软件运转状态时用以私自登位(硬件登位)嵌入式微处理器或微控制器,失灵状态可以就是直观地引爆寄存器的某一位,或者就是射线阻碍或emi(电磁辐射)。
本文介绍了一些针对具体应用选择最佳定时器的考虑。
wdt的典型应用领域防止微处理器闭锁是wdt的一个典型应用,通常,嵌入式软件有一个“主循环”程序,用其调用子程序以实现不同的任务。
每次程序循环对wdt进行一次复位,如果任何原因造成程序循环操作失败,看门狗定时器则发生超时,对器件进行复位。
具备wdt功能的系统非常适合检测误码,中断(包含存储器故障,emi对存储器或USB振动)可能将引致临时性的误码。
这些误码可以引致处理器输出、输入数据的极性滑动,当误码没有导入至程序信息中时,微处理器将可以继续执行错误的代码。
很有可能导致处理器已经开始继续执行操作数,而非操作方式代码。
程序已经开始继续执行这种错误代码时,将导致程序运行不正常,无法提供更多看门狗清零信号,从而引致处理器登位。
合理的系统设计能在登位后恢复正常系统的正常运转。
需要注意的是,wdt不能检测瞬态故障,按照定义,只有在wdt计数器达到预定的时间间隔时才会复位处理器。
正是这一原因,需要选择一个最短超时周期,以便在系统失控之前由wdt产生复位,使系统恢复正常工作。
内部和外部wdtwdt可以内置于微处理器,例如:maxq2000微控制器;也可以是一个独立的ic(外部wdt),或作为支持asic的一部分。
无论是内部wdt,还是外部wdt,各有其优缺点。
Watch Dog Timer (WDT) 功能使用说明
Application Note
Watch Dog Timer (WDT)功能使用說明(使用內部 250KHz)
適用產品:SM59264、SM59128、SM8954A、SM8958A、SM89516A、SM894051、SM79108、 SM79164、SM59D03/04G2
100
101
110
111
溢位週期 2.048ms 4.096ms 8.192ms 16.384ms 32.768ms 65.536ms 131.072ms 262.144ms
型號: SM8954A、SM8958A、SM89516A
PS【2:0】:WDT 計數溢位週期選擇
PS【2:0】 000
001
010
b3:
MOV 21H,#0ffh
b2:
CALL clearWDT
;呼叫 clearWDT 副程式
MOV 22H,#0ffh
b1:
DJNZ 22H,b1
DJNZ 21H,b2
DJNZ 20H,b3
RET ;******************* 設定 WDTC 的 Clear Bit *******************************
Application Note
此 WDT Key 暫存器(WDTKEY,$ 8F)為控制 WDT 控制暫存器 (WDTC,$ 8E)之設定及保護。 當對 WDT Key 暫存器 (WDTKEY,$ 8F)先後寫入 1EH 及 E1H 時(須依此順序先後寫入),始可對 WDT 控制暫存器 (WDTC,$ 8E)設定。 當對 WDT Key 暫存器 (WDTKEY,$ 8F)先後寫入 E1H 及 1EH 時(須依此順序先後寫入),則 WDT 控制暫存器 (WDTC,$ 8E)已被保護,無法修改。
SAM3U中文手册(17-看门狗定时器 WDT)
SAM3U系列看门狗定时器(WDT)锁而导致的系统死锁。
它有一个12位的递减计数器,使得看门狗周期可以达到16秒(慢速时钟,32.768kHz)。
它可以产生通用的复位,或仅仅是处理器复位。
此外,当处理器处于调试模式或空闲模式时看门狗可以被禁止。
17-1.看门狗定时器框图faultReset控制ler)reset17.3看门狗定时器可以用来防止由于软件陷于死锁而导致的系统死锁。
其电源是VDDCORE。
处理器复位后,看门狗从初始值重新开始启动。
看门狗基于一个12位的递减计数器,其加载值通过模式寄存器WDT_MR中的WDV域来定义。
使用将慢速时钟128分频的信号来驱动看门狗定时器,这样看门狗周期最大值能达到16秒(慢速时钟的典型值为32.768kHz)。
处理器复位之后,WDV的值为0xFFF,对应于计数器的最大值,并且允许外部复位(备份复位时WDRSTEN为1)。
也就是说,默认情况下,复位之后看门狗就开始运行,例如上电后。
如果用户程序没有使用看门狗,则必须禁止它(对WDT_MR寄存器中的WDDIS位置位);否则必须定期进行“喂狗”,以满足看门狗要求。
看门狗模式寄存器(WDT_MR)只能写一次。
只有处理器复位才可以复位它。
对WDT_MR执行写操作,会将最新的编程模式参数重新加载到定时器中。
在普通的操作中,用户需要通过对控制寄存器(WDT_CR)中WDRSTT位置来位定期重载看门狗计数器,以防止定时器向下溢出。
对WDRSTT位进行置位后,计数器的值将立即从WDT_MR寄存器中重新加载,并重新启动;慢速时钟128分频器也被复位及重新启动。
WDT_CR寄存器是写保护的。
因此,如果预设值不正确,对WDT_CR的写操作是没有作用的。
如果发生了计数器向下溢出,且模式寄存器(WDT_MR)的WDRSTEN为1,则连接到复位控制器的“wdt_fault”信号生效,看门狗状态寄存器(WDT_SR)的位WDUNF也被设置为1。
cortex M3 arm-watchdog程序解析
看门狗定时器(WDT)✓王伟杰目录漫谈看门狗定时器1看门狗定时器试验程序解析看门狗定时器试验程序调试WatchDog 库函数2✓漫谈看门狗定时器1.看门狗定时器概述嵌入式应用中,微控制器必须可靠工作,即使进入错误状态,系统也可自动恢复。
看门狗定时器可使微控制器在进入错误状态(例如程序跑飞或死锁)后的一定时间内复位。
2.看门狗定时器原理ü其原理是在系统正常工作时,用户程序每隔一段时间执行喂狗动作,如果系统出错,喂狗间隔超过看门狗溢出时间,那么看门狗将会产生复位信号,使微控制器复位。
ü 3.看门狗定时器的“二次超时”特性ü当32位计数器在使能后倒计数到0状态时,看门狗定时器模块产生第一个超时信号,并产生中断触发信号。
在发生了第一个超时事件后,32位计数器自动重装并重新递减计数。
如果没有清除第一个超时中断状态,则当计数器再次递减到0时,且复位功能已使能,则看门狗定时器会向处理器发出复位信号。
如果中断状态在32位计数器到达其第二次超时之前被清除(即喂狗操作),则自动重装32位计数器,并重新开始计数,从而可以避免处理器被复位。
4.如何正确使用看门狗看门狗真正的用法应当是:在不用看门狗的情况下,硬件和软件经过反复测试已经通过,而在考虑到在实际应用环境中出现的强烈干扰可能造成程序跑飞的情况时,再加入看门狗功能以进一步提高整个系统的工作可靠性。
在调试自己的系统时,先不要使用看门狗,待完全调通已经稳定工作了,最后再补上看门狗功能。
可见,看门狗只不过是万不得已的最后手段而已。
函数WatchdogEnable( )函数WatchdogEnable( )的作用是使能看门狗。
该函数实际执行的操作是使能看门狗中断功能,即等同于函数WatchdogIntEnable( )。
中断功能一旦被使能,则只有通过复位才能被清除。
因此库函数里不会有对应的WatchdogDisable( )函数。
功能使能看门狗定时器原型void WatchdogEnable(unsigned long ulBase)参数ulBase:看门狗定时器模块的基址,取值WATCHDOG_BASE返回无函数WatchdogResetEnable( )函数WatchdogResetEnable( )使能看门狗定时器的复位功能,一旦看门狗定时器产生了二次超时事件,将引起处理器复位。
单片机看门狗
单片机看门狗简介单片机看门狗(Watchdog Timer,简称WDT),是一种常见于嵌入式系统中的硬件设备,用于监控系统的运行状态并在出现故障时采取相应措施。
该设备在单片机的内部,通过定时器和逻辑电路实现对系统的监控,一旦系统停止响应或发生意外情况,看门狗会自动执行预定义的操作,如复位系统等。
工作原理单片机看门狗的工作原理是基于定时器和逻辑电路的组合。
在系统正常运行时,定时器会周期性地进行倒计时,并通过逻辑电路的判断来确认系统是否正常。
如果系统一直能够及时喂狗(喂狗指的是定时器的计数周期内向看门狗喂入脉冲),看门狗认为系统处于正常状态,并在每次喂狗后重新计时。
如果在设定的时间内没有喂狗,看门狗会判断系统发生故障,进而执行相应的操作,如复位系统。
应用场景单片机看门狗在嵌入式系统中的应用场景非常广泛,特别是对于那些对系统可靠性要求较高的应用。
以下是几种常见的应用场景:1. 实时操作系统(RTOS)在实时操作系统中,单片机看门狗经常被用来监控任务的运行状态。
通过设定适当的看门狗定时器,并在每个任务执行的过程中定时喂狗,可以确保系统在出现任务堵塞或死循环等情况时得以及时恢复。
2. 工业控制系统在工业控制系统中,单片机看门狗常用于监控各个任务的运行状态,并保证系统的稳定性和可靠性。
例如,对于PLC (可编程逻辑控制器)等系统,单片机看门狗能够在检测到系统堵塞或故障时及时进行恢复,避免生产过程中的停机等问题。
3. 汽车电子领域在汽车电子领域,单片机看门狗被广泛应用于汽车电子控制模块(ECM)等关键系统。
通过监控系统的运行状态,单片机看门狗可以在检测到系统故障时进行自动恢复,并确保汽车电子系统的稳定性和可靠性。
优势与注意事项单片机看门狗作为嵌入式系统的重要组件,具有以下优势:1.提高系统可靠性:通过定期检测系统状态并自动执行相应操作,单片机看门狗可以在系统发生故障时迅速恢复系统的正常运行。
2.简化系统设计:单片机看门狗可以作为一个独立的硬件设备存在,与系统的其他部分相互独立,从而简化了系统设计和整合的复杂性。
