WCTCHDOG实验(裸奔)

本文介绍了一个使用 S3C2410 CPU 的开发板实验,通过使能看门狗定时器,实现程序运行一段时间后自动复位的功能。实验包括开发板初始化、LED流水灯显示、看门狗定时器配置及自动重启过程的详细步骤。
 一、实验平台:开发板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;
}


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值