本帖最后由 fjjjnk1234 于 2014-7-26 14:30 编辑
HELPER2416学习笔记3——WATCHDOG定时器
参与HELPER2416开发板助学计划
WATCHDOG定时器的主要功能:
(1)像一般16位定时器一样用于产生周期性的中断;
(2)用于发出复位信号以重启失常的系统。
通过S3C2416数据手册的WATCHDOG定时器结构图可以了解到:WATCHDOG定时器的工作频率由PCLK经过8位预分频器分频后,再次分频得到4种频率:16分频、32分频、64分频、128分频。
WATCHDOG定时器相关的寄存器:
(1)WTCON寄存器
0位:当定时器达到0时,此位若为0则不输出复位信号;
此位为1则输出复位信号。
2位:此位为0则禁止中断;此位为1则使能中断。
[4:3]位:选择分频系数:16、32、64、128。
5位:此位为0则停止定时器启动;此位为1则启动定时器。
[15:8]位:选择预分频系数:0~255。
(2)WTDAT寄存器
WTDAT寄存器用来决定WATCHDOG定时器的超时周期。在定时器启动后,当WTCNT寄存器数值减到0时,WTDAT寄存器的值会自动传入WTCNT寄存器。
(3)WTCNT寄存器
在启动WATCHDOG定时器前,必须往这个寄存器写入初始计数值。启动定时器后,它减1计数,计数到0时,中断使能则发出中断,WATCHDOG功能被使能则发出复位信号,装载WTDAT寄存器的值并重新计数。本实验主要通过LED灯测试WATCHDOG定时器的复位系统的作用。
WATCHDOG_test.s:- .code 32
- .globl _start
- _start:
- @set the watchdog
- ldr r0,=0x53000008 @WTCNT Address
- ldr r1,=0x0000ffff
- str r1,[r0]
- ldr r2,=0x53000000 @WTCON Address
- ldr r1,=0x00000f39
- str r1,[r2]
- ldr r3,=0x53000004 @WTDAT Address
- ldr r1,=0x0000ffff
- str r1,[r3]
- @set the GPBCON
- ldr r0,=0x56000010
- mov r1,#0x00000004
- str r1,[r0]
- led_on:
- ldr r2,=0x56000014
- mov r1,#0x00000000
- str r1,[r2]
- bl led_on
复制代码 makefile:- OBJ=WATCHDOG_test
- ALL_s=$(wildcard *.s)
- $(OBJ).bin:$(ALL_S)
- arm-linux-gcc -o $(OBJ).o -c -g $(ALL_s)
- arm-linux-ld -o $(OBJ) -Ttext 0x40000000 -g $(OBJ).o -o $(OBJ)_elf
- arm-linux-objcopy -O binary -S $(OBJ)_elf $(OBJ).bin
- clean:
- rm *.o *.bin *_elf
复制代码 WATCHDOG定时器工作频率的计算方法:
以上面的程序举例:Prescaler value=15
Division_factor=128
通过串口打印的信息可以知道PCLK=66MHz
所以t_watchdog=1/[66000000/(15+1)/128]=0.000031
而WTCNT寄存器的值为0x0000ffff即65535
所以LED灯亮的时间大约为t=0.000031*65535=2.031585秒之后WATCHDOG定时器复位系统,LED灯熄灭。
论坛ID:fjjjnk1234
提交时间:2014.07.26