裸奔程序之看门狗定时器
输出、使能上拉、关闭全部LED。(前面四句)
接着三句是设置蜂鸣器控制管脚GPB0为输出、使能上拉、关闭蜂鸣器。
我们先来看这句 rWTCON=(249<8)|(1<5)|(0<3)|(1<2);//预分频值为249,使能看门狗,分频系数为16,中断使能
通过WATCHDOG 定时器工作频率 = PCLK / {prescaler +1 } / {divider value }
{prescaler value } = 0~255, {divider value} = 16,32,64,128。
计算求得WATCHDOG工作频率为12500Hz,即每秒钟计数12500次。
再回头来看看上面那二句就很清楚的知道是定时器4秒的意思啦。
rWTDAT=50000; //设置看门狗定时器超时时间为4秒(50÷12.5)
rWTCNT=50000;
接下来是清除中断标志,注意WATCHDOG是有次级中断源的,所以需要清除二个中断挂起寄存器。
rSRCPND |=BIT_WDT_AC97;
rINTPND |=BIT_WDT_AC97;
rSUBSRCPND |= BIT_SUB_WDT; //清除中断标志
接下来是打开中断,也是打开二个中断允许寄存器。
rINTMSK &= ~(BIT_WDT_AC97);
rINTSUBMSK &= ~(BIT_SUB_WDT);//开中断
接下来是设置中断的起始地址,将中断服务程序的起始地址映射到内存。
pISR_WDT_AC97=(unsigned)Wdt_Int;//设置中断程序入口
我们进入中断服务程序看看:
——————————————————————————————————————————————
void __irq Wdt_Int(void)
{
rSRCPND |=BIT_WDT_AC97;
rINTPND |=BIT_WDT_AC97;
rSUBSRCPND |= BIT_SUB_WDT; //清除中断标志
rGPBDAT =1; //蜂鸣器响
Delay();
rGPBDAT =0; //蜂鸣器响一段时间
}
——————————————————————————————————————————————
进入中断服务程序后,首先清楚中断标志,接着让蜂鸣器响一下,接着关闭。
最后进入死循环,前面四句是循环点亮LED灯,接着重新赋值给WTCNT,实现喂狗功能。
rWTCNT=50000; //喂狗 没喂狗蜂鸣器很响
——————————————————————————————————————————————
到这里,我们WATCHDOG 定时器的讲解结束啦。
裸奔程序看门狗定时 相关文章:
- Windows CE 进程、线程和内存管理(11-09)
- RedHatLinux新手入门教程(5)(11-12)
- uClinux介绍(11-09)
- openwebmailV1.60安装教学(11-12)
- Linux嵌入式系统开发平台选型探讨(11-09)
- Windows CE 进程、线程和内存管理(二)(11-09)