Hello,
264MHzで動作するMPC5674Fマイクロコントローラ用のSPIドライバに取り組んでおり、ポーリングベースのSPIトランザクションのタイムアウト遅延を計算する必要があります。SPI 転送の完了は、転送完了フラグ (TCF) を使用して監視され、反復回数に基づくタイムアウトが使用されます。
コード スニペット:
#define SPI_MAX_WAIT_ITERATIONS 100
// Wait until the transfer is complete.
// The TCF bit indicates that all bits in a frame have been shifted out.
while (p_spi_config->port->SR.B.TCF == 0)
{
if (iteration_counter++ > SPI_MAX_WAIT_ITERATIONS)
{
// If this point is reached, the SPI transfer did not complete
// within the expected iterations.
spi_status = eSPI_TIMEOUT;
iteration_exceeded = true; // Set flag to break `for` loop
break; // exit from while loop
}
}イテレーションが次のもので構成されると仮定します。
イテレーションあたりの合計 ≈ 5 クロック サイクル
SPI_MAX_WAIT_ITERATIONS = 100 の場合、タイムアウト前の合計サイクル数:
合計サイクル = 100×5 = 500
合計時間 = 500×3.79 ns = 1.89マイクロ 秒
コミュニティからの洞察は大歓迎です!
よろしくお願いいたします!
ナレンドラC
MPC5674F、#POWERPC アーキテクチャ
Hi,
1)それはあなたが概説したほど単純ではなく、より多くなります。あなたはむしろ、コードがどのようにコンパイルされ、アセンブラコードに基づいて、コアマニュアルの命令セットの状態の助けを借りて、より多くを推測することができますかを確認する必要があります。ただし、I/Dキャッシュ、メモリ待機状態、クロスバー設定/レイテンシなど、MCUの別の設定が役割を果たします。
ただし、内部タイマーを使用したり、ピンを切り替えて特定のコード実行時間を測定したりできます。
2) 実際のSPI転送/ビットレート設定による
3)TXFIFOアンダーフローとRXFIFOオーバーフローの表示があります。転送属性は通信前に設定されるため、マスター/スレーブで同じである必要があり、SPIはシリアルクロックと同期通信であるため、このようなエラーは予想されません。
BR, Petr