敏矽微电子Cortex-M0学习笔记14-看门狗复位实例


敏矽微电子Cortex-M0学习笔记14-看门狗复位实例文章插图
学习笔记
1、看门狗简介 看门狗定时器用于在用户程序出错并无法喂狗后对系统进行中断和复位处理 。 使用可编程的看门狗定时器 , 用户可改变定时器时间去应对不同的应用程序 。 该看门狗定时器有如下主要功能:
? 独立的频率可以设定的看门狗时钟振荡器
? 看门狗定时器可触发中断或复位
? 支持低功耗模式
看门狗的功能模块图如下所示:
敏矽微电子Cortex-M0学习笔记14-看门狗复位实例文章插图
图1 看门狗结构图
2、看门狗寄存器ME32F030的看门狗寄存器列表如下 。
敏矽微电子Cortex-M0学习笔记14-看门狗复位实例文章插图
图2 看门狗寄存器列表
2-1 看门狗模式寄存器MOD 寄存器通过WDEN和WDRESET位的组合控制看门狗的操作 。 看门狗超时可以产生看门狗复位或中断 。 如果在睡眠模式中发生看门狗中断 , 则看门狗中断会唤醒系统 。
敏矽微电子Cortex-M0学习笔记14-看门狗复位实例文章插图
图3 看门狗模式寄存器1
在这里需要注意的是 , 因为看门狗定时器可产生中断或复位两种模式 , 因此在使用时要先确定工作模式 。 具体的寄存器设置如下:
敏矽微电子Cortex-M0学习笔记14-看门狗复位实例文章插图
图4 看门狗模式寄存器2
2-2 看门狗定时器常数寄存器寄存器WDTC决定超时值 。 每当喂狗序列产生时 , TC的内容就会重新载入看门狗定时器 。 复位时 , 值0x00 FFFF会预载 。 写入小于0xFF的值会使0xFF载入TC 。 因此 , 最小超时间隔为TWDCLK×256×4 。 如果MOD中的WDPROTECT位为 , 则在看门狗计数器小于 WARNINT和WINDOW的值之前 , 尝试更改TC值将引起看门狗设置WDTOF标志 。
敏矽微电子Cortex-M0学习笔记14-看门狗复位实例文章插图
图5 看门狗常数寄存器
2-3 看门狗喂狗命令寄存器向该寄存器依序写入0xAA 和0x55将使 WDTC 的值重新载入看门狗定时器 。 非法的喂狗序列 , 可产生WDTOF标志置位 。
敏矽微电子Cortex-M0学习笔记14-看门狗复位实例文章插图
图6 看门狗命令寄存器
2-4 看门狗定时器寄存器 WDTV 寄存器用于读取看门狗定时器的当前值 。
2-5 看门狗警告中断比较值寄存器 WDWARNINT寄存器决定将产生看门狗中断的看门狗定时器值 。 当看门狗定时器与 WDWARNINT定义的值匹配时 , 将在后续WDCLK后产生中断 。 当计数器的低10位与 WARNINT的 10 位具有相同值 , 且计数器其余高位均为0时 , 便触发看门狗警告中断 。 在看门狗超时之前会有最长1023个看门狗定时器计数(4096个看门狗时钟)时间 。 如果 WARNINT设为0 , 则将与看门狗事件同时产生中断 。
2-6 看门狗窗口比较值寄存器 WDWINDOW寄存器决定在执行看门狗喂狗时允许的WDTV最大值 。 如果喂狗有效序列在WDTV达到WDWINDOW中的值之前完成 , 则将发生看门狗喂狗错误事件 。WDWINDOW会复位为WDTV最大的可能值 , 因此窗口不会生效 。 如果WDWINDOW的值小于0x100 , 将无法成功进行看门狗喂狗 。
3、看门狗操作函数在例程LIB->common->Drivers->Source文件夹内有wdt.c文件 , 这个就是提供的看门狗库函数文件 , 提供的函数如下:
3-1 看门狗初始化看门狗的初始化函数 , 首先使能看门狗时钟 , 然后将模式默认为中断模式 。
void WDT_Init (void){SYSCON->SYSAHBCLKCTRL_b.WDT_CLK =1; //使能看门狗时钟WDT->MOD_b.WDRESET=0;//默认为中断模式return;}