看门狗cop模块

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

看门狗模块(COP) (1)

第一节看门狗COP简介 (1)

第二节看门狗模块相关寄存器 (1)

2.1看门狗设置存器COPCTL (1)

第三节看门狗模块应用实例 (2)

看门狗模块(COP)

第一节看门狗COP简介

看门狗模块用于检测程序的正常运行,启动看门狗后,必须在看门狗复位之前向ARMCOP 中依次写入0X55和0XAA ,这样看门狗就会重新启动计时。当用户程序跑飞时在规定时间内没有向ARMCOP中依次写入0X55和0XAA的操作,就会引起看门狗复位,看门狗产生一个强制系统复位。这样可以使程序重新运行,减小程序跑死的危害。

第二节看门狗模块相关寄存器

2.1看门狗设置存器COPCTL

WCOP看门狗喂狗模式设定位

WCOP=1,则看门狗行运在窗口模式下,必须在看门狗周期的后25%时间内向ARMCOP依次写入0X55和0XAA。若在其他时间写入,或写入其他值,都会让看门狗溢出,使单片机复位。

WCOP=0 则看门狗运行在正常模式下。当看门狗使能后,只要在看门狗溢出周期内依次向ARMCOP写入0X55和0XAA,使看门狗计数复零,即可。

RSBCK,BDM模式下的COP和RTI 停止位。若COPCTL_RSBCK=1,则只要进入BDM模式,就停止COP和RTI(实时中断)计数。若COPCTL_RSBCK=0,则在BDM模式下允许COP 和RTI运行。

CR2、CR1、CR0。这三位是看门狗时钟分频位。当CR[2:0]=000时,看门狗COP不可用。

只要CR[2:0]不为000,看门狗就开启了。当CR[2:0]=001时,分频值为(2的14次方)。当CR[2:0]=010时,分频值为(2的16次方)。当CR[2:0]=011时,分频值为(2的18次方)。当CR[2:0]=100时,分频值为(2的20次方)。当CR[2:0]=101时,分频值为(2的22次方)。当CR[2:0]=110时,分频值为(2的23次方)。当CR[2:0]=111时,分频值为(2的24次方)。

看门狗的溢出频率为:COP溢出频率=OSCCLK / CR[2:0]。OSCCLK为晶振频率

第三节看门狗模块应用实例

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

龙丘MC9S12XS128多功能开发板

Designed by Chiu Sir

E-mail:chiusir@

软件版本:V1.2

最后更新:2011年4月5日

相关信息参考下列地址:

网站:

淘宝店:

------------------------------------

Code Warrior 5.0

Target : MC9S12XS128

Crystal: 16.000Mhz

busclock:8.000MHz

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

#include //工程通用的宏文件

#include "derivative.h" //单片机硬件型号文件

#define LED PORTB //定义连接发光二级管的PORTB口数据寄存

//为LED,写'0'亮,写'1' 灭

#define LED_dir DDRB //定义连接发光二级管的PORTB诜较蚣拇嫫?

//为LEDCPU_dir,写'0'做输入口,写'1'做输出口

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

/* 初始化看门狗*/

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

void INIT_COP(void)

{

COPCTL = 0x07; // 7位WCOP=0 设置为正常COP模式

// 6位RSBCK=0设置在BDM模式下允许COP和RTI运行

// 210位CR[2:0]=111 COP溢出频率=OSCCLK / CR[2:0]

// COP溢出频率=16M/2^24

//设置看门狗复位间隔为1.048576s

}

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

/* 延时函数*/

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

void delay(void)

{

unsigned int i;

for(i=0;i<50000;i++);

}

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

/* 主函数*/

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

void main(void) {

DisableInterrupts; //禁止所有中断打开

INIT_COP(); //初始化看门狗模块

LED_dir = 1; //设置连接发光二级管的PORTB口为输出口

LED = 0; //初始化发光二极管为亮

delay(); //延时一定时间,使人眼能识别发光二极管闪烁现象LED = 1; //发光二极管为灭

EnableInterrupts; //打开所有中断打开

for(;;)

{

_FEED_COP(); //喂狗函数

//在特定时间内依次向ARMCOP写入0X55,0XAA;

delay();

}

}

相关文档
最新文档