00001 /** \file afw.h 00002 * \brief フレームワーク宣言ファイル 00003 * \author アナログ・デバイセズ株式会社 00004 * \version 1.0 00005 * \date 2006.Sep.8 00006 * 00007 * 各種パラメータの宣言ファイル。パラメータのうち、afw::SAMPLE_PER_INTRはユーザーが変更して 00008 * もよい。メインルーチンからはafw::initとafw::startAudioを呼び出してオーディオ処理を開始する。 00009 */ 00010 #pragma once 00011 00012 /** オーディオ・フレームワーク 00013 * 00014 * ADSP-BF537 EZ-KIT Lite上で動作するオーディオフレームワーク関連の関数および変数を含む名前空間。 00015 * プログラマは以下の関数を呼んでオーディオ処理を開始する。 00016 * - afw::init 00017 * - afw::startAudio 00018 */ 00019 //--------------------------------------------------------------------------// 00020 // Header files // 00021 //--------------------------------------------------------------------------// 00022 //#include <sys\exception.h> 00023 #include <signal.h> 00024 #include <cdefBF537.h> 00025 #include <shortfract> 00026 00027 namespace afw{ 00028 00029 //--------------------------------------------------------------------------// 00030 // Symbolic constants // 00031 //--------------------------------------------------------------------------// 00032 /** 左チャンネル指定定数 00033 * 00034 * afw::rxBufferおよび、 afw::txBufferにアクセスする際、最下位の添え字を指定 00035 * するときに使う。 00036 * 00037 */ 00038 const int LEFT_CH = 0; 00039 /** 右チャンネル指定定数 00040 * 00041 * afw::rxBufferおよび、 afw::txBufferにアクセスする際、最下位の添え字を指定 00042 * するときに使う。 00043 * 00044 */ 00045 const int RIGHT_CH = 1; 00046 00047 /** バッファ数宣言定数 00048 * 00049 * DMA用のバッファ領域を afw::txBufferおよび afw::rxBufferとして 00050 * 確保する際に、割り込みいくつ分のバッファを用意するかを宣言する。 00051 * 具体的にいえば、トリプルバッファなので3を宣言する。過去3回の割り込み分のデータをバッファに 00052 * 格納できるということである。 00053 * 00054 */ 00055 const int INTR_PER_BUFFER = 3; // 変更してはならない。トリプルバッファのために3つの領域を確保 00056 00057 /** サンプルあたりチャンネル数の宣言 00058 * 00059 * サンプルあたり何チャンネルのデータを伝送するか宣言する。I2Sはステレオなので、この値は2である。 00060 * この値はユーザーが変更してはならない。 00061 * 00062 */ 00063 const int CH_PER_SAMPLE = 2; // 変更してはならない。I2Sはサンプルあたり2チャンネルのデータを持つ 00064 00065 /** 割り込みあたりのサンプル数 00066 * 00067 * 何サンプルのデータを受信したら割り込みをかけるかを指定する。この値を大きくするほど 00068 * 効率がよくなるが、遅延も増大し、また、必要なメモリ量も増える。したがって、これらの 00069 * バランスを考えながらユーザーが値を決めることになる。 00070 */ 00071 const int SAMPLE_PER_INTR = 8; // 変更可能。何サンプルごとに割り込みをかけるか指定する。 00072 00073 /** オーディオ・コーデックのリセット時間 00074 * 00075 * EZ-KIT Lite BF537では、オーディオ・コーデックのリセット信号がADSP-BF537のPF12に 00076 * 接続されている。コーデックの使用に先立って、この信号をアサートしなければならない。 00077 * 00078 * このマクロは、リセット信号をアサートする時間を与える。時間はループの繰り返し 00079 * 回数なので、あまり精度は高くない。注意深い値が必要である。 00080 */ 00081 const int CODEC_RESET_PULS_WIDTH = 0x10000; 00082 00083 /** SPORT0のワード長 00084 * 00085 * SPORT0設定時に使うワード長である。EZ-KIT BF537に搭載されているコーデックは 00086 * I2S回線のデータを24bit使うので、ここでは24を用意している。 00087 */ 00088 const int SPORT0_SLEN_24 = 0x0017; 00089 00090 00091 //--------------------------------------------------------------------------// 00092 // 大域変数 // 00093 //--------------------------------------------------------------------------// 00094 00095 /** SPORT0 DMA 送信バッファ 00096 * 00097 * DMAが利用するバッファ。トリプル・バッファ構成をとるので、 00098 * 3D配列の最上位の添え字は、そのバッファ切り替えに使う。2番めの添え字は 00099 * 割り込み内のサンプル位置、3番目の添え字はサンプル内のチャンネル位置を 00100 * 与える。 00101 */ 00102 extern volatile int txBuffer[][SAMPLE_PER_INTR][CH_PER_SAMPLE]; 00103 /** SPORT0 DMA 受信バッファ 00104 * 00105 * DMAが利用するバッファ。トリプル・バッファ構成をとるので、 00106 * 3D配列の最上位の添え字は、そのバッファ切り替えに使う。2番めの添え字は 00107 * 割り込み内のサンプル位置、3番目の添え字はサンプル内のチャンネル位置を 00108 * 与える。 00109 */ 00110 extern volatile int rxBuffer[][SAMPLE_PER_INTR][CH_PER_SAMPLE]; 00111 00112 //--------------------------------------------------------------------------// 00113 // 関数プロトタイプ // 00114 //--------------------------------------------------------------------------// 00115 00116 void init(void); 00117 void startAudio(void); 00118 00119 void rxISR( int signal ); 00120 00121 // processdata.cpp 00122 void initProcessData(void); 00123 void processData( 00124 const shortfract leftIn[], 00125 const shortfract rightIn[], 00126 shortfract leftOut[], 00127 shortfract rightOut[], 00128 int count 00129 ); 00130 }; 00131