1

我尝试在 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

4

2 回答 2

2

当看门狗过期时跳转到 ISR 听起来是正确的行为。您在 ISR 代码中到底在做什么?如果您正在重置 ISR 中的看门狗,那么您不应该看到微控制器自行重置(至少基于您发布的配置代码)。设置看门狗后,重新读取配置寄存器并确保它保持您期望的值。该寄存器中的某些位只能在某些情况下设置,并且您可能没有使用您认为正在使用的设置运行。

您提到您试图将看门狗计时器用作通用递减计数器。你能用其中一个通用定时器代替看门狗吗?当时间到期时,您仍然会收到中断,但常规计时器无法重置整个系统。

于 2013-01-28T20:02:31.523 回答
1

您必须继续为看门狗提供服务,否则它会超时并调用为该异常设置的任何内容。 FaultISR在你的情况下似乎是这样。

如果您希望看门狗在超时时执行其他操作,您需要弄清楚您的特定工具链如何将函数连接到异常源并正确映射您的新函数。

如果您不希望看门狗过期(通常是为了捕获错误代码),那么您需要定期对其进行维护。编译器供应商通常会提供一个函数或内在函数来执行此操作。

于 2013-01-30T13:11:29.897 回答