您好、专家!
我要求在这里为我的客户提供帮助。 客户想要使用 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? 谢谢。