- メインページ
- ネームスペース
- クラス
- ファイル

- ファイル一覧
- ファイルメンバ

# afw.h

説明を見る。

    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