0

LPC1114 引导加载程序(位置 0-0x2000)和用户应用程序(位置 0x2000-0x6000),其中引导加载程序使用轮询,用户应用程序使用中断。

说明 - 引导加载程序运行 systick 轮询正常,根据 systick 计数超时并跳转到 0x2000 处的用户应用程序,其中使用了 systick 中断。

问题
- 如果在跳转到用户应用程序之前在引导加载程序中调用了 __disable_irq(),则用户应用程序运行正常(未按预期使用中断,但至少它运行)。
如果在用户应用跳转前没有__disable_irq(),用户应用失败,在startup_LPC11xx.s 中的default_handler 结束。

添加了确定中断源的代码 - 这是一个 HardFault

4

1 回答 1

1

在我看来,您没有正确处理代码中的某些(可能是全部)中断。至于这个问题已经被问到但没有提供真实的代码,这里只能是一般性的建议。

到目前为止可以看到的情况是,在您启用中断后,某些事件会导致中断,程序计数器跳转到无处/随机地址并且系统失败。该问题的另一个原因可能是处理不正确,但同样,它必须采用您没有提供的分析代码。

为了缩小问题的范围,我建议将整个代码拆分为多个部分,使其尽可能简单,并以最少的代码和至少一个中断启用运行 - 确保您可以为中断生成事件。

您是否有调试器或与设备进行串行通信?如果您对此感到困惑,则需要分析 IRQ 状态寄存器 - 最有可能在 IRQ 发生后立即读取它。

于 2014-07-17T01:21:38.953 回答