HPSMPHx

HPSMPHx( Host Port Semaphore )は外部ホストプロセッサと内部DSPコアの間で資源を排他利用するためのハードウェア・セマフォです。内部DMAコントローラやメモリーは両者からアクセスされる可能性があるため、きちんと排他利用しなければなりません。

ADSP-2191はセマフォを2つ持っているため、HPSMPH0とHPSMPH1が用意されています。

レジスタの構造

このレジスタは16ビット整数レジスタです。初期値は0x0000です。

このレジスタは次のような動作をします。

これによって外部プロセッサと内部DSPコアはセマフォを使った資源保護が可能になります。保護は次のように行います。

  1. 資源を使用する前にセマフォを読み出します。
  2. セマフォの値が0ならば資源は解放されていますので3.に進みます。セマフォの値が1のときには資源は解放されていませんので、少し待ってから1.からやり直します。
  3. 資源を使用します。
  4. セマフォに1を書き込みます。

外部ホストも、内部DSPも同じ手順を踏むことによって、資源を保護することができます。

API

C/C++言語用に以下のインターフェースが用意されています。宣言はsysreg.hで行われています。HPSMPHxにアクセスする前には必ずIOPGにExternal_Memory_Interface_Pageを設定してください。

HPSMPH0にアクセスする場合は次のように成ります。

// #include <sysreg.h>
// #include <def2191.h>

sysreg_write(sysreg_IOPG, Host_Port_Bus_Interface_Page)   // HPIページに設定

io_space_write(HPSMPH0, 値)         // HPSMPH0に値を設定
変数 = io_space_read(HPSMPH0)       // HPSMPH0の値を取得

HPSMPH1にアクセスする場合は次のように成ります。

// #include <sysreg.h>
// #include <def2191.h>

sysreg_write(sysreg_IOPG, Host_Port_Bus_Interface_Page)   // HPIページに設定

io_space_write(HPSMPH1, 値)         // HPSMPH1に値を設定
変数 = io_space_read(HPSMPH1)       // HPSMPH1の値を取得

参照情報

項目 マニュアルのページ等
説明 HR 8-34

2191空挺団 | プログラム | EZ-KIT | こぼれ話 | アーキテクチャー | 命令 | レジスタ | DSP掲示板 | FAQ |