(十一)看门狗驱动设计

一 、S5P6818看门狗的功能

1、产生复位信号:当系统由于受到噪声或干扰而出现了死机,看门狗可以让系统复位,重新开始工作。
2、普通定时器:产生周期性的中断,16bits的定时器
 

二、看门狗的系统框图

在这里插入图片描述

思考:
1、如果看门狗的复位时间设置10s,第一分频值、第二次分频值、计数值应该如何设置?
1)第一次分频值(255+1) <= 256 ----->781250
2)第二次分频值:128 ---->6103
3)看门狗的计数寄存器:6103*10 = 61030 <65535

2、如果要看门狗“喂狗”,如何实现?
在看门狗计数寄存器减到0之前,再给其赋一个初始值=61030,如果10s中之内没有“喂狗”,看门狗就产生一个复位信号,造成CPU重启
 

三、看门狗的寄存器

在这里插入图片描述

1、WTCON

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

2、WTDAT
在这里插入图片描述

3、WTCNT
在这里插入图片描述

4、WTCLRINT

在这里插入图片描述
 

四、看门狗驱动的设计注意

//linux/drivers/watchdog/nxp_wdt.c
1、获取系统时钟,并打开时钟

wdt_clock = clk_get(NULL, "pclk");
	if (IS_ERR(wdt_clock)) {
		dev_err(dev, "failed to find watchdog clock source\n");
		ret = PTR_ERR(wdt_clock);
		goto err_map;
	}

	clk_enable(wdt_clock);
	wdt_freq = clk_get_rate(wdt_clock);

------->这个步骤要看具体硬件平台,有些平台需要,有些平台不需要。
2、还回时钟,并关闭时钟

clk_disable(wdt_clock);
clk_put(wdt_clock);

3、硬件复位

nxp_soc_peri_reset_set(RESET_ID_WDT);
nxp_soc_peri_reset_set(RESET_ID_WDT_POR);

4、如何去取消内核中看门狗驱动
1)
linux/drivers/watchdog/nxp_wdt.c ---->看门狗的驱动,这个驱动是否编译可以看Makefile

2)
vi linux/drivers/watchdog/Makefile
obj-$(CONFIG_NXP_WDT) += nxp_wdt.o ----> 编译了驱动

CONFIG_NXP_WDT —>条件编译选项:Y M N
3)
$ cp arch/arm/configs/GEC6818_defconfig .config
#make menuconfig ----查找条件编译选项

Symbol: NXP_WDT [=y] │
│ Type : tristate │
│ Prompt: NXP Watchdog │
│ Defined at drivers/watchdog/Kconfig:352 │
│ Depends on: WATCHDOG [=y] && ARCH_CPU_SLSI [=y] │
│ Location: │
│ -> Device Drivers │
│ -> Watchdog Timer Support (WATCHDOG [=y]) │
│ Selects: WATCHDOG_CORE [=y]

Device Drivers —>
[ ] Watchdog Timer Support —>

保存退出
4)
$ cp .config arch/arm/configs/GEC6818_defconfig

5)
#./mk -k

6)boot.img ----->烧写到eMMC

 
五、附录
示例代码:wdt_drv1.c
示例代码:wdt_drv2.c

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值