N76E003配置看门狗watchdog

发布者:温柔花香最新更新时间:2022-07-07 来源: csdn关键字:N76E003  配置看门狗  watchdog 手机看文章 扫描二维码
随时随地手机看文章

说明

本例子只做软件异常时重置系统用,不需要用作定时器或唤醒用,所以不用打开watchdog中断。需要注意的是:如果上次启动开启过watchdog reset,想要关闭,下次启动必须清除CONFIG4内的WDT配置,否则watchdog还是启动的。


主要代码只是在CONFIG4寄存器看门狗定时器WDT做使能关闭的配置([7:4],0xF0关闭重置只做定时器,0x50和其他任意值开启重置,但0x50在空闲或掉电模式下停止运行),由于是页擦除,所以先保存CONFIG0到CONFIG4的值再写入。

在这里插入图片描述

在操作前要执行TA时效访问保护。

在这里插入图片描述

参考代码

#include "N76E003.h"

#include "SFR_Macro.h"

#include "Function_define.h"

#include "Common.h"

#include "Delay.h"


#define EN_WATCHDOG


#define CRLF "rn"


#define     CFG_READ            0xC0

#define     CFG_ERASE           0xE2

#define     CFG_BYTE_PROGRAM    0xE1


int is_watchdog_reset_enabled(void)

{

UINT8 cf4;


set_IAPEN;

IAPAL = 0x04;

IAPAH = 0x00;

IAPCN = CFG_READ;

set_IAPGO;                                  //get CONFIG4 data

cf4 = IAPFD;

clr_IAPEN;


//printf("watchdog: cf4=0x%bX"CRLF, cf4);


if ((cf4 & 0xF0) == 0xF0)

{

return 0;

}

else if ((cf4 & 0xF0) == 0x50)

{

return 1; // watchdog reset enabled, but disabled in idle and power down mode

}

else

{

return 2; // watchdog reset enabled, but enabled in idle and power down mode

}

}


#ifdef EN_WATCHDOG

#define FEED_DOG()  set_WDCLR


/***********************************************************************

WDT CONFIG enable 

warning : this macro is only when ICP not enable CONFIG WDT function

copy this marco code to you code to enable WDT reset.

************************************************************************/

void Enable_WDT_Reset_Config(void)

{

set_IAPEN;

    IAPAL = 0x04;

    IAPAH = 0x00;

    IAPFD = 0x5F; //0x0F; // CONFIG4

    IAPCN = CFG_BYTE_PROGRAM;

    set_CFUEN;

    set_IAPGO;                                  //trigger IAP

while((CHPCON&SET_BIT6)==SET_BIT6);          //check IAPFF (CHPCON.6)

    clr_CFUEN;

    clr_IAPEN;

}

#else

/***********************************************************************

WDT CONFIG disable 

warning : this macro is for CONFIG already enable WDT Reset to disable.

Since erase CONFIG is full page 

step 1. storage CONFIG value in RAM

step 2. modify RAM CONFIG4 WDT value to disable 

step 3. erase CONFIG page

step 4. re writer CONFIG.

************************************************************************/

void Disable_WDT_Reset_Config(void)

{

UINT8 cf0,cf1,cf2,cf3,cf4;


set_IAPEN;

IAPAL = 0x00;

IAPAH = 0x00;

IAPCN = CFG_READ;

set_IAPGO;                                  //Storage CONFIG0 data

cf0 = IAPFD;

IAPAL = 0x01;

set_IAPGO;                                  //Storage CONFIG1 data

cf1 = IAPFD;

IAPAL = 0x02;

set_IAPGO;                                  //Storage CONFIG2 data

cf2 = IAPFD;

IAPAL = 0x03;

set_IAPGO;                                  //Storage CONFIG3 data

cf3 = IAPFD;

IAPAL = 0x04;

set_IAPGO;                                  //Storage CONFIG4 data

cf4 = IAPFD;

cf4 |= 0xF0; //Moidfy Storage CONFIG4 data disable WDT reset


set_CFUEN;

IAPCN = CFG_ERASE; //Erase CONFIG all

IAPAH = 0x00;

IAPAL = 0x00;

IAPFD = 0xFF;

set_IAPGO;


IAPCN = CFG_BYTE_PROGRAM; //Write CONFIG

IAPFD = cf0;

set_IAPGO;

IAPAL = 0x01;

IAPFD = cf1;

set_IAPGO;

IAPAL = 0x02;

IAPFD = cf2;

set_IAPGO;

IAPAL = 0x03;

IAPFD = cf3;

set_IAPGO;

IAPAL = 0x04;

IAPFD = cf4;

set_IAPGO;


clr_CFUEN;

clr_IAPEN;

}

#endif /* EN_WATCHDOG */


void init_watchdog(void)

{

printf("watchdog: WDCON=0x%bX"CRLF, WDCON);

if (WDCON & SET_BIT3) // WDTRF

{

printf("WARNING: Last time, the system was reset by the watchdog!"CRLF);

clr_WDTRF;

}


//----------------------------------------------------------------------------------------------

// WDT Init !!! ENABLE CONFIG WDT FIRST !!!

// Warning:

// Always check CONFIG WDT enable first, CONFIG not enable, SFR can't enable WDT reset

// Please call Enable_WDT_Reset_Config() function to enable CONFIG WDT reset

//----------------------------------------------------------------------------------------------


if (is_watchdog_reset_enabled())

{

#ifndef EN_WATCHDOG

Disable_WDT_Reset_Config(); //Software disable WDT reset CONFIG setting

return;

#endif

}

else

{

#ifdef EN_WATCHDOG

Enable_WDT_Reset_Config(); //Software enable WDT reset CONFIG setting

#endif

}


#ifdef EN_WATCHDOG

TA=0xAA;TA=0x55;WDCON|=0x07; //Setting WDT prescale 

set_WDCLR; //Clear WDT timer

while((WDCON|~SET_BIT6)==0xFF); //confirm WDT clear is ok before into power down mode

// EA = 1;

set_WDTR; //WDT run

#endif


}


void main(void)

{

init_watchdog();


while(1)

{

#ifdef EN_WATCHDOG

FEED_DOG();

#endif


printf("main: do something.."CRLF);

}

}

关键字:N76E003  配置看门狗  watchdog 引用地址:N76E003配置看门狗watchdog

上一篇:N76E003开发笔记(关于使用N76E003过程遇到的问题)
下一篇:N76E003配置串口异步双工收发

推荐阅读最新更新时间:2024-11-13 14:08

s3c2410 watchdog详解
1.什么是watchdog? watchdog,中文名称叫做“看门狗”,全称watchdog timer,从字面上我们可以知道其实它属于一种定时器。然而它与我们平常所接触的定时器在作用上又有所不同。普通的定时器一般起记时作用,记时超时 (Timer Out)则引起一个中断,例如触发一个系统时钟中断。熟悉windows开发的朋友应该用过windows的Timer,windows Timer的作用与方才所讨论的定时器在功能上是相同的,只是windows Timer属于软件定时器,当windows Timer记时超时则引起App向System发送一条消息从而触发某个事件的发生。我们从以上的描述可知不论软件定时器或硬件定时器他们的作用都是
[单片机]
单片机 N76E003 实现 QC2.0 QC3.0 USB Type-C协议
/*************笔记**************** 1、本QC方案采用PWM调节电压。 2、 3、 4、 5、 ***********************************/ /* -----------------------------------------宏定义-----------------------------------------*/ #define Voltage_06_PWM 18 //0.6V的占空比 /* -----------------------------------------头文件-----------------------------------------*/
[单片机]
单片机 <font color='red'>N76E003</font> 实现 QC2.0 QC3.0 USB Type-C协议
N76E003 IIC OLED
#include N76E003.h #include Common.h #include Delay.h #include SFR_Macro.h #include Function_define.h #include math.h #include oledfont.h #define u8 unsigned char #define u32 unsigned int /*SCL P1.3 SDA P1.4*/ #define OLED_SCLK_Clr() SCL=0 #define OLED_SCLK_Set() SCL=1 #define OLED_SDIN_Clr() SDA=0 #
[单片机]
<font color='red'>N76E003</font> IIC OLED
N76E003红外编码程序及NEC协议分析
N76E003是一款带有flash的增强型8位8051内核单片机,指令集与标准的80C51完全兼容,并且内置16M晶振,故在51上使用的红外发射程序,修改一下定时器数据(晶振不同),就可在N76E003上运行,本文重点说一下NEC红外协议,电路等。完整工程文件可以看此处 由于 NEC协议需要工作在38kHZ载波上,在N76E003中我们使用定时器0来产生,由下图可得知相关寄存器设置方法 定时器0配置代码如下 //总中断开 EA=1; //设置定时器0位16位模式 TMOD=0x01; //定时器0中断允许 ET0=1; //设定定时大小 38K 等于 26us中断一次
[单片机]
<font color='red'>N76E003</font>红外编码程序及NEC协议分析
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved