我正在研究MSP430通過其SPI總線與另一個芯片進行通信的系統。我正在通過SPI總線發送一系列設置命令,並在從設備芯片的Ready線路上輪詢。我使用IAR作爲我的IDE,我正在編譯代碼時沒有任何優化。該代碼看起來像這樣:太快讀取MSP430 IO寄存器?
for(int i = 0; i < NUM_SETUP_COMMANDS; i++)
{
SendSetupCommand(); //puts data in SPI Tx buffer, sets Chip select low
while(P1IN & 0x40) //wait for Chip ready line to go low
{
for(int x; x < 1024; x++)
{
//do nothing
}
}
HandleReadyLine(); //Transmit/Receive data on SPI bus
}
有和沒有空內循環,此代碼工作正常。所有的設置信息都通過SPI總線正確傳輸。沒有內循環,這個代碼塊需要大約10秒。使用inner for循環,該代碼塊需要大約100 ms。
看起來像讀取P1IN儘可能快,沒有內循環,導致P1IN不會更新得快。這有意義嗎?是否有明確的理由,增加/刪除內循環會導致如此劇烈的時間變化?
看看asm,驗證innner循環沒有被優化出來。同時驗證while線正在做你想做的事。請注意,循環後重新讀取P1IN不會在while行看到的狀態下看到0x40位。如果你正在優化內部循環消失,如果沒有優化,這可能是你沒有看到輸入狀態改變的原因。 – 2012-01-01 00:32:45
我沒有檢查asm,內循環沒有被優化。 「請注意,在循環之後重新讀取P1IN,預計不會看到0x40位的狀態,即while行看到」 - 您能否進一步解釋該聲明,我不認爲我遵循。有一點需要注意的是,在沒有for循環的情況下,P1IN最終會改變狀態。它最終會工作,沒有for循環似乎需要更長的時間。 – 2012-01-01 01:17:02
另外,如果您在while循環中讀取P1IN,那麼感謝您的回覆和建議 – 2012-01-01 01:27:27