2014-05-20 34 views
4

我正在编写一个简单的游戏,并试图在MSP430F5529微控制器上进行测试。我遇到的问题与看门狗定时器有关。MSP430F5529初始化期间的看门狗定时器触发

我写的代码会导致器件复位,这是看门狗定时器问题的指示。我假设我需要在我的主代码的第一行之前停止它,某种预初始化代码。我在正确的轨道上说或者可能问题还在于代码的其他部分?

为了使它更清楚,我主要的代码如下(以简单的形式):

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

就我而言,这段代码应该是正确的。

回答

6

以下是一些想法。如果您不打算喂食它,则必须明确禁用看门狗。你不应该在pre-init代码中这样做(除非你亲自修改了pre-init代码并且使其更长的执行时间)。在主要开始的时候应该可以禁止以下情况。有可能有静态数组可能会强制它们在pre-init代码中初始化为零。如果它们很大,那可能需要一些时间,或许足以在退出预先初始化代码之前拥有看门狗触发器。另外,至少在某些MSP430上,您必须在写入密码之前用密码解锁时钟寄存器。如果你不这样做,芯片将会重置。

这里是一个链接到了init预代码讨论的看门狗,如果你还没有看到它已经: http://e2e.ti.com/support/microcontrollers/msp430/f/166/t/267695.aspx

+0

你为什么建议不要做在init预代码? – gbudan

+0

我没有建议不要在pre-init代码中执行它;我说你不应该。我可能不应该说“不应该”。这可能意味着将pre-init代码改为负面的东西(只要你知道自己在做什么),或者这种特殊情况不会经常出现(这是我的假设) 。 – gtozzi