飞思卡尔kinetis L系列芯片之最简单模块watchdog

来源:互联网 发布:淘宝助理mac版本 编辑:程序博客网 时间:2024/05/17 22:58

Kinetis L是飞思卡尔32位微控制器/单片机,基于ARM® Cortex®-M0+内核,集成了丰富的功能和特性,具有出类拔萃的低功耗性能和扩展性。

官网链接:freescale kinetis L serial


watchdog用来监控系统跑飞,程序跑飞后通过引起复位来重启程序。


飞思卡尔kinetis系列芯片对于新手来讲还是有些门槛的,MCU内多大几十个IP模块,不消说低功耗管理中设计多个模块一起协作,单说ADC采用,ADC ip里寄存器多的一塌糊涂。kinetis复杂的设计也给了程序设计者更多的灵活性。


用了一年的kinetis K/L系列芯片,发现watchdog可以算是其最简单的模块了,只需要两组语句即可实现开启看门狗和喂狗(其他采用默认设置)。

开启看门狗在SIM模块中,SIM_COPT寄存器第2、3位不仅用来开启看门狗,通过写数值可以设置看门狗的超时时间。


开启看门狗:

SIM_COPT = 3<<2;//开启看门狗,并设置timeout为1024ms

SIM_COPT[2,3]

00b:禁能看门狗

01b: 开启看门狗,并设置timeout为32ms

10b:开启看门狗,并设置timeout为256ms

11b:开启看门狗,并设置timeout为1024ms


喂狗:

SIM_SRVCOP = 0x55;
SIM_SRVCOP = 0xAA;


设计程序时,要记住经常喂狗,不能超过设置的1024ms,如果超过,就会导致重启复位,达不到检测程序跑飞目的。尤其是调用一些延迟函数时,大家要注意,如果要延迟5000ms,可以将5000ms分为多个短时间延迟,每次延迟后喂下狗。


delay(5000);

改为

delay(1000ms);

SIM_SRVCOP = 0x55;
SIM_SRVCOP = 0xAA;

delay(1000);

SIM_SRVCOP = 0x55;
SIM_SRVCOP = 0xAA;

...........


PS:

1.SIM_COPT寄存器在系统启动后只能写一次,之后再写该寄存器并不生效,所以最好将需要设定的值一次写进去。

2.在一些低功耗模式下看门狗近进入static状态,计数器停止计数,退出该低功耗模式后继续计数,看门狗在各个模式下的功能如下图,引自KL16第七章电源管理章节

VLPRVLPWStopVLPSLLSVLLSxwatchdog正常工作,
CPO中停止工作正常工作停止工作,
在PSTOP2中正常工作停止工作停止工作关闭


0 0
原创粉丝点击