本帖最后由 wudianjun2001 于 2015-9-16 10:41 编辑
SAMD20的看门狗和以前用过的其他的MCU有点不一样,SAMD20的WDT有两种工作模式:正常模式和窗口模式。两种模式都需要定义超时周期,并且发生超时情况下发出早期预警中断。区别是在窗口模式下,还需要在超时周期内定义一个称为窗口的时间槽,只有在窗口内清除计数才认为程序正常运行,否则过早或过晚清除都认为程序运行异常,并发出早期预警中断。 正常模式下,WDT使能后,如果应用程序未能在超时周期到来前清除计数,WDT将发出系统复位,WDT清除计数操作可以在超时周期内任何时刻进行。预警中断只是提醒用户快点喂狗,再不喂狗,狗就要咬人了。 窗口模式下,WDT使用两个超时周期:关闭窗口超时周期及正常超时周期,在关闭窗口超时周期内不能清除计数,如果执行清除计数,WDT将发出系统复位。 本次试验使用的正常模式,测试看门狗的工作。
WDT的内部框图
WDT的工作模式
我们这次使用的正常工作模式计数示意图
操作外设首先要注意的是外设的使用时钟,我使用的是外设GLK2时钟,它是外部32.768KHZ的32分频,也就是1024HZ。这个在文件conf_clocks.h中定义
看门狗的初始化函数
看门狗的早期预警中断函数,里面搞了个计数,如果没有喂狗的话,可以看到计数器计数几次后系统复位
主程序,相关部分很简单,在定时中断里喂狗,1S喂一次,如果不喂狗的话,4S后系统复位,读者可以把喂狗的语句去掉测试下
|