搞定了,这个地方的问题:CySysWdtWriteMatch((uint16)CySysWdtReadCount()+ILODelayCycles);不能用CySysWdtWriteMatch((uint16)CySysWdtReadMatch ()+ILODelayCycles);
总体思路就是,刚开始初始化看门狗复位时间,禁能看门狗定时器中断;进深度睡眠之前要配置看门狗定时器定时时间,打开看门狗定时器中断;看门狗定时器中断函数里执行禁能看门狗定时器,重新配置看门狗复位时间;
初始化:
ILODelayCycles = WDT_COUNT1_MATCH;
CySysWdtWriteMatch(ILODelayCycles);
/* Configure WDT to be 15-bit wraparound up-counter - 1 MSB is ignored */
CySysWdtSetIgnoreBits(1);
/* Start the WDT */
CySysWdtEnable();
WdtIsr_StartEx(WDT_ISR);
WdtIsr_Disable();
进睡眠之前:
CySysWdtClearInterrupt(); //feed watchdog...
WDT_TMR_IRQ_DISABLE();
ILODelayCycles = WDT_MATCH_VALUE_80MS;
CySysWdtWriteMatch((uint16)CySysWdtReadCount()+ILODelayCycles);
WDT_TMR_IRQ_ENABLE();
WdtIsr_Enable();
中断:
CySysWdtClearInterrupt(); //feed watchdog...
WDT_TMR_IRQ_DISABLE();
ILODelayCycles = WDT_COUNT1_MATCH;
CySysWdtWriteMatch(ILODelayCycles);
WdtIsr_Disable();
|