# PM_GetAmpGain

## 構文

      #include <nitro/spi.h>

      u32 PM_GetAmpGain( PMAmpGain* gainBuf );

## 引数

gainBuf | アンプのゲインを決定する設定値の取得結果を格納するバッファ

## 返り値

PM_RESULT_SUCCESS ならば、コマンドの実行が成功したことを表します。

PM_RESULT_BUSY ならば、 SPI が他の処理に占有されており処理できなかったことを示します。

## 説明

プログラマブルゲインアンプのゲインの、現在の設定を取得します。

gainBuf には `PMAmpGain` 列挙型の値が格納されます。値は 以下の4つの値のいずれかです。

gainBuf に格納される値 | ゲイン
--- | ---
`PM_AMPGAIN_20` | 26.0 dB　(２０倍)
`PM_AMPGAIN_40` | 32.0 dB　(４０倍)
`PM_AMPGAIN_80` | 38.0 dB　(８０倍)
`PM_AMPGAIN_160` | 44.0 dB　(１６０倍)

この関数はARM7に該当動作を行うコマンドをPXIで送り、それを受け取ったARM7側がPMICを操作することで実行されます。

内部で 120 段階で設定されていた場合は、以下のように内部設定値に対応する値を返します。

gainBuf に格納される値 | ゲイン(120段階)
--- | ---
`PM_AMPGAIN_20` | 0 〜 36　(10.5 〜 28.5 dB)
`PM_AMPGAIN_40` | 37 〜 48　(29.0 〜 34.5 dB)
`PM_AMPGAIN_80` | 49 〜 60　(35.0 〜 40.5 dB)
`PM_AMPGAIN_160` | 61 〜 119　(41.0 dB 〜 70.0 dB)

この関数はARM7に該当動作を行うコマンドをPXIで送り、それを受け取ったARM7側がPMICを操作することで実行されます。従って関数を呼び出して即時に動作されるわけではありません。

割込みハンドラからこの関数を使用することは可能です。割込みハンドラ以外の割込み禁止状態でこの関数を使用することは出来ません。

PM_RESULT_BUSY について

SPI はPM以外にも様々な処理で使用されています。そのようなときに本関数を呼び出すと、ARM7 までコマンドを送り、そこで BUSY という判定が行われ、処理は行われずに ARM9 へ `PM_RESULT_BUSY` が通知されます。また他の PM 処理を行っている最中に本関数を呼び出すと、ARM9 側でそれを判断し `PM_RESULT_BUSY` を返します。(この場合は ARM7 への通知を行う前に判断します。)

従って、確実に本関数を成功させようとすれば、次のように成功するまでループするようにしてください。(引数が間違っているというようなミスは考慮していません。)

> (例)
> `while( PM_GetAmpGain( ... ) != PM_RESULT_SUCCESS )
> {
> }`

`PM_GetAmpGain()` と `PM_GetAmpGainLevel()` の違い

ゲインの設定取得関数は、本関数 `PM_GetAmpGain()` と `PM_GetAmpGainLevel()` の２種類が存在します。前者は 旧DS から存在している関数で、取得できるゲインは4段階です。 (設定できるゲインも4段階です。) 後者はTWL で新設された関数で、ゲインを 120 段階で取得することができます。 `PM_GetAmpGainLevel()` も参照してください。

## 内部動作

NITRO ハードウェアでは PMIC のレジスタ PGA_GAIN の値を読み込みます。 TWL ハードウェアでは CODEC の値を読み込みます。

## 参照

`PM_Init, PM_SetAmpGain*, PM_GetAmpGainLevel*
`

## 履歴

2009/06/03 `PM_Init()` についての記述を削除 (`OS_Init()` が必須となったため)
2008/08/23 PM_RESULT_BUSY について言及
2008/05/01 アンプゲイン120段階に対応
2005/07/07 返り値 PM_RESULT_ERRORについて言及した
2004/08/09 初版