我正在使用MSP430F2013处理器来处理没有UART的应用程序。我需要一个UART,因此我使用TI的示例代码“msp430x20x3_ta_uart2400.c”来模拟使用Timer模块的代码。这一切都很好(使用IAR Embedded Workbench编译),使用PuTTY将其传输到开发板并将回送到终端的回送进行测试。TI MSP430 UART代码端口后中断问题
这是一个降低风险的练习,现在我已经将该代码移植到我的应用程序的状态机中。这样做后,我遇到了有关定时器中断和低功耗睡眠模式的问题。下面是我周围的进入低功耗睡眠模式的代码片段:
// Prepare the UART to receive one byte.
prepare_receiver();
// Enter low power mode 1.
__bis_SR_register(LPM1_bits + GIE);
// Check whether the full message has been received.
if(true == get_message_complete())
{
process_event(e_euart_message_received, NULL);
}
我看到在调试器是什么(C-SPY)是有时它会执行的第一个条目的bis_SR_register()
线然后转到if
声明,即忽略了我要求它入睡的事实。在其他情况下,当它确实应该进入睡眠状态时,ISR会正确触发并最终将我带回到if
声明以继续执行程序(正如我期望的那样)。但是,如果我尝试进入下一个语句,则应用程序会在第一行停止,即我无法前进。
我想不出与TI示例中的功能有什么不同,所以我认为我的问题必须与我如何移植它有关。例如,我的Timer ISR和我在这里发布的代码有不同的编译单元 - 这种决定会对事情产生影响吗?我知道我的问题可能有点含糊,但不幸的是我不能发布我的所有代码,所以我正在寻找一位具有MSP经验的人,他可能会提出一些要看的东西或某些潜在的陷阱我可能陷入了。
谢谢你链接到这个文档,凯尔。我之前没有看到过这个,尽管它没有具体回答我的问题,但它让我更仔细地思考了我正在尝试做什么,现在我已经解决了这个问题。我会在下面发表答案。 –