PSoC 4 CyDelay 遅延時間関数の精度 - Community Translated (JA)

Version 1

    Community Translated by  MoTa_728816          Version : * A

     

    質問PSoC 4 CyDelay() CyDelayUs() 等の遅延時間関数の精度について教えてください。

     

    回答CyDelay() CyDelayUs() 等のCyDelay関数は単純なソフトウェアによる遅延ループで実装されています。

    これらのループはバスクロック周波数や他の要因に適応するように設計されていますが、それ以外にもループ内で消費される実時間に影響を与える要因があります。

    CyDelay 関数は最小遅延時間を提供します。もしプロセッサに割込みが入ると、ループの時間はその割込みを処理する時間分だけ延長されます。関数の呼出しと復帰を含む、その他のオーバーヘッド要因もこの関数の実行時間に影響を与える場合があります。この現象は遅延時間のノミナル値が短い程顕著になります。割込みによる干渉がない場合、遅延時間の精度は(関数の呼出しと復帰の時間を除いて) CPU のクロックである IMOの精度に近似します。テーブル1CyDelay 関数の各種プロトタイプのクイックリファレンスです。APIの全詳細については PSoC® Creator™ System Reference Guideを参照してください。詳細は PSoC Creator のメニュー Help > System Reference > System Reference Guide からも利用できます。

    テーブル 1. CyDelay 関数の説明

                                                                                           

        関数のプロトタイプ

        引数

       説明

    void CyDelay(uint32 milliseconds)

    uint32 milliseconds – 遅延させるミリ秒数

    指定されたミリ秒数遅延する。遅延するサイクル数はデフォルトではPSoC Creator で設定されたクロックに基づいて算出される。実行時にクロックの設定に変更があった場合には、新しいバスクロック周波数を適用するために CyDelayFreq 関数が使用される。CyDelay は何種類かのコンポーネントでも使用されているため、クロックの周波数変更時に、この遅延周波数設定更新を行わないと、これらのコンポーネントの動作不良を引き起こす可能性がある。

    void CyDelayUs(uint32 microseconds)

    uint32 microseconds – 遅延させるマイクロ秒数

    指定されたマイクロ秒数遅延する。遅延するサイクル数はデフォルトではPSoC Creator で設定されたクロックに基づいて算出される。実行時にクロックの設定に変更があった場合には、新しいバスクロック周波数を適用するために CyDelayFreq 関数が使用される。CyDelay は何種類かのコンポーネントでも使用されているため、クロックの周波数変更時に、この遅延周波数設定更新を行わないと、これらのコンポーネントの動作不良を引き起こす可能性がある。

    void CyDelayFreq(uint32 freq)

    uint32 freq – Bus clock frequency in Hz;
    0:
    初期設定値

    Nonzero: 設定する周波数値

    サイクル数の計算に使用されるバスクロック周波数を設定する。前述のサイクル数はCyDealyやCyDelayUs関数による遅延埋め込みに必要な値。デフォルトで使用される周波数はプロジェクトのビルド時に PSoC Creator で決定される。

    void CyDelayCycles(uint32 cycles)

    uint32 cycles – 遅延するサイクル数

    指定されたサイクル数のソフトウェアループを使用して遅延する。

     

    より高精度の遅延時間算出が必要な場合には、TCPWM SysTickUDBを使用したタイマーコンポーネント等の使用を検討してください。