プロセッシング ユニットは、EEMI API を使用してシステム内のクロックを管理できます。各クロックは、一意の ClockId で識別されます。プロセッサ ノードは、そのプロセッシング ユニットからアクセス可能な ClockId の一覧を XPm_Query
API を使用して取得できます。プロセッサ ノードは、クロックの属性を変更する前に、そのクロックに関連付けられたペリフェラル デバイスを要求する必要があります。詳細は、
『BSP およびライブラリ資料コレクション』 (UG643) の XPm_RequestNode
API を参照してください。
クロックのステートを取得および設定するには、次の API を使用します。
-
XStatus XPm_ClockGetStatus(const u32 ClockId, u32 *const State)
-
XStatus XPm_ClockEnable(const u32 ClockId)
-
XStatus XPm_ClockDisable(const u32 ClockId)
クロック分周値の設定を変更するには、次の API を使用します。
-
XStatus XPm_ClockGetDivider(const u32 ClockId, u32 *const Divider)
-
XStatus XPm_ClockSetDivider(const u32 ClockId, const u32 Divider)
クロックを別の親クロックで駆動するように設定するには、次の API を使用します。
-
XStatus XPm_ClockGetParent(const u32 ClockId, u32 *const ParentId)
-
XStatus XPm_ClockSetParent(const u32 ClockId, const u32 ParentId)
重要: ParentId は、ClockId の親として設定可能なクロックへのインデックスです。Zynq UltraScale+ MPSoC では、Linux とスタンドアロン アプリケーションで ParentId の定義が異なっていました。Versal デバイスでは、これらの EEMI API はいずれも ParentId が親として設定可能なクロックへのインデックス値に統一されています。
基準クロックのレートを設定するには、次の API を使用します。
-
int XPm_ClockGetRate(const u32 ClockId, u32 *const Rate)
-
int XPm_ClockSetRate(const u32 ClockId, const u32 Rate)
重要:
XPm_ClockSetRate()
は、CDO ロード中のみ有効です。XilPM クライアント API からクロック レートを設定することはできません。ClockID で識別される PLL を設定するには、次の API を使用します。
-
XStatus XPm_PllGetMode(const u32 ClockId, u32 *const Value)
-
XStatus XPm_PllSetMode(const u32 ClockId, const u32 Value)
-
XStatus XPm_PllGetParameter(const u32 ClockId, const enum XPm_PllConfigParams ParamId, u32 *const Value)
-
XStatus XPm_PllSetParameter(const u32 ClockId, const enum XPm_PllConfigParams ParamId, const u32 Value)
これら API の詳細は、 『BSP およびライブラリ資料コレクション』 (UG643) を参照してください。