2015-12-14 186 views
3

恐怕我的MSP430F5529啓動板可能有問題,因爲我無法使__delay_cycles正常工作。它總是用於正常工作,但現在突然出現問題。我只是使用一個定時器模塊來引起延遲,但當前程序已經在使用它們,我寧願讓它們專注於它們的任務。我在初始化時只需要幾次延遲,所以典型的警告「儘量不要使用__delay_cycles」,因爲它暫停程序在這裏並不是一個問題。MSP430:__delay_cycles()很慢/ MCLK可能很慢

所以問題是使用__delay_cycles()的時間比它應該更長,儘管我最近在沒有問題的另一個程序中使用了它。我試過在默認設置的不同項目上使用相同的代碼,並確保我的代碼沒有做出奇怪的事情,我做了一個快速程序,只需在延遲一秒後打開LED:

void main(void){ 

WDTCTL = WDTPW | WDTHOLD;  // Stop watchdog timer 

P1OUT &= ~(BIT0); 
P1DIR |= BIT0; 
P1REN |= BIT0; 

__delay_cycles(25000000); 

P1OUT |= BIT0; 
} 

由於MCLK在25MHz下運行延遲了25百萬個週期,所以應該給出大約1秒的延遲,但是在調試器中啓動程序後需要約25秒才能打開LED。這讓我擔心我的微控制器上的MCLK有問題,儘管我覺得這種情況不太可能發生,但似乎我無法找到另一個原因,爲什麼會發生這種情況,據我所知,沒有改變任何東西。由於LED需要25秒才能打開,因此幾乎可以看出MCLK以1MHz運行,或者由於某種原因,該功能是從SMCLK中獲取的。

我整個時間都很高,MCLK總是以1MHz運行,同時使用__delay_cycles()?而我只是沒有注意到,因爲之前「成功」使用的延遲只有幾毫秒?我發誓默認MCLK的頻率是25MHz,唯一的辦法是通過代碼設置它。所以,在我看來,要麼:

  • A)的MSP430不會在25MHz的默認情況下並沒有什麼跑我已經 codded做出這種明顯
  • B)__delay_cycles()改變時MCLCK的速度執行 ,我從來沒有注意到,因爲我需要延遲這麼快
  • C)我在編譯器意外更改一些設置,或 某些原因,編譯器優化是搞亂了 編譯__delay_cycles的()
  • d )我的MCLK壞了/壞了

順便說一下,我的編譯器是Code Composer Studio 6.1.0.00104,如果該信息是相關的。

有沒有人有智慧分享什麼可能是錯的?

謝謝。

+0

感謝您的指出。我曾閱讀過其中的一些內容,但並未完全理解所有內容的含義。 – oblivioncth

回答

3

的使用說明書說,在第5.2節:

一個PUC之後,UCS模塊默認配置爲:在LF模式

  • XT1被選擇作爲振盪源XT1CLK。
  • 爲MCLK選擇DCOCLKDIV。
  • 啓用FLL操作並選擇XT1CLK作爲FLL參考時鐘FLLREFCLK。

XT1將保持禁用狀態,直到與晶振引腳相關的PSEL位被設置。

並且在截面5.2.12:

當LF模式下使用XT1操作作爲參考源到FLL(SELREF = {0}),晶體故障自動地使FLL參考源,FLLREFCLK,由REFO採購。

默認FLL配置(FLLN = 0x1F的,FLLD = 1)的結果在64×32768赫茲= 2.097152 MHz和1.048576兆赫(的MCLK頻率的DCO頻率以及,如果REFO足夠準確證明這個精度)。

要以25 MHz運行CPU,必須重新編程FLL(並增加PMMCOREV)。