00001 #pragma once 00002 /** \file afw.h 00003 * \brief フレームワーク宣言ファイル 00004 * \author アナログ・デバイセズ株式会社 00005 * 00006 * 各種パラメータの宣言ファイル。パラメータのうち、afw::SAMPLE_PER_INTRはユーザーが変更して 00007 * もよい。メインルーチンからは afw::initと afw::startを呼び出してオーディオ処理を開始する。 00008 */ 00009 00010 /** オーディオ・フレームワーク 00011 * 00012 * ADSP-BF537 EZ-KIT Lite上で動作するオーディオフレームワーク関連の関数および変数を含む名前空間。 00013 * プログラマは以下の関数を呼んでオーディオ処理を開始する。 00014 * - afw::init 00015 * - afw::start 00016 */ 00017 //--------------------------------------------------------------------------// 00018 // Header files // 00019 //--------------------------------------------------------------------------// 00020 //#include <sys\exception.h> 00021 #include <signal.h> 00022 #include <cdefBF537.h> 00023 #include <shortfract> 00024 00025 namespace afw{ 00026 00027 00028 00029 //--------------------------------------------------------------------------// 00030 // 関数プロトタイプ // 00031 //--------------------------------------------------------------------------// 00032 /** afwの初期化 00033 * 00034 * オーディオ・フレームワークの初期化。初期化関数はこれひとつよべば、残りの関数を 00035 * まとめて呼んでくれる。ただし、 afw::start は呼ばないので、プログラマが明示的に 00036 * 呼ばなければならない。また、afw::ISR()を割込みハンドラとして登録するのも 00037 * プログラマの責任で行う 00038 */ 00039 void init(void); 00040 00041 /** SPORTとDMAのイネーブル 00042 * 00043 * 設定が終わったSPORTとDMAの両方をイネーブルし、オーディオ処理を開始する。 00044 * 必ず afw::init()の後に呼ぶ。 00045 */ 00046 void start(void); 00047 00048 /** SPORT0受信DMA割り込みサービス・ルーチン 00049 * @return デバイスの割り込み処理を行ったときには真を返す。行わなければ偽。 00050 * 00051 * afw::ISRはSPORT0の受信DMAから割り込みがかかるたびに呼び出され、割り込みのクリアと 00052 * トリプル・バッファの管理を行う。トリプルバッファの管理は、DMA3_CURR_Y_COUNTレジスタの値を 00053 * もとに行う。 00054 * なお、割り込みがSPORT0 受信DMA割込みではない場合、afw::ISRは何もせずに戻る。 00055 * 00056 * DMA3_CURR_Y_COUNTレジスタは、転送の最初に当たってDMA3_CURR_Y_COUNTレジスタの値に設定され、 00057 * ラインの転送が終わるごとにデクリメントされる。しかし、最後のラインの 00058 * 転送後は、デクリメントされずに1のままに留まる。その結果、各ラインの転送終了 00059 * では、割込み発生ごとに以下のようにDMA3_CURR_Y_COUNTレジスタの値が変化する 00060 * - 最初のラインの転送終了時。DMA3_CURR_Y_COUNT == 2。プロセッサが扱ってよいバッファの添え字は 0 00061 * - 2番目のラインの転送終了時。DMA3_CURR_Y_COUNT == 1。プロセッサが扱ってよいバッファの添え字は 1 00062 * - 3番目のラインの転送終了時。DMA3_CURR_Y_COUNT == 1。プロセッサが扱ってよいバッファの添え字は 2 00063 * 00064 * このことから、ソフトウェアとの同期に使ってよいのはDMAx_CURR_Y_COUNTレジスタが2の場合 00065 * のみであり、あとは決めうちでバッファの添え字をインクリメントしなければならない事がわかる。 00066 * プログラム中では、この添え字としてbufferIdxをあてている。 00067 * 00068 * トリプルバッファの管理が終わったら、受信DMAバッファからデータを取り出し、並べ 00069 * なおしてから afw::processData を呼ぶ。 00070 */ 00071 bool ISR( void ); 00072 00073 00074 void initProcessData(int count); 00075 00076 00077 void processData( 00078 const shortfract leftIn[], 00079 const shortfract rightIn[], 00080 shortfract leftOut[], 00081 shortfract rightOut[], 00082 int count 00083 ); 00084 }; 00085 00086