飞思卡尔看门狗详解(转载)

目前接触到的单片机中都有看门狗模块,不过写过的程序也比较简单,程序能够稳定运行,所以就不怎么理会这看门狗,因此也不知道看门狗是怎么回事。

最近写了个超声波测距的程序,运行过程中程序老是会无故停止,就是死机了。因此不得不重新面对看门狗,经过两天的奋斗,终于让看门狗顺利工作了。下面记一下XS128的看门狗的相关寄存器及用法。

看门狗模块用于检测程序的正常运行,启动看门狗后,必须在看门狗复位之前向ARMCOP中依次写入0X550XAA ,这样看门狗就会重新启动计时。如果在规定时间内没有完成向ARMCOP中依次写入0X550XAA的操作,就会引起看门狗复位。这样可以使程序重新运行,减小程序跑死的危害。

看门狗的设置比较简单,只要配置好寄存器COPCTL即可用。

COPCTL的第七位为: WCOP。若写入COPCTL_WCOP=1,则看门狗行运在窗口模式下,必须在看门狗周期的后25%时间内向ARMCOP依次写入0X550XAA。若在其他时间写入,或写入其他值,都会让看门狗溢出,使单片机复位。若写入COPCTL_WCOP=0,则看门狗运行在正常模式下。当看门狗使能后,只要在看门狗溢出周期内依次向ARMCOP写入0X550XAA,使看门狗计数复零,即可。

第六位为:RSBCKBDM模式下的COPRTI 停止位。若COPCTL_RSBCK=1,则只要进入BDM模式,就停止COPRTI(实时中断)计数。若COPCTL_RSBCK=0,则在BDM模式下允许COPRTI运行。

低三位为:CR2CR1CR0。这三位是看门狗时钟分频位。当CR[2:0]=000时,看门狗COP不可用。只要CR[2:0]不为000,看门狗就开启了。当CR[2:0]=001时,分频值为(214次方)。当CR[2:0]=010时,分频值为(216次方)。当CR[2:0]=011时,分频值为(218次方)。当CR[2:0]=100时,分频值为(220次方)。当CR[2:0]=101时,分频值为(222次方)。当CR[2:0]=110时,分频值为(223次方)。当CR[2:0]=111时,分频值为(224次方)。

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

在正常运行模式下,只要配置好COPCTL,再写好喂狗程序,看门狗COP就可以工作了。

和看门狗COP相关的寄存器还有,不过一般情况下可以不管:

CLKSEL_COPWAI CLKSEL_COPWAI=1时,COP在等待模式下不可用。当CLKSEL_COPWAI=0时,COP在等待模式下可继续运行。

PLLCTL_PCE PLLCTL_PCE=1时,COP在伪停止模式下可用。当PLLCTL_PCE=0时,COP要伪停止模式下不可用。

看门狗的初始化如下:

COPCTL_WCOP=0; //正常COP模式
COPCTL_RSBCK=0; //BDM模式下允许COPRTI运行
COPCTL_CR2=1; //CR[2:0]分频值为(223次方)
COPCTL_CR1=1; //COP溢出周期=OSCCLK/CR[2:0]

COPCTL_CR0=0;

喂狗函数如下:
void feeddog()
{
ARMCOP=0X55; //
在特定时间内依次向ARMCOP写入0X55,0XAA;
ARMCOP=0XAA;

}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值