一 、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