开发板FS4412-WDT实验

目录

一、WDT简介

二、 4412下的WDT控制器   

 三、WDT寄存器详解

四、 WDT编程

一、WDT简介

WDT Watch Dog Timer,即看门狗计时器,其主要作用是当发生软件故障时可产生复位信号使SOC(系统级芯片)复位,其本质是一个计数器

 WDT工作原理:每当计数器减到0就会让开发板复位

        开发板上电后程序正常执行,计数器也会相应的从设定的数减小,当程序运行一段时间后会向计数器刷新新数值,然后重新进行正常执行,再过一段时间又给计数器写值,以此类推
        当程序出现错误后,程序不能正常运行也就不会每隔一段时间给计数器刷新,当计数器变为零就会复位

出于安全考虑,使用WTD     

二、 4412下的WDT控制器   

 Exynos 4412 SCP中的监视器计时器(WDT)是一种计时设备。由于噪声和系统错误导致故障后,可以使用此设备恢复控制器的操作(WDT产生复位信号)。你可以使用WDT作为一个norma 116位间隔计时器请求中断服务(作为普通定时器使用) 

  

 1. 可以产生两种信号中断信号和复位信号,通过WTCON[0]WTCON[2]来控制模式

2.一级分频,使用PCLK时钟100m,使用8位分频,WTCON[15:8]控制倍数,一级分频

二级分频:不能随意分频有固定值

  

 时间计算,减一次花的时间

    

 三、WDT寄存器详解

WAT 相关寄存器

  1.WTCON寄存器

  

 2.WTDAT 寄存器

实时中断,定期产生一个中断  

 3.WTCNT 寄存器

储存当前递减的值,[15:0],不超过65535 =2^16  

四、 WDT编程

 

#include "extnos_4412.h"

void Delay(unsigned int Time)
{
	while(Time--);
}

int main()
{

	//为了方便说明将寄存器不同位拆开赋值,自己也可以直接算出然后给这个寄存器直接赋值
	/* 设置一级分频*/
	WDT.WTCON = WDT.WTCON | (0xFF << 8);

	/* 设置二级分频*/
	/*WTCNT递减频率 = PLCK(100000000)/(0xFF + 100000000)/128 = 3052*/
	WDT.WTCON = WDT.WTCON | (0x3 << 3);

	/* 禁止WDT产生中断信号*/
	WDT.WTCON = WDT.WTCON & (~(1 << 2));

	/*使能WDT产生复位信号*/
	WDT.WTCON = WDT.WTCON | 1;

	/*设置计数器的初始初始值/
	WDT.WTCNT = (3052 * 5);//倍数就是多少秒减完

	/*使能WDT,计数器开始递减,要放在最后面 */
	WDT.WTCON = WDT.WTCON | (1 << 5);

while(1)
{
	printf("WDT.WTCNT = %d\n",WDT.WTCNT);
		
	Delay(100000);
}
	return 0;
}

串口初始化在开发板内部已经初始化好了,上电后将初始化串口,所以我们使用printf查看计数器的值不需要再初始化一次串口直接打印需要的值就可以

实验现象:5秒后CPU重置,没有赋予刷新值,减完后程序开始复位

  

赋予刷新值3052后,每次减到2962不复位,刷新了值重新减

  

​​​​​​   

 实际使用是WDT.WTCNT赋值使用的

#include "extnos_4412.h"

void Delay(unsigned int Time)
{
	while(Time--);
}

int main()
{

	//为了方便说明将寄存器不同位拆开赋值,自己也可以直接算出然后给这个寄存器直接赋值
	/*设置一级分频*/
	WDT.WTCON = WDT.WTCON | (0xFF << 8);

	/* 设置二级分频*/
	/*WTCNT递减频率 = PLCK(100000000)/(0xFF + 100000000)/128 = 3052*/
	WDT.WTCON = WDT.WTCON | (0x3 << 3);

	/*禁止WDT产生中断信号*/
	WDT.WTCON = WDT.WTCON & (~(1 << 2));

	/* 使能WDT产生复位信号*/
	WDT.WTCON = WDT.WTCON | 1;

	/*设置计数器的初始初始值/
	WDT.WTCNT = (3052 * 5);//倍数就是多少秒减完

	/* 使能WDT,计数器开始递减,要放在最后面 */
	WDT.WTCON = WDT.WTCON | (1 << 5);

while(1)
{
	printf("WDT.WTCNT = %d\n",WDT.WTCNT);
	/*喂狗*/
	WDT .WTCNT = 3052; 
	Delay(100000);
}
	return 0;
}

 

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值