ARM篇七--WDT看门狗实验
一、前言
本篇使用华清远见的FS4412
开发板,进行WDT开门狗实验
,知识包含看门狗
介绍,开门狗使用原理,看门狗代码编写、看门狗实验。
二、准备工作
FS4412开发板
,我用的是华清远见的FS4412开发板- ubuntu下linux操作系统(包含交叉编译工具)
serial-com8
程序烧入执行工具- 开发板电路原理图、芯片手册
- 开发程序模板
开发板资料、交叉编译工具、程序烧入工具下载(包含教程)
开发板可选择到华清远见官网进行租赁。
工程模板文件下载
三、看门狗简介
Watch Dog Timer即
看门狗定时器
,其主要作用是当发生软件故障
时可产生复位信号
使芯片复位,其本质是一个计数器。
因此在使用看门狗时,需要每隔一段时间给计数器设定值,以防止计数器减到0,跟现实生活中,给狗加狗粮的行为类似。
Exynos 4412 芯片
中看门狗包括的功能:
- 支持正常间隔
定时器模式
与中断请求
。 - 如果定时器计数值达到0(超时),激活内部复位信号。
- 支持级触发
中断机制
四、看门狗寄存器介绍
1、看门狗结构
可以看出控制看门狗的寄存器主要是WTDCON寄存器
。
2、看门狗寄存器
3、WTCON寄存器
- 一级分频器分频数在
1~256
,而我们写0~255
,内部寄存器自动+1
4、WTCNT寄存器
- 看门狗计数器,使用看门狗时,该寄存器
自动递减
- 计数范围是
0~65535
五、看门狗代码编写
1、程序
#include "exynos_4412.h"
/**
* @description: 延时函数
* @param {int} i- 延时计数
* @return {*}
*/
void delay(int i)
{
while(i--);
}
/**
* @description: 看门狗初始化
* @param {*}
* @return {*}
*/
void WDT_Init()
{
/* 设置一级分频 156 = 0x9B+1*/
WDT.WTCON = WDT.WTCON & (~(0xFF<<8)) | (0x9B<<8);
/* 设置二级分频 64- 10 */
WDT.WTCON |= (0x2<<3);
//看门狗频率为100000000/156/64 约等为10000Hz
/* 关闭中断 */
WDT.WTCON &= (~(0x1<<2));
/* 打开产生复位信号 */
WDT.WTCON |= 1;
/* 设置计数器计数值 */
WDT.WTCNT = (5*10000); //5秒
/* 使能看门狗 */
WDT.WTCON |= (0x1<<5);
}
int main()
{
WDT_Init();
while(1)
{
printf("WDT.WTCNT = %d\n", WDT.WTCNT); //打印计数器值
delay(100000);
}
return 0;
}
2、程序烧入步骤
1.输入make
生成.bin文件
2.将.bin文件
复制到共享文件夹
①
②
③
输入:
cp ARM_LED.bin /mnt/hgfs/cca
将文件复制到cc文件夹
3.打开serial-com8
,连接开发板(COM2
接口),烧入程序
①查看端口
②打开serial-com8设置
③接通开发板电源,迅速按enter
键,使其快速进入裸机模式。
④烧入程序
输入:
loadb 40008000
选择可执行文件烧入
烧入成功:
⑤执行程序
输入:
go 40008000
六、实验现象
计数器递减,到0时:
开发板复位。
到这里就结束啦!