我们想用看门狗定时器作为安全机制。然而,我们似乎不能让它运行。system_init()函数确实启动了它的运行,但随后它在几个地方被关闭(冻结),比如外围init()函数(它直接操作寄存器),以及main_func()在睡眠之前。但是我们似乎不能在任何地方找到它被恢复(通过wdg_resume()我希望)。我猜这应该是在醒着的时候发生的,但我们找不到。然而,文档暗示它将运行。你能告诉我应该在哪里恢复吗?或者我需要自己在某处添加一个wdg_resume()(例如在arch_resume_from_sleep())?
谢谢,
保罗。
设备:
嗨pvmellor,
缺省情况下,看门狗定时器会在系统唤醒时重新加载并恢复。当芯片进入休眠状态时,WDOG将关闭,寄存器将重置为默认值。因此,在唤醒时,将执行BLE_WAKEUP_LP_Handler(),但不需要调用wdg_resume(),因为它会自动恢复。你有定义在da1458x_config_basic.h中的CFG_WDOG宏来启用WDOG吗?另外,是否定义了CFG_DEVELOPMENT_DEBUG宏?
谢谢,PM_Dialog
原来是arch_main.c中的以下代码,main_func(void)
这段代码似乎在进入睡眠之前冻结了WDOG,但在进入睡眠之后没有解冻它(如果它一直在运行)。所以WDOG不参与。我们只是把这一行注释掉了。如果调试器停止CPU, WDOG自动停止,所以我不确定我理解为什么这段代码在这里的第一个实例…?
无论如何回答您的问题:是的,定义了CFG_WDOG,但是没有定义CFG_DEVELOPMENT_DEBUG。我假设后者不会改变WDOG。
不管怎样,上面的这行注释掉了,一切看起来都很好-谢谢。
保罗。
嗨pvmellor,
如果定义了CFG_DEVELOPMENT_DEBUG,则启用调试模式,并在Hardfault和NMI (Watcdog)句句中的断点中设置代码执行。因此,它允许开发人员热连接调试器并获得调试信息。我建议您定义这个宏。
谢谢,PM_Dialog