WDTCTL = WDTPW | WDT_ARST_250;
这是用 ACLK 32.768KHZ 的时钟,大概250毫秒,要小于这个时间内喂狗。 喂狗是用同样的语句来喂就行了。
void main()
{
WDTCTL = WDTPW + WDTHOLD; //停止看门狗
//WDTCTL = WDTPW+SSEL1;//+ WDTHOLD; //停止看门狗
//WDT_ARST_1000;
_DINT(); //关中断
BordBord_Config(); //板子配置
_EINT(); //开中断
P1OUT=0xFF;
P2OUT=0xFF;
P3OUT=0xFF;
OLED_reset(); //OLED硬件复位
OM_ini(); //OLED液晶初始化
clr_scr(); //清屏
uchar button = 120; //按键定时计数
WDTCTL = WDTPW|WDT_ARST_250;
//WDT_ARST_250;
//WDTCTL = WDTPW + WDTCNTCL;
while(1)
{
WDTCTL = WDTPW|WDT_ARST_250;
if (Keybuf != 0)
{
HandleKey();
button = 120;
}
else
{
_NOP();
}
What_Key();
} 增加喂狗次数试试。如果你把看门狗时钟选择ACLK的话,应该不会到8M的。 在仿真时是不可以打开看门狗的,因为后台时钟旧一直在走的。 xiatianzhang 发表于 2012-11-26 16:58 static/image/common/back.gif
800k
800k的时钟是来自于DCO吗?8M是在MCLK上还是在SMCLK上呢? 暂时关掉看门狗,等软件调试完成后再打开看门狗。
我没留意F149的内部低频RC是多少。MCLK是给CPU内核使用的,SMCLK是用于外设的。你可以看下使用指南中的时钟部份。
我的意见只是供你参考。
根据使用指南的框图,F149并没有800K的时钟上,只有 ACLK 和 SMCLK 两种。
ACLK 就是外部的 32768HZ的时钟。
而 SMCLK 是内部DCO的输出时钟。
如果为了省电,那看门狗不建议选择SMCLK,因为MCU一进入省电模式,基本上DCO是会关掉的。 xiatianzhang 发表于 2012-11-26 22:31 static/image/common/back.gif
我看了系统的主时钟也即使MCLK是跑8M的。其余的像AD 定时器。UART等都是外设使用的是SMCLK。看门狗也使用 ...
首先DCO是不能用作ACLK的,所以你的ACLK肯定没配置到DCO上,所以你的ACLK是失效的。看门狗默认在ACLK失效的情况下,切换到了SMCLK上,所以他跑的是8M。以下是时钟框图。
页:
[1]