This thread has been locked.
If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.
您好、专家!
我要求在这里为我的客户提供帮助。 客户想要使用 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? 谢谢。
在上一行中、我想您想说"CPU2.WDRS 只能重置 CPU 2 "、不是 CPU1。 无论如何、您的理解是正确的、CPU2.WDRS 不应复位 CPU1。
您提供的代码片段不会重置 WD;它只会将 WD 计数器重置为零。
您好、Hareesh。
好的。 但 客户测试发现 CPU2的看门狗可以复位 CPU1。 我们不确定设置问题在哪里、或者 TRM 说明中是否有错误? 谢谢。
如前所述、您提供的代码片段不会重置 WD;它只会将 WD 计数器重置为零。 来自 TRM:
每个 CPU 都有一个看门狗计时器、可以选择触发持续512个 INTOSC1周期的复位。 CPU1的看门狗复位(CPU1.WDRS)会产生 XRS。 CPU2看门狗复位(CPU2.WDRS)会生成 CPU2.SYSRS 并在 CPU1上触发 NMI。
因此、CPU2.WDRS 只在 CPU1上置位 NMI。
请让客户编写一个简单的测试案例:在 CPU1上禁用 WD。 在 CPU2上启用 WD 并使其超限。 监测器-XRS 引脚。 请发送测试用例以及示波器捕获。 请在未 连接调试器的情况下执行此操作。
您好、Hareesh。
明白了。 我现在要求客户执行此步骤。 稍后会更新。
针对绍兴发布以下内容、因为螺纹已锁定
请帮助您查看下面创建的 e2e 线程问题。 最近、客户测试了在 CPU1上禁用 WD 后的波形。 在 CPU2上启用 WD 并使其超限。 监测器-XRS 引脚。 但我们发现 XRSn 都有
XRS 引脚将每4个周期拉低、 10.0277s 大约(周期性拉低)、低电平持续约70us。
XRS 引脚将每4个周期拉低、 10.0288s 大约70us、低电平的持续时间大约为70us。
因此、我们怀疑在不同条件下为什么会出现相同的结果? BTW、CPU2.WDRS 不会将低电平信号输出到 XRSn 引脚。 您能帮助了解这种情况吗? 或指导我们为什么 CPU2看门狗行为与 TRM 描述不一致? 谢谢。
绍兴市
每10秒生效的复位不能来自看门狗。 如果 OSCCLK = 10MHz、则 WD 超时频率约为13.1ms。 请让客户检查 RESC 寄存器。