功能描述
今天纪录先辑芯片中功能强大的EWDG外设,作为看门狗的升级版本,他拥有很多值得一讲的功能,以下是UM中对于EWDG的描述
这个图是我画的整体功能框图
EWDG对外的功能有图可见,有两个输入两个输出
输入:1.通过特定寄存器修改EWDG的配置
2.喂狗操作
输出:1.触发外部中断 2.触发软件复位
接下来按功能讲解各个部分
工作时钟
首先是时钟选择,一共有两种可供选择的时钟作为EWDG的工作时钟:32K外部时钟与主频时钟,主频时钟以MHZ为单位,可以让看门狗快速响应,同时增加精度
而32K外部时钟可以在MCU处于低功耗模式时继续运行
以下是驱动中对于两种时钟选择的定义
在低功耗模式下,可以对外部时钟进行降频,也可以中止看门狗的计时;最慢可降低至1/4的频率;以下是驱动中的定义
这两种设置均可在初始化看门狗时进行配置,也可通过驱动中的函数进行修改
看门狗作为一种监控系统是否正常工作的外设,必须保证自己工作的可靠,这个可靠性是从如下几个方面体现的
喂狗寄存器
如果需要重置看门狗的计数器,即喂狗,需要往喂狗寄存器中写入特定的32位字符,如果写入错误,则触发中断/复位
喂狗前解锁
如果使能了喂狗寄存器的锁定功能,则需要在喂狗前进行解锁,解锁的方法则是往锁定寄存器中写入密码,密码有以下几种
在用户实际使用中,不需要进行复杂的操作,仅需要在初始化时指定你是否需要使用该功能,以及选用哪种方案进行解锁,在驱动中,开发者已经贴心的完成了所有功能的封装
当在初始化时指定了某种解锁方案并开启使能,你只需要调用喂狗操作即可,在喂狗操作中,会运行以下函数,进行喂狗前的解锁
如果解锁失败,同样可以触发中断/复位
窗口模式
你可以指定允许喂狗的时间段,仅在该时间段内的喂狗操作有效,如果喂狗时机错误,同样触发中断/复位
以下是驱动中对于喂狗窗口上下限的定义
需要注意的是,0就是默认值,默认值允许在[下限窗口,复位时间]任意时间喂狗,所以把它定义位ewdg_window_upper_timeout_period_8_div_16 = 0
毕竟下限最小为ewdg_window_lower_timeout_period_8_div_16
关键参数寄存器保护
为了防止EWDG运行中,突然因为奇怪的原因,假设把EWDG使能给关了,那对于喂狗做再多的判断以及安全措施,就都没有意义了;因此,对于配置寄存器的修改,也可以上锁,上锁后需要先解锁才能修改对应寄存器
中断和复位
最后则是不及时喂狗会触发的两个结果
- 外部中断
- 系统复位
在EWDG中,复位与中断寄存器是两个独立的寄存器,用户通过初始化时指定复位/中断的时间,当计数器达到对应时间时,触发对应信号
常规的操作肯定是在复位前触发中断信号,提醒MCU马上就要复位了,在中断中进行喂狗或警示操作;当然,如果不配置中断的时间也是可以的,在默认情况下不会触发中断
以上就是对于UM中EWDG描述的全部内容,然而在驱动中,还有一种特殊的属性
use_lowlevel_timeout
如果查看驱动中的Init函数,可以发现他的使能与否决定了timeout_interrupt_ticks 与timeout_reset_ticks两个寄存器的配置方式
即复位和中断寄存器的配置方式
在默认情况下,use_lowlevel_timeout使能,用户通过指定复位时间来配置寄存器;如果将use_lowlevel_timeout改为False,则需要直接指定寄存器的值,不推荐使用