我正在使用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經驗的人,他可能會提出一些要看的東西或某些潛在的陷阱我可能陷入了。
謝謝你鏈接到這個文檔,凱爾。我之前沒有看到過這個,儘管它沒有具體回答我的問題,但它讓我更仔細地思考了我正在嘗試做什麼,現在我已經解決了這個問題。我會在下面發表答案。 –