看门狗简介:
在系统运行时,可能会在外界的干扰下,出现程序跑飞的情况,看门狗的出现就是为了解决这种故障。看门狗是一个独立于系统的计数器即它的时钟和系统时钟不是同一个时钟,在看门狗时钟的驱动下,计数器会不断地计数,并且每隔一段时间会重置计数器(喂狗),然后重新开始计数,若没有接收到喂狗信号,说明系统出现故障,就要发送给系统发送复位信号,使系统重启。

APB watchdog
APB watchdog 这个IP,由ARM提供,watchdog 模块基于32位重装载寄存器的向下计数器,可以通过设置计数器值,产生常规中断:WDOGINT。计数值会在每个使能的看门狗时钟上升沿减1。
当计数值减到0时,计数停止,并产生复位请求。在下一个使能的看门狗时钟沿,重装载寄存器使计数器重新装载数值,然后重新开始向下计数。如果在计数器下一次达到0时中断未被清除,看门狗模块将重新启动复位信号。

看门狗模块在发生软件故障时对系统进行复位,从而提供从软件崩溃中恢复的方法。可以根据需要启用或禁用看门狗装置。以下是APB watchdog 模块:


信号描述:


WDOGCLK(input)
看门狗模块的输入时钟,这个时钟必须和PCLK同步。

WDOGCLKEN(input)
看门狗时钟的使能信号,其作用是使能看门狗输入时钟,只有在时钟使能信号WDOGCLKEN位1,并且在WDOGCLK的上升沿,计数器才会向下计数。

WDOGRESn(input)
看门狗时钟域的复位输入。

WDOGINT(output)
看门狗中断。

WDOGRES(output)
看门狗超时复位。

ECOREVNUM(input)
该输入连接到外设ID寄存器3中的ECO版本号( ECO revision number ),以显示芯片设计过程ECO进程的版本更改。可以将此信号连接到低电平,或将其连接到特殊的连接单元,以便更改硅网表或更低级别(如硅掩模)的ECO修订号。


和看门狗有关寄存器


**装载寄存器: WDOGLOAD **
其作用是设置计数器初始值,只要写入新的初始值,计数会立刻重新开始计数,计数的最小值为1。

数值寄存器:WDOGVALUE
查看计数器当前值。

控制寄存器:WDOGCONTROL
其作用是能够让软件控制看门狗模块。
高30未保留,当作0来读取。
第1位:复位启用位,置1时使能复位,看门狗中断和看门狗复位都被使能。当选择这种模式时,看门狗计数器到达指定的值时,将置位其中断标志位 ,并产生看门狗中断请求,看门狗计数器到达零时复位微控制器。看门狗在到达设置值之前喂狗也会导致看门狗复位。
第0位:中断启用位,将会产生看门狗报警中断,但不会产生看门狗复位。当选择这种模式时,看门狗计数器到达指定的值时,将置位看门狗中断标志位 ,并产生看门狗中断请求。
清除中断计数器:WDOGINTCLR
写任何值到此寄存器,都会清楚看门狗中断,然后从WDOGLOAD 那里重新加载数值。

原始中断状态寄存器:WDOGRIS
WDOGRIS寄存器用来查看计数器的原始中断状态。该值与控制寄存器的中断启用位INTEN进行AND运算,以创建屏蔽中断,该屏蔽中断被传递到中断输出引脚。
第0位:计数器的原始中断状态

中断状态寄存器:WDOGMIS
WDOGMIS寄存器用来查看计数器的屏蔽中断状态。该值是原始中断状态与控制寄存器的INTEN位的逻辑与,该值与传递到中断输出引脚的值相同。
第0位,用来启用计数器中断

锁定寄存器:WDOGLOCK
用来禁用对所有其他寄存器的写入访问,目的是为了防止恶意软件禁用看门狗功能。写入值0x1ACCE551可启用对所有其他寄存器的写入访问。写入任何其他值都会禁用写入访问。从该寄存器读取仅返回到最低位:
最低位为0:访问已启用,未锁定。(默认)
最低位为1:访问禁止,已锁。

集成测试控制寄存器:WDOGITCR
用来启用集成测试模块,在此模式下,测试输出寄存器直接控制屏蔽中断输出、WDOGINT和复位输出,
第0位:置1时,处于集成测试模式

集成测试输出置位寄存器:WDOGITOP
当WDOGITOP寄存器处于集成测试模式时,该寄存器中的值直接驱动启用的中断输出和复位输出。
第1位:处于集成测试模式时,WDOGINT上的值输出。
第0位:处于集成测试模式时WDOGRES上的值输出。

将看门狗模块挂到总线上
1.添加看门狗官方例程到工程,由ARM提供

2.在系统顶层例化看门狗的顶层

3.在apb_slave_mux,添加看门狗模块,生成看门狗的选择信号
4,添加中断信号
Cortex-M3支持不可屏蔽中断NMI,其优先级仅次于复位,看门狗定时器被连接到内核上的NMI引脚,看门狗只要发生中断了,就会跳进NMI_Handler做处理。

验证部分
功能验证步骤
1.搭建硬件系统
将外设模块添加动系统中。

2.编写测试代码
对外设功能的验证,写软件的目的是控制外设寄存器,写C代码就是给寄存器赋值,通过软件控制了寄存器,外设根据寄存器的不同赋值体现不同功能,查看功能是否符合预期就是功能验证,也是本实验的目的。

3.行为级仿真
写好软件之后,将生成的hex文件路径添加到系统的BRAM中,就开始行为级仿真,仿真波形要结合软件来看,如果能将软件正确执行,就可以往下走了。

4.上板验证
通过行为级仿真不代表实验成功,仿真终归是个模拟过程,和真正电路的运行还有差别,所以必须有上板这一过程,将比特流文件下载到开发板上之后,打开串口调试助手,查看上板结果是否符合预期。

验证程序:
每个外设ip都要经过验证,验证IP的目的在于保证IP功能和时序的正确性。本例程只需通过写软件,编写功能函数,通过调用这些功能函数,验证个寄存器是否达到预期状态。ARM提供了watchdog_demo.c文件作为验证参考。以下是watchdog_demo.c中各个函数功能说明。
int watchdog_id_check(void)
检查ID,也就是查看watchdog这个外设是否存在,如果和硬件匹配,证明存在看门狗模块。ID是用做芯片管理的,和watchdog本身功能无关,不作为关注的重点。

int sysctrl_id_check(void)
用作系统管理,检查sysctrl这个模块是否存在如果和硬件匹配,代表存在。

void NMI_Handler(void)
看门狗中断处理函数。测试看门狗复位时,要在NMI中断里面,直到溢出。

void watchdog_init(unsigned int cycle, int type)
初始化看门狗,用传进来的形参分别给给load寄存器和CTRL寄存器赋值。

void watchdog_set(unsigned int cycle)
更新看门狗计数器数值。

void watchdog_unlock(void)
解锁看门狗访问。

void watchdog_lock(void)
锁定看门狗访问。

void watchdog_irq_clear(void)
清除中断请求。

void main_prog_part_1(void)
测试主程序的第一部分,在这里检查id,初始化看门狗,设置喂狗条件,设置产生NMI和reset。

void main_prog_part_2(void)
测试主程序的第二部分,在看门狗复位后执行。

int main (void)
测试程序开始执行的地方,在这里调用其他所有子模块,再加上一定逻辑,使各个测试函数有序执行。

keil工程
arm提供测试工程,位置在ARM_DesignStart\Cortex-M3_IP\m3designstart\logical\testbench\testcodes\watchdog_demo,直接编译此工程是无法生成hex文件的,需要修改一些设置,首先,在user处添加更爱更改为如下代码:
勾选 Run #1,并在后面添加如下的代码:
fromelf -cvf .\watchdog_demo.axf --vhx --32x1 -o code.hex
勾选 Run #2,并在后面添加如下代码:
fromelf -cvf .\watchdog_demo.axf -o code.txt
如下图所示:

在debug下面选择调试器,然后取消勾选,并编辑初始化文件code.ini
下面是code.ini代码:
reset
_WDWORD(0xE000ED08,0x00000000);
LOAD watchdog_demo.axf
SP = _RDWORD(0x00000000);
PC = _RDWORD(0x00000004);

在debug设置里 更改为如下:

然后对keil工程进行编译,把生成的hex文件路径添加到BRAM中

接下来行为及仿真。

看门狗(APB watchdog)简介,各个寄存器简介,把看门狗挂到APB总线上,看门狗的验证测试(1)相关推荐

  1. independent watchdog 独立看门狗 window watchdog 窗口看门狗

    看门狗(watchdog) 防止硬件因外界电磁场干扰或其他导致不能正常工作的,导致不可预料后果,对芯片进行实时检测的模块或芯片称为看门狗. 看门狗工作过程 启动看门狗后,有一个计数器从最大值递减,计数 ...

  2. 8086芯片寄存器简介

    8086芯片寄存器简介 通用寄存器: 数据寄存器: AX (Accumulator):累加寄存器 BX (Base):基地址寄存器 CX (Count):计数器寄存器 DX (Data):数据寄存器 ...

  3. 分布式锁 - Redisson的看门狗(watchdog)机制

    分布式锁 - Redisson的看门狗(watchdog)机制 前言 本篇文章从Redisson的加锁(tryLock)入手,带大家由源码来了解一下watchdog的自动延迟加锁操作,如果对Redis ...

  4. JESD204接口调试总结——Xilinx JESD204B IP AXI寄存器简介

    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 JESD204接口调试总结--Xilinx JESD204B IP AXI寄存器简介 一般来说,如果在IPcore配置正确的话,不太需 ...

  5. JESD204接口调试总结——Xilinx JESD204C IP AXI寄存器简介

    JESD204接口调试总结--Xilinx JESD204C IP AXI寄存器简介 关于JESD204C的寄存器如下所示: 重要的寄存器: 020: 复位 这个复位和JESD204B的复位不太一样, ...

  6. 8086寄存器简介 (转载从 博客园-首页原创精华区 作者:Zachary.XiaoZhen)

    引子 打算写几篇稍近底层或者说是基础的博文,浅要介绍或者说是回顾一些基础知识, 自然,还是得从最基础的开始,那就从汇编语言开刀吧, 从汇编语言开刀的话,我们必须还先要了解一些其他东西, 像  CPU ...

  7. STC15W4K32S4系列概述及寄存器简介

    STC15W4K32S4系列新增6通道增强型带死区控制高精度 PWM波形发生器应用     STC15W4K32S4系列的单片机集成了一组(各自独立6路)增强型的PWM波形发生器.PWM波形发生器内部 ...

  8. 【Android 属性动画】属性动画 Property Animation 简介 ( 属性动画简介 | 属性动画特性 )

    文章目录 一.属性动画简介 二.属性动画特性 一.属性动画简介 属性动画简介 : 1.动画制作框架 : 属性动画系统 , 允许你 将任何可变的操作制作成动画 , 其功能很强大 ; 2.基本功能 : 使 ...

  9. DL之CNN:卷积神经网络算法简介之原理简介——CNN网络的3D可视化(LeNet-5为例可视化)

    DL之CNN:卷积神经网络算法简介之原理简介--CNN网络的3D可视化(LeNet-5为例可视化) CNN网络的3D可视化 3D可视化地址:http://scs.ryerson.ca/~aharley ...

最新文章

  1. java编程中的点_Java的21个技术点和知识点归纳(转)
  2. external libraries里没有maven包_Maven企业实战系列(三):彻底看懂maven的体系结构...
  3. MySQL String Types
  4. 第十天内容《基础交换十》
  5. 自动化运维工具之Zabbix发现_自动注册及web页面状态监控(四)
  6. 7台不同配置M1 MacBook Pro真实测试
  7. MySQL 常用的查询命令
  8. adb脚本选择语句_Python开发:王者荣耀自动刷金币脚本
  9. php实现标签打印,标签打印软件怎么实现批量套打标签?
  10. 话费充值哪里便宜?这样充帮我省了不少钱,推荐给您
  11. css3优惠卷上方锯齿_CSS不规则卡片,纯CSS制作优惠券样式,CSS实现锯齿样式
  12. RESCRIPt:序列分类参考数据库管理工具
  13. java的第十一章总结(枚举,泛型)
  14. 《穷查理宝典》晨读笔记~投资的三条智慧
  15. 单火开关和零火开关的区别
  16. excel合并两列内容_比Excel公式快10倍,史上最牛合并表格工具来了!!
  17. python批量下载微博贴评论图片
  18. 保护小程序,防止反编译:打造不怕反编译的小程序
  19. 关于解决主机和虚拟机ping不通的问题
  20. 阿里云服务器优惠活动地址

热门文章

  1. Java 蓝桥杯 数列特征
  2. 解决gensim报错AttributeError: type object ‘Word2Vec‘ has no attribute ‘load_word2vec_format‘
  3. php读写分离是什么意思,php mysql读写分离
  4. python基础--numpy.random
  5. Python 三元表达式、列表推导式、生成器表达式
  6. 阅读笔记 火球UML大战需求分析4
  7. 使用laypage进行分页
  8. 在3.5下实现无配置WCF服务
  9. java 蓝桥杯算法训练 数组查找及替换
  10. 使用Zuul构建API Gateway