我尝试在Stellaris Launchpad LM4F120上配置看门狗定时器。
代码如下:
void configure_watchdog(void) {
SYSCTL_RCGCWD_R = 0x1; /* Enabling Clock for WD0 */
WATCHDOG0_LOAD_R = 0xffffffff; /* Setting initial value */
WATCHDOG0_CTL_R = WDT_CTL_INTEN; /* Enabling interrupt generation */
}
根据数据表,这应该足够了。
问题是控制器总是落到FaultISR
并在其后重置。我不明白为什么。
我做错了什么?
编辑:控制器未重置。它只是FaultISR
答案 0 :(得分:2)
看门狗到期时跳转到ISR听起来像是正确的行为。您在ISR代码中究竟在做什么?如果要在ISR内部重置看门狗,那么您不应该看到微控制器自身重置(至少基于您发布的配置代码)。设置看门狗后,请重新读取配置寄存器,并确保它具有您期望的值。该寄存器中的某些位只能在某些情况下设置,并且您可能没有使用您认为正在使用的设置运行。
您提到过您正在尝试将看门狗定时器用作通用的向下计数器。你能用一个通用定时器而不是看门狗吗?当时间到期时你仍然会得到一个中断,但是常规计时器无法重置整个系统。
答案 1 :(得分:1)
您必须继续为看门狗提供服务,否则它会超时并调用该异常的任何设置。 <{1}}似乎就是你的情况。
如果您希望监视程序在超时时执行其他操作,则需要弄清楚特定工具链如何将函数连接到异常源并正确映射新函数。
如果您不希望看门狗过期(这通常是它的目的,为了捕获错误的代码),那么您需要定期维护它。编译器供应商通常提供一个函数或内在函数来执行此操作。