afw.h

説明を見る。
00001 /** \file afw.h
00002  *  \brief フレームワーク宣言ファイル
00003  *  \author アナログ・デバイセズ株式会社
00004  *
00005  * 各種パラメータの宣言ファイル。パラメータのうち、afw::SAMPLE_PER_INTRはユーザーが変更して
00006  * もよい。メインルーチンからはafw::initとafw::startを呼び出してオーディオ処理を開始する。
00007  */
00008 #pragma once
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     void processData( 
00077                      const shortfract leftIn[], 
00078                      const shortfract rightIn[], 
00079                      shortfract leftOut[], 
00080                      shortfract rightOut[],
00081                      int count
00082                     );
00083 };
00084 

AudioFrameWorkに対してMon Apr 9 15:44:05 2007に生成されました。  doxygen 1.5.1-p1