我现在遇到一个看门狗的问题,由于程序需要,timer不够用,所以想把2440的看门狗设置成定时器工作方式,更改的程序写在time.c内核节拍内,(2440用timer4做节拍),程序也注册了中断
初始化代码如下:
__raw_writel(50, S3C2410_WTDAT);
__raw_writel(50, S3C2410_WTCNT);
wtcon = __raw_readl(S3C2410_WTCON);
__raw_writel(wtcon | (1<<5)|(1<<2) | (100 << 8) | (3 << 3) , S3C2410_WTCON); // 分频 使能中断 到时间后不复位系统(0<<0))
Maskvalue = __raw_readl(S3C2410_INTSUBMSK ); //S3C2410_INTSUBMSK S3C2410_INTMSK
Maskvalue &= ~( 1<< 13);
__raw_writel(Maskvalue,S3C2410_INTSUBMSK );//清除wdt附加中断掩码
Maskvalue = __raw_readl(S3C2410_INTMSK); //S3C2410_INTSUBMSK S3C2410_INTMSK
Maskvalue &= ~( 1<< 9);
__raw_writel(Maskvalue,S3C2410_INTMSK);//清除AC97中断掩码
注册部分:
setup_irq(IRQ_TIMER4, &s3c2410_timer_irq); //操作系统节拍中断timer4
setup_irq(IRQ_S3C2440_AC97,&s3c2410_wdttimer_irq); //看门狗
结构体没有复制,太多了,和timer4几乎一样的操作,但是就是不进中断。
可是把看门狗的复位功能使能:
__raw_writel(wtcon | (1<<5)|(1<<2) | (100 << 8) | (3 << 3) | 1 , S3C2410_WTCON); // 分频 使能中断 到时间后不复位系统(1<<0))
就能按照设计时间定时复位,证明看门狗已经工作。
初始化代码是ads1.2调试好的,一模一样。怀疑是中断被注册了,或者被屏蔽了,可是代码都已经打开,不知道问题出在那里。
请各位帮助下。