私は、MSP430がSPIバスを介して別のチップと通信しているシステムに取り組んでいます。SPIバスを介して一連のセットアップコマンドを送信し、スレーブチップのReadyラインでポーリングしています。IDEとしてIARを使用しており、最適化せずにコードをコンパイルしています。コードは次のようになります。
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
}
空の内部forループがある場合とない場合で、このコードは正しく機能します。すべてのセットアップメッセージは、SPIバスを介して正しく送信されます。内部のforループがない場合、このコードブロックには約10秒かかります。内部のforループを使用すると、このコードブロックには約100ミリ秒かかります。
内部のforループなしで、P1INをできるだけ速く読み取ると、P1INがそれほど速く更新されないように見えます。これは意味がありますか?内側のforループを追加/削除すると、このような大幅なタイミング変更が発生する明確な理由はありますか?