00001 /** \mainpage 00002 * \Author アナログ・デバイセズ株式会社 00003 * \date 2006.Jan.19 00004 * 00005 * このプログラムは、ADSP-BF537を搭載する評価基板、EZ-KIT BF537の割り込みデモプログラムである。 00006 * 実行すると入力オーディオ信号を出力にコピーする。EZ-KIT Lite上のSW10を押すたびに、ゲインが 00007 * 変化する 00008 * 00009 * ::main 関数を実行すると、各種の初期化を行い、割り込みハンドラ afw::rxISRを登録した後、 00010 * 割り込みとDMAを許可してオーディオ信号の送受信を行う。オーディオ信号はSPORT0経由で入力 00011 * し、DMAによってメモリ上に格納される。2次元DMAの各行が終わるたびにオーディオ信号受信割り込み 00012 * が発生し、 afw::rxISRが呼び出される。 00013 * 00014 * afw::sport0RxISR は割り込みをクリアし、トリプルバッファの制御を行う。そしてしかるべきデータを 00015 * DMAの受信バッファから取り出すと、使いやすいよう並べなおしてユーザー定義のコールバック関数 00016 * afw::processData を呼び出す。 00017 * 00018 * afw::processData は実際に信号処理を行う場所である。 afw::processDataは入力したデータを 00019 * 出力バッファに格納して呼び出し関数に戻る。このさい、 param::gainの値に応じて音量を調整する。 00020 * param::gainの値は割り込みが発生するたびに変更される。 00021 * 00022 * afw::processDataから制御が戻ると、呼び出した関数であるafw::rxISRは出力データを並べ替えて然るべきDMAバッファに 00023 * 格納する。 00024 * 00025 * EZ-KIT Lite BF-537のディップスイッチの設定は以下のとおり 00026 * - SW1 : すべてOFF 00027 * - SW7 : すべてON 00028 * - SW8 : 1-2をON、残りはすべてOFF 00029 */ 00030 00031 /** \file main.cpp 00032 * \brief メイン関数定義ファイル 00033 * \author アナログ・デバイセズ株式会社 00034 * \version 1.0 00035 * \date 2007.Jan.16 00036 * 00037 * EZ-KIT BF537のリソースを初期化し、48Ksample/Sのオーディオ 00038 * フレームワークを起動する。受信データはコールバック関数 afw::processData によって 00039 * 送信バッファにコピーバックされる。音量はsw10を押すたびに変化する。 00040 00041 */ 00042 #include <ccblkfn.h> 00043 #include <signal.h> 00044 #include "afw.h" 00045 #include "utilbf537.h" 00046 #include "pb.h" 00047 #include "param.h" 00048 00049 /** 割込みを発生させるスイッチ 00050 */ 00051 const pb::eSwitch sw = pb::sw10; 00052 00053 void pbIntHandler( int ivg ); 00054 00055 /** メイン関数 00056 * 00057 * 各ペリフェラルを初期化後、割り込み待ちに入る。 00058 */ 00059 void main(void) 00060 { 00061 utilbf537::initPLL(); // PLLを設定する 00062 00063 afw::init(); // オーディオ・フレームワーク初期化 00064 afw::startAudio(); // オーディオ処理開始 00065 00066 interrupt( SIGIVG12, &pbIntHandler ); // 割込みハンドラ登録 00067 pb::enableInterrupt( sw ); // プッシュボタン割込み許可 00068 00069 while(1) 00070 ; // 割り込み待ち 00071 } 00072 00073 /** 割り込みハンドラ関数 00074 * 00075 * プッシュ・ボタンからのFLAG IO割り込みを受けて、ゲインを変更する。 00076 */ 00077 void pbIntHandler( int ivg ) 00078 { 00079 00080 if ( pb::interruptRequested() // PORTFからの割り込みか 00081 & pb::pushed( sw ) ){ // プッシュ・ボタン割り込みがかかっているのか 00082 00083 if ( 0.0r != param::gain ) // ゲインを変更する 00084 param::gain = 0.0r; 00085 else 00086 param::gain = 1.0r; // 1.0は表現できないので、最大値に飽和する 00087 pb::clearInterrupt( sw ); // 割り込みをクリアする 00088 } 00089 ssync(); // パイプライン・バス上の書きこみが 00090 // 終了するまで待つ 00091 } 00092 00093
1.4.7