embedded - MSP430F5529 初始化期间看门狗定时器触发

标签 embedded microcontroller msp430 watchdog

我正在编写一个简单的游戏,并尝试在 MSP430F5529 微 Controller 上测试它。我遇到的问题与看门狗定时器有关。

我编写的代码会导致设备重置,这表明看门狗计时器出现问题。我认为我什至需要在主代码的第一行(某种预初始化代码)之前停止它。我这么说是否走在正确的轨道上,或者问题也可能出在代码的其他部分?

为了更清楚地说明,我的主要代码如下(简单形式):

  1. 停止看门狗定时器。
  2. 初始化开发板(GPIO 引脚)。
  3. 设置 CPU 的 Vcor​​e 电压。
  4. 设置引用晶体 (XTAL)。
  5. 设置系统时钟。
  6. 启用中断(全局)。
  7. 设置实时时钟 (RTC)。
  8. 设置 LCD 显示屏。
  9. 初始化按钮。
  10. 在适当的 LPM 模式下等待用户输入。

就我而言,这个代码序列应该是正确的。

最佳答案

这里有一些想法。如果您不打算喂养看门狗,则必须明确禁用它。您不必在预初始化代码中执行此操作(除非您亲自修改了预初始化代码并使其执行时间更长)。除非出现以下情况,否则在 main 的开头执行此操作应该没问题。静态数组可能会强制它们在预初始化代码中初始化为零。如果它们很大,可能需要一些时间,也许足以让看门狗在退出预初始化代码之前触发。此外,至少在某些 MSP430 上,您必须在写入时钟寄存器之前使用密码解锁它们。如果不这样做,芯片将重置。

如果您还没有看过,这里有一个讨论预初始化代码中的看门狗的链接: http://e2e.ti.com/support/microcontrollers/msp430/f/166/t/267695.aspx

关于embedded - MSP430F5529 初始化期间看门狗定时器触发,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24128835/

相关文章:

c - C 多久/何时执行 if/else 语句中的内容?

c - 使用 C 的定时器代码中的空循环含义

linux-device-driver - PowerPC E500/P1020。以原子方式读取 64 位(2x32 位寄存器)

c - 如何分配一个变量指针来访问msp430上的硬件寄存器?

c - 减法中 16 位 int 机器和 32 位 int 机器之间的不同结果

c - MSP430 微 Controller 的 printf 支持

c - switch 还是 const table 更好? (嵌入式软件)

c# - C# 中的编码(marshal)处理 - 将指针传递给结构 ("double ref"的引用?)

c - 通过 SPI 进行 Pic to Pic 通信

c - 为什么我的 TIMER0 不使用 Atmega644 Controller 上 XTAL1 和 XTAL2 之间的振荡器?