インテルのみ表示可能 — GUID: hco1410462567925
Ixiasoft
インテルのみ表示可能 — GUID: hco1410462567925
Ixiasoft
9.1. ライブラリーの使用
次の図は、一般的なユーザー・アプリケーション・フローです。ユーザー・アプリケーションの最初の操作では、ライブラリーを初期化する必要があります。次に、インスタンス化されたデバイス (シンクまたはソース) を初期化する必要があります。これは btc_dptx_syslib および btc_dprx_syslib データ構造内で、部分的にユーザー・アプリケーション内で行います。また、DisplayPort コアによって生成される割り込みを処理するために、割り込みサービスルーチン (ISR) を実装する必要があります。
初期化が完了したら、ユーザー・アプリケーションは定期的にライブラリーをモニターする関数を呼び出す必要があります。
下の図は、この操作をより詳細に表したものです。シンク・アプリケーションの場合、ユーザー・アプリケーションは DPCD コンテンツと EDID を初期化する必要があります。さらに、ソース・アプリケーションとシンク・アプリケーションの両方で、割り込み ISR をレジスターする必要があります。
シンクのインスタンス化により、接続されたソースから AUX チャネル要求が受信されると、GPU に割り込みが発行されます。ソースのインスタンス化により、接続された DisplayPort シンクによって生成された HPD 信号で論理状態の変化が検出されると、GPU に割り込みが発行されます。
ソースは常に AUX チャネルマスターとして動作するため、トランザクションを開始し (リクエストを送信する)、IP レジスターをポーリングして応答を受信するのを待つことで AUX 通信を管理することができます。オプションとして、ソースのインスタンス化により、接続された DisplayPort シンクから AUX チャネル応答を受信したときに GPU に割り込みを発行することもでき、GPU が AUX チャネルの返信を待ったいる間に他のタスクを実行できるようにします。
次のライブラリー・マクロを使用して、ソース割り込みとシンク割り込みを有効または無効にします。
- BTC_DPTX_ENABLE_HPD_IRQ()
- BTC_DPTX_DISABLE_HPD_IRQ()
- BTC_DPTX_ENABLE_AUX_IRQ()
- BTC_DPTX_DISABLE_AUX_IRQ()
- BTC_DPRX_ENABLE_IRQ()
- BTC_DPRX_DISABLE_IRQ()
btc_dprx_syslib は、呼び出し時にすべての GPU 割り込みを無効にし、終了時に以前の状態に戻すことで、1 つから 4 つのシンク・インスタンスを管理します。そのため、ライブラリーのパブリック関数のほとんどはクリティカル・セクションを実装しています。
GPU メインプログラムは、シンク・インスタンスによって生成された割り込み (接続されたソースの AUX チャネル要求に関連する割り込み) を処理する際のオーバーヘッドを最小限に抑えます。
ソース・インスタンスによって生成された割り込み (接続されたシンクの HPD アクティビティーに関連する割り込み) は、低い優先度で処理できます。同じ GPU がソース・インスタンスとシンク・インスタンスの両方を処理するデザインでは、GPU はシンクから発生するネストされた割り込みを許可する必要があります。つまり、シンクはソース割り込みサービスルーチンに割り込むことができなければなりません (別のシンク割り込みサービスルーチンに割り込むことはできません)。
一般的なシンク ISR の実装
btc_dprx_aux_get_request (0,&cmd,&address,&length,data); btc_dprx_aux_handler(0,cmd,address,length,data);
一般的なソース ISR の実装
BTC_DPTX_DISABLE_HPD_IRQ(...); <Enable nested interrupt> if (HPD asserted) { <read Sink EDID> <set video output resolution> btc_dptx_link_training(...); } else if (HPD deasserted) btc_dptx_video_enable(..., 0); else if (IRQ_HPD) { <check link status> if (Test Automation request) btc_dptx_test_autom(…); } <Disable nested interrupt> BTC_DPTX_DISABLE_HPD_IRQ(...);