看门狗简单介绍

本文解析了看门狗定时器(WDT)的工作原理及在嵌入式系统中的应用。介绍了如何通过配置寄存器来控制定时器的时钟源、分频比以及定时周期,并解释了‘喂狗’的概念。同时,还探讨了倍频与分频技术,以及U-Boot中对WDT的操作。
结构框图

先看一下wdt的结构框图

这里写图片描述
从上面的图中粗略可以看出 :
PCLK_PSYS经过两级分频后生成看门狗的时钟周期
定时的时间写入到WTDAT寄存器中,WTCNT中自动会递减1,定时时间到了,也就是WTCNT减到0的时候,会产生中断信号或者是复位信号
具体要产生那种信号 这是需要对WTCON寄存器的某位进行设置的,

软件是怎么样来操纵硬件的,就是对它的寄存器进行位操作(控制寄存器、数据寄存器、状态寄存器)
模式 : 整体读出 ---- 修改对应的位 ---- 写入

看到了 C语言的位运算在嵌入式中是非常重要的了吧,比如需要操纵LCD、I2C总线....就是操作LCD控制器、IIC控制器...,就是对这些控制器的寄存器进行位操作,

那么你现在知道“喂狗”是怎么一回事了把,就是再WTCNT减到0之前,对WTDAT寄存器中写值即可

那么 什么是PCLK_PSYS ,为什么要分频,分频是一个什么概念,下面详细说 分频与倍频

PCLK_PSYS

先看一幅图:
这里写图片描述

例子可能不是太恰当,帮助你理解 :
发电厂发出的原始几十V的电流 经过变压器 升压到几千伏进行传输,这么高的电流显然不能被直接使用,需要再经过变压器降压到220V、380V 到家庭电器、工业设备使用 ,而我们使用的手机则又需要进一步的通过充电器降压到5V的电才能给手机设备使用。
设计思路:
外部晶振 + 内部时钟发生器 产生的时钟频率太低,外设需要一定的时钟频率才能工作,且各自需要的时钟频率不同,所以 就先倍频后形成一个高频的,然后各个外设再根据自己的需要来通过分频器进行分频得到自己的时钟频率,由上面的图可以知道 我们是可以通过编程来定制外设的时钟来源、分频系数,从而形成最后自己使用的时钟频率的。分频、倍频的背面就是一堆在工作的复杂电路,暂不研究。

寄存器

1 : WTCON
操作WTCON可以使能/禁止看门狗定时器、选择时钟的来源、使能/禁止中断等

这里写图片描述

2 : WTDAT
这里写图片描述
WTDAT中的值 会自动的加载到 WTCNT中。原文是:the value of WTDAT is automatically reloaded into WTCNT

3:WTCNT
这里写图片描述
这里要注意一点,要先设置好定时的时长,然后再enable wdt

4 : WTCLRINT
这里写图片描述
清中断,写入任何值均可清除中断,读这个register 是不允许的。

所以,操作关门狗的步骤就有了
1 : 设置预分频器和分频器的值,目的是获取时钟周期
2 : 使能或禁止中断和复位信号
3 : 写入定时时长
4 : 使能看门狗

定时器
usb主机控制器(XHCI)驱动中使用到了定时器,请见我以前博文的浅析,这里主要说的是裸机 
     http://blog.youkuaiyun.com/leesagacious/article/details/51254112
U-Boot中对wdt的操作

先看一幅图 (这里和wdt没有关系,既然我画都画好了,大家看看也好吧,哦哦)
这里写图片描述
下面是 u-boot 中 start.S中的源码

reset:
    @;mrs r0,cpsr
    @;bic r0,r0,#0x1f
    @;orr r0,r0,#0xd3
    @;msr cpsr,r0
    /*
        设置CPU禁止 IRQ、FIQ,ARM状态 、SVC模式
        msr  : move to state register from register  
    */
    msr cpsr_c,#0xd3

这里写图片描述

/* 
    这是 再U-Boot 第一阶段 check reset status之后  就关闭了看门狗
    Disable Watchdog 
    关闭看门狗
    ELFIN_WATCHDOG_BASE  : WTCON的地址
*/
    ldr r0, =ELFIN_WATCHDOG_BASE    /* 0xE2700000 */
    mov r1, #0
    str r1, [r0]  

将 0 写入到了 WTCON中 diable watch dog timer,看门狗被压在五指山下 想复位、胡闹 是不可能了,哈哈!这里写图片描述

watchdog内核线程
实验验证
### TLF35584 看门狗功能介绍 TLF35584 是一款高效的多电压电源管理芯片,其中集成了多种保护机制,包括外部看门狗和窗口看门狗功能。这些功能旨在提高系统的可靠性和稳定性,防止因软件异常或硬件故障而导致的系统崩溃。 #### 外部看门狗功能 外部看门狗是一种简单的定时器电路,用于监测微控制器或其他处理器的行为。如果微控制器未能在规定的时间间隔内重置看门狗计时器,则认为系统发生故障,触发相应的恢复操作。具体来说: - **工作原理**:当启用外部看门狗功能时,TLF35584 的内部计数器会持续递增直到达到预设的最大值[^1]。 - **触发条件**:一旦计数值超过设定阈值而未被清零,看门狗将发出复位信号以重启系统。 ```c // 示例代码:如何通过 MCU 定期喂狗 void watchdog_feed() { // 假设 I/O 口 P0.7 连接到 TLF35584 的看门狗输入引脚 GPIO_SetPinHigh(P0, 7); // 发送高电平脉冲 delay_us(10); // 维持一段时间 GPIO_SetPinLow(P0, 7); // 返回低电平 } ``` #### 窗口看门狗功能 相比传统的外部看门狗,窗口看门狗增加了时间范围约束,即要求主机必须在一个特定的时间窗内完成喂狗动作。这可以有效检测到过早或过晚的喂狗行为,进一步增强系统的安全性。 - **时间窗口设置**:TLF35584 支持可编程的时间窗口宽度调整,允许用户根据实际需求定义最小和最大喂狗周期。 - **错误处理**:若主机未能按时执行喂狗指令或者超出指定区间,窗口看门狗模块将会激活应急措施,比如中断请求或强制断电。 --- ### 设计与使用指南 为了充分利用 TLF35584 中集成的看门狗功能,在设计阶段需注意以下几个方面: 1. **硬件连接** - 将目标单片机的一个通用输出端子链接至 TLF35584 对应的看门狗输入管脚。 - 确认线路阻抗匹配并采取必要的滤波手段减少干扰影响。 2. **固件实现** - 编写应用程序逻辑时加入定期调用 `watchdog_feed()` 函数的部分,确保正常运行期间始终满足看门狗的要求。 - 考虑增加额外的状态检查环节来验证当前环境是否适合继续运作;如果不符合理想状况则主动停止喂养流程从而促使自我修复过程启动。 3. **调试技巧** - 利用仿真工具模拟各种可能发生的场景测试整个架构表现情况。 - 记录每次触发事件的具体参数以便后续改进算法模型。 ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值