一、开发环境
(1)硬件平台:FS2410
(2)主机:Ubuntu 10.10
二、看门狗相关的配置信息:
(1)看门狗输入时钟频率
t_watchdog = 1/( PCLK / (Prescaler value + 1) / Division_factor )
(2)看门狗计时初始值的设置
三、详细代码
watchdog.c:
#include "s3c2410.h"
void delay(unsigned long max) //延迟函数
{
for(; max > 0; max--);
return;
}
int main(void)
{
int i;
GPBCON |= (0x1 << 0); //设置GPB0为输出
for(i = 0; i < 100; i++)
{ //设置GPB0输出方波从而控制蜂蜜器响
GPBDAT |= (0x1 << 0);
delay(2000);
GPBDAT &= ~(0x1 << 0);
}
GPFCON = GPFCON & (~(0xff) << 8) | (0x55 << 8); //设置GPF4-7输出
GPFDAT |= (0xf << 4); //设置4个LED灯熄灭
WTCON = WTCON & ~(0xff << 8) | (50 << 8) | (2 << 3) | (1 << 0); //设置Prescaler value为50, drivider value 为64,使能复位
WTDAT = 0xffff; //写入计数初值
WTCNT = 0xffff;
WTCON |= (1 << 5); //启动看门狗
//形成流水灯
while(1)
{
GPFDAT &= ~(0xf << 4);
delay(2000000);
GPFDAT |= (0xf << 4);
delay(2000000);
}
return 0;
}
start.S:
.text
.global _start
_start:
#define WATCHDOG 0x53000000
ldr r0, =WATCHDOG
mov r1, #0
str r1, [r0]
ldr sp, =1024*4
bl main
loop:
b loop
Makefile:
watchdog.bin: start.S watchdog.c
arm-none-linux-gnueabi-gcc -c start.S -o start.o
arm-none-linux-gnueabi-gcc -c watchdog.c -o watchdog.o
arm-none-linux-gnueabi-ld -Ttext 0x30008000 start.o watchdog.o -o watchdog
arm-none-linux-gnueabi-objcopy -O binary -S watchdog watchdog.bin
clean:
rm -f *.o watchdog.bin
在开发板的uboot上输入以下:
tftp 30008000 watchdog.bin
go 30008000
实验现象是:
滴的一声后,四个led灯闪烁,一会儿后系统自动复位。。