LPC1114重定向中断处理

时间:2014-07-16 17:17:23

标签: arm keil lpc cortex-m

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

描述 - Bootloader运行systick polling ok,根据systick计数超时并跳转到0x2000处的用户应用程序,其中使用了systick中断。

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

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

1 个答案:

答案 0 :(得分:1)

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

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

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

您是否有调试器或与设备进行串行通信?如果你遇到这种情况,你需要分析IRQ状态寄存器 - 最有可能在IRQ发生后立即读取它。