我尝试在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
发布于 2013-01-28 20:02:31
当看门狗到期时跳到ISR听起来是正确的行为。你在你的ISR代码里到底在做什么?如果您在ISR内重置看门狗,那么您不应该看到微控制器重新设置自身(至少基于您发布的配置代码)。设置了看门狗之后,请将配置寄存器读入外部,并确保它包含您期望的值。该寄存器中的某些位只能在特定情况下设置,而且可能没有使用您认为正在使用的设置。
您刚才提到您试图使用看门狗计时器作为通用的计数器。你能用一个通用计时器代替看门狗吗?当时间过期时,您仍然会得到一个中断,但是常规计时器无法重置整个系统。
发布于 2013-01-30 13:11:29
您必须继续维护看门狗,否则它会超时,并为该异常调用任何设置。在你的情况下,FaultISR似乎就是这样的。
如果希望看门狗在超时时执行其他操作,则需要弄清楚特定的工具链如何将函数连接到异常源,并正确映射新函数。
如果您不希望看门狗过期(这通常是它的目的,以捕获错误的代码),那么您需要定期为它提供服务。编译器供应商通常会提供一个函数或内部函数来完成这一任务。
https://stackoverflow.com/questions/14569224
复制相似问题