我正在开发一个 MSP430 通过其 SPI 总线与另一个芯片通信的系统。我正在通过 SPI 总线发送一系列设置命令,并在从芯片的就绪线上轮询。我使用 IAR 作为我的 IDE,并且我正在编译代码而没有任何优化。代码看起来像这样:
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 循环会导致如此剧烈的时间变化?