# MICAutoParam

## 定義

  `#include <nitro/spi.h>`

      typedef struct
      {
          MICSamplingType     type;
          void*               buffer;
          u32                 size;
          u32                 rate;
          BOOL                loop_enable;
          MICCallback         full_callback;
          void*               full_arg;

      } MICAutoParam;

## 要素

type | `MICSamplingType`列挙型のサンプリング種別
buffer | サンプリング結果を格納するバッファへのポインタを指定します。 このバッファにはARM7が直接サンプリング結果を書き込んでいきますので、キャッシュラインに沿って 32バイトアラインされている必要があります。 また、このバッファはARM9とARM7が共にアクセス可能なメモリ空間である必要があります。 具体的には拡張領域も含めてメインメモリ全域、WRAM-B、WRAM-Cが指定可能なメモリ空間となりますが、 プログラムが動作するハードウェアや動作モードに依存してメモリマッピングが変化しますので、注意が必要です。 メモリマッピングについてはプロテクションユニット(overview) 及びワークRAM(overview)を参照して下さい。
size | サンプリング結果を格納するバッファのサイズ
rate | サンプリング周期。ARM7のCPUタイマー周期を直接指定します。 `MICSamplingRate`列挙型から選択することもできます。
loop_enable | 連続サンプリング時にバッファをループさせるフラグ
full_callback | バッファが飽和した際に呼び出すコールバック関数へのポインタ
full_arg | バッファが飽和した際に呼び出すコールバック関数へ渡す引数

## 説明

マイクの自動サンプリング設定を示す構造体です。
loop_enableフラグをTRUEに指定しておくと、連続サンプリングによってバッファが飽和した時にサンプリングデータ格納位置がバッファの先頭に戻された上で連続サンプリングが継続されます。 この場合には、自動サンプリング停止関数が呼ばれるまで連続サンプリングは継続されます。
loop_enableフラグがFALSEの場合は連続サンプリングによってバッファが飽和した時点で自動的にサンプリングが停止されます。
loop_enableフラグの設定に関わらず、バッファが飽和した時点でfull_callbackに指定した関数が呼び出されます。

## 注意

サンプリング結果を格納するバッファは32バイトアラインされたアドレスに32の倍数バイトのサイズを確保するようにして下さい。 これは、サンプリング結果を読み出す際に対象エリアのキャッシュを破棄する必要がある為です。

loop_enableにTRUEを 指定した場合bufferはリングバッファとして扱われ バッファがいっぱいになれば先頭から上書きされます。
そのためバッファフルコールバックが発生してから次のサンプリングまでの間 (rateで指定したサンプリング周期)しかバッファのデータは保障されません。
ですからリングバッファ使用時にバッファフルコールバック内で、バッファのデータを処理するような場合は 次のサンプリングが発生するまでに処理するようにしてください。
また長い割り込み禁止期間を取ることなどによってバッファフルコールバック自体の発生が遅れ、 バッファのデータを処理する前にバッファの上書きが発生してしまうこともありますのでご注意ください。

## 参照

`MIC_StartAutoSampling, MIC_StartAutoSamplingAsync, MIC_StopAutoSampling, MIC_StopAutoSamplingAsync`

## 履歴

Ver. 2008/08/19 bufferメンバに指定可能なメモリ空間について説明を修正
Ver. 2007/04/12 バッファループ使用時の注意を追記
Ver. 2006/02/16 bufferメンバに拡張メインメモリが指定できない旨を追記
Ver. 2004/09/17 bufferメンバのアラインについて説明を追記
Ver. 2004/06/01 初版