您好、专家!
我要求在这里为我的客户提供帮助。 客户想要使用 CPU1.WDRS 和 CPU2.WDRS 来复位 CPU1和 CPU2。
我们测试了以下代码、与 TRM 手册下表中描述的代码有些偏差。
#define WD_PRESCALER_1 0
#define WATCHDOG_PRESCALER WD_PRESCALER_1
#define WatchDog_enable(WD_PRESCALER) \
EALLOW; \
WdRegs.WDKEY.bit.WDKEY = 0x0055; \
WdRegs.WDKEY.bit.WDKEY = 0x00AA; \
WdRegs.WDCR.all = WD_CHECK|WD_PRESCALER; \
EDIS;
#define WatchDog_restart() \
EALLOW; \
WdRegs.WDKEY.bit.WDKEY = 0x0055; \
WdRegs.WDKEY.bit.WDKEY = 0x00AA; \
EDIS;
#define WATCHDOG_RESTART()
WatchDog_restart()
#define WATCHDOG_ENABLE() \
WatchDog_enable(WATCHDOG_PRESCALER)
void main(void)
{
WATCHDOG_ENABLE();
While(1)
{
WATCHDOG_RESTART();
……
}
}
测试结果:
CPU1 WD RESET -> CPU1 + CPU2均 复位
CPU2 WD RESET -> CPU1 + CPU2均 复位
但从下表可以看出、CPU1.WDRS 可以复位 CPU1和 CPU2、但 CPU2.WDRS 只能复位 CPU1。
您能帮助了解上述问题吗? 为什么 CPU2.WDRS 可以 同时复位 CPU1和 CPU2? 谢谢。
