新闻中心

S3C2440-WDT

作者: 时间:2016-12-02 来源:网络 收藏




看门狗定时器计数寄存器:

WTCNT包含看门狗定时器的当前值。



下面是看门狗复位的程序:

#define WTCON (*(volatile unsigned *) 0x53000000)
#define WTDAT (*(volatile unsigned *) 0x53000004)
#define WTCNT (*(volatile unsigned *) 0x53000008)

int WdtMain(){
WTCON = 0x64<<8; //Prescaler=100,时钟频率为3.9KHz
WTCON |= (0x1<<5)|(0x1); //看门狗定时器超时,发出复位信号
WTCON |= 0x3<<3; //Division=128
WTDAT = 0x2DC6; //使复位时间为3s
WTCNT = 0x2DC6;
while(1){}
return 0;
}

看门狗定时程序:
#define rGPBCON (*(volatile unsigned *)0x56000010)
#define rGPBDAT (*(volatile unsigned *)0x56000014)
#define rGPBUP (*(volatile unsigned *)0x56000018)
#define rSRCPND (*(volatile unsigned *)0x4a000000)
#define rINTMSK (*(volatile unsigned *)0x4a000008)
#define rINTPND (*(volatile unsigned *)0x4a000010)
#define rSUBSRCPND(*(volatile unsigned *)0x4a000018)
#define rINTSUBMSK(*(volatile unsigned *)0x4a00001c)
#define rWTCON (*(volatile unsigned *)0x53000000)
#define rWTDAT (*(volatile unsigned *)0x53000004)
#define rWTCNT (*(volatile unsigned *)0x53000008)
#define _ISR_STARTADDRESS 0x33ffff00
#define pISR_WDT_AC97 (*(unsigned *)(_ISR_STARTADDRESS+0x44))
#define U32 unsigned int

void delay(int a)
{
int k,i,j;
for(k=0;k<a;k++)
for(i = 0; i < 0xff; i++)
for(j = 0; j < 0xff; j++)
;
}

void __irq WDT_ISR(void){
rGPBDAT |= 0x1;
delay(100);
rGPBDAT &= 0xfe;
rSUBSRCPND = 0x1<<13;
rSRCPND = 0x1<<9; //SRCPND 通过写入数据清零,如果不清零,会反复进行请求
rINTPND = 0x1<<9;
}

int Main(){
rGPBCON = 0xfffc;
rGPBCON |= 0x1;
rWTCON = 0x64<<8; //Prescaler=100
rWTCON |= (0x1<<5)|(0x1<<2); //WDT计时器使能,中断使能
rWTCON |= 3<<3;
rWTDAT = 0x1E84; //使中断时间为2s
rWTCNT = 0x1E84;
rSUBSRCPND = 0x1<<13;
rSRCPND = 0x1<<9; //SRCPND 通过写入数据清零,如果不清零,会反复进行请求
rINTPND = 0x1<<9;
rINTSUBMSK = "(0x1<<13);
rINTMSK = "(0x1<<9);
pISR_WDT_AC97 = (U32)WDT_ISR;
while(1);
return 0;
}

上一页 1 2 下一页

关键词: S3C2440WD

评论


技术专区

关闭