一、实验平台:开发板fs2410,采用三星s3c2410的CPU,无操作系统。
二、实现功能:使能看门狗,程序运行一段时间后,系统会自动复位,从头开始执行程序。
三、实验原理:
S3C2410的看门狗定时器用于当系统被噪声或系统错误等故障时返回控制器操作状态,它产生一个128个PCLK周期的复位信号。
四、实验现象:
开发板电源开关打开后,会听到“滴”的一声(表示开机),接着四个LED形成流水灯开始闪烁。当经过一段时间后(看门狗定时器时间到),开发板会自动重启,听到“滴”的一声,接着四个LED形成流水灯开始闪烁……
五、实验总结:
本实验主要用来模拟看门狗使能后带来的现象,一般在系统初始化代码中没有使能看门狗。
六、示例代码:
/*watch_dog.c*/
#define WTCON (*(volatile unsigned long *)0x53000000)
#define WTDAT (*(volatile unsigned long *)0x53000004)
#define WTCNT (*(volatile unsigned long *)0x53000008)
#define GPBCON (*(volatile unsigned long *)0x56000010)
#define GPBDAT (*(volatile unsigned long *)0x56000014)
#define GPFCON (*(volatile unsigned long *)0x56000050)
#define GPFDAT (*(volatile unsigned long *)0x56000054)
#define GPB0_out (1<<0)
#define GPF4_out (1<<8)
#define GPF5_out (1<<10)
#define GPF6_out (1<<12)
#define GPF7_out (1<<14)
void wait(unsigned long dly)
{
for(;dly>0;dly--);
}
int main(void)
{
int i = 7,j;
GPBCON = GPB0_out; //将GPB0引脚设为输出功能
for(j=0;j<100;j++){
GPBDAT |= 0x1;
wait(1000);
GPBDAT &= 0x0;
wait(1000);
}
GPFCON = GPF4_out|GPF5_out|GPF6_out|GPF7_out;
GPFDAT |= 0xf0;
GPFDAT &= 0X0F;
wait(2000000);
GPFDAT |= 0xf0;
WTCON = ((50000000/1000000-1)<<8)|(2<<3)|1;
WTDAT = 0xffff;
WTCNT = 0xffff;
WTCON = ((50000000/1000000-1)<<8)|(2<<3)|1|(1<<5);
while(1){
GPFDAT = ~(1<<i);
if(i-- == 4)
i = 7;
wait(300000);
}
return 0;
}