会以 WD_STAT_WA 寄存器中 TOKEN[3:0] 和 ANSW_CNT[1:0] 状态位的组合形式向 MCU 提出问题。ANSW_CNT[1:0] 的默认值为 ANSW_CNT[1:0] = 11b,当问题得到正确回答时,该值会递减。当问题回答不正确或良好事件结束时,ANSW_CNT[1:0] 的值会复位为 ANSW_CNT[1:0] = 11b。
看门狗使用令牌计数器(图 7-12 中的 TOKEN_CNT[3:0] 位)和线性反馈移位寄存器 (LFSR) 生成 4 位 TOKEN[3:0]。如图 7-12 所示,可以使用 BANK1 中 WDT_QA_CFG 寄存器中的 POLY[1:0] 配置 LFSR 架构。在典型应用中,无需更改 POLY[1:0] 的默认值 00b。然而,如果需要不同的 LFSR 架构,可以配置 POLY[1:0]。图 7-11 中的示意图表明看门狗如何生成问题。
在看门狗启动状态期间,LFSR 用初始值 SEED[3:0] 设置,该值位于 BANK1 的 WDT_QA_CFG 寄存器中。SEED[3:0] 的默认值为 0000b。
在良好事件结束时,令牌计数器会递增,由于图 7-12 中所示的多路复用器和逻辑组合,token[3:0] 的值发生变化。
一旦令牌计数器达到最大值 1111b,该计数器会复位并向 LFSR 提供一个时钟脉冲。时钟脉冲将存储在 LFSR 中的值左移,这会更改 TOKEN[3:0] 的值。在 SEED[3:0] = 0000b 的特殊情况下,LFSR 的位 0 在令牌计数器首次复位时递增。随后的令牌计数器复位提供左移 LFSR 的典型时钟脉冲。如图 7-12 中所列,左移时,种子周期的值在 1 到 15 之间循环。
可以使用 FDBK[1:0](BANK1 中的 WDT_QA_CFG 寄存器)来配置生成 TOKEN[3:0] 的多路复用器器件。无需更改 FDBK[1:0] 的默认值 00b,需要重点注意的是,更改 FDBK[1:0] 也会改变计算参考应答所需的逻辑公式。下面列出了不同的参考应答逻辑公式:
对于 FDBK[1:0] = 00b:
- 参考应答[0] = TOKEN[0] XOR (TOKEN[3] XOR ANSW_CNT[1])
- 参考应答[1] = TOKEN[0] XOR (TOKEN[1] XOR TOKEN[2]) XOR ANSW_CNT[1]
- 参考应答[2] = TOKEN[0] XOR (TOKEN[3] XOR TOKEN[1]) XOR ANSW_CNT[1]
- 参考应答[3] = TOKEN[2] XOR (TOKEN[0] XOR TOKEN[3]) XOR ANSW_CNT[1]
- 参考应答[4] = TOKEN[1] XOR ANSW_CNT[0]
- 参考应答[5] = TOKEN[3] XOR ANSW_CNT[0]
- 参考应答[6] = TOKEN[0] XOR ANSW_CNT[0]
- 参考应答[7] = TOKEN[2] XOR ANSW_CNT[0]
对于 FDBK[1:0] = 01b:
- 参考应答[0] = TOKEN[1] XOR (TOKEN[2] XOR ANSW_CNT[1])
- 参考应答[1] = TOKEN[1] XOR (TOKEN[1] XOR TOKEN[1]) XOR ANSW_CNT[1]
- 参考应答[2] = TOKEN[3] XOR (TOKEN[2] XOR TOKEN[1]) XOR ANSW_CNT[1]
- 参考应答[3] = TOKEN[1] XOR (TOKEN[3] XOR TOKEN[3]) XOR ANSW_CNT[1]
- 参考应答[4] = TOKEN[0] XOR ANSW_CNT[0]
- 参考应答[5] = TOKEN[2] XOR ANSW_CNT[0]
- 参考应答[6] = TOKEN[3] XOR ANSW_CNT[0]
- 参考应答[7] = TOKEN[1] XOR ANSW_CNT[0]
对于 FDBK[1:0] = 10b:
- 参考应答[0] = TOKEN[2] XOR (TOKEN[1] XOR ANSW_CNT[1])
- 参考应答[1] = TOKEN[2] XOR (TOKEN[0] XOR TOKEN[1]) XOR ANSW_CNT[1]
- 参考应答[2] = TOKEN[1] XOR (TOKEN[1] XOR TOKEN[1]) XOR ANSW_CNT[1]
- 参考应答[3] = TOKEN[0] XOR (TOKEN[2] XOR TOKEN[3]) XOR ANSW_CNT[1]
- 参考应答[4] = TOKEN[2] XOR ANSW_CNT[0]
- 参考应答[5] = TOKEN[1] XOR ANSW_CNT[0]
- 参考应答[6] = TOKEN[2] XOR ANSW_CNT[0]
- 参考应答[7] = TOKEN[0] XOR ANSW_CNT[0]
对于 FDBK[1:0] = 11b
- 参考应答[0] = TOKEN[3] XOR (TOKEN[0] XOR ANSW_CNT[1])
- 参考应答[1] = TOKEN[3] XOR (TOKEN[3] XOR TOKEN[1]) XOR ANSW_CNT[1]
- 参考应答[2] = TOKEN[1] XOR (TOKEN[0] XOR TOKEN[1]) XOR ANSW_CNT[1]
- 参考应答[3] = TOKEN[3] XOR (TOKEN[1] XOR TOKEN[3]) XOR ANSW_CNT[1]
- 参考应答[4] = TOKEN[3] XOR ANSW_CNT[0]
- 参考应答[5] = TOKEN[0] XOR ANSW_CNT[0]
- 参考应答[6] = TOKEN[1] XOR ANSW_CNT[0]
- 参考应答[7] = TOKEN[3] XOR ANSW_CNT[0]
图 7-13 中包含 FDBK[1:0] = 00b 时的应答计算示例代码。
图 7-13 FDBK[1:0] = 00b 时的看门狗应答计算代码