3 * \brief フレームワーク・インクルードファイル
5 * 原則としてこのファイルの中の宣言をユーザーが変更する必要はない。例外はデバッグマクロのコメントアウト制御である。
7 * このファイルの中には複数のデバッグマクロが用意されており、これらのコメントアウトを説いて宣言状態にすると、DSP UARTのシリアルポートから
8 * 内部状態を見ることができる。以下にマクロを列挙する。これらはフレームワークの開発中に使用したものをそのまま残している。
10 * ユーザーが使うとすれば、DEBUG_DSPLOADか、DEBUG_COMMANDだろう。
12 * \li DEBUG_QUEUEDEPTH シリアルポートから、タスク間Queueの深さを表示させる
13 * \li DEBUG_DSPLOAD シリアルポートからDSP負荷率を表示させる
14 * \li DEBUG_COMMAND DSPに送られてくるコマンドの表示
15 * \li DEBUG_COMMAND_API 復調器から使えるAPIのデバッグ用
16 * \li DEBUG_BLOCK_FLOAT WFMモードでブロック浮動小数点の整数化がうまく出来ているかダンプする。
24 * RX_IFアプリケーションのヘッダファイル
27 #include <t_services.h>
28 #include "demodulator.h"
34 * コメントアウトすると機能がディセーブルになる
36 // #define DEBUG_QUEUEDEPTH // シリアルポートから、タスク間Queueの深さを表示させる
37 // #define DEBUG_DSPLOAD // シリアルポートからDSP負荷率を表示させる
38 // #define DEBUG_COMMAND // DSPに送られてくるコマンドの表示
39 // #define DEBUG_COMMAND_API // 復調器から使えるAPIのデバッグ用
40 // #define DEBUG_BLOCK_FLOAT // WFMモードでブロック浮動小数点の整数化がうまく出来ているかダンプする。
43 * \brief RX_IF受信SPORTバッファのDMAサイズ
45 * RX_IF受信SPORTバッファのDMAサイズ。単位は[count]。バイト単位ではなく
47 * ワイドFMモードの場合、1サンプルが16カウントになる。
48 * 非ワイドFMモードでは、1サンプルが4カウント。
50 * バッファサイズが32の場合、ワイドFMモードでは2サンプル(63uS)ごとに、
51 * 非ワイドFMモードでは8サンプル(252uS)ごとに割り込みがかかる。
53 * なお、このバッファサイズは必ず4の倍数にすること。
55 #define RXIF_BUFSIZE 32
58 * \brief AF送信SPORTバッファのDMAサイズ
60 * AF送信SPORTバッファのDMAサイズ。単位は[count]。バイト単位ではなく
64 * バッファサイズが8の場合、4サンプル(126uS)ごとに割り込みがかかる。
66 * なお、このバッファサイズは必ず2の倍数にすること。
72 * \brief TASK_RX_IF と TASK_AF の間のデータキューサイズ
74 * 2つのタスクの間のキューのサイズ[エントリ]を指定する。両タスクの
75 * 実行の間にはWideFM/nonWideFM切り替えと、割り込み周期の差異に起因する
76 * ジッターが生じするため、キューが必要になる。
78 * キューのサイズを決める要素は2つある。ひとつはキュー受信側
79 * (TASK_AF)がデータを読み取る周期、もうひとつはキュー送信側
80 * (TASK_RX_IF)がデータを読み取る周期である。いずれも単位はサンプルで、
81 * このうち大きなほうがデータキューのサイズを決める。
83 * キューはオーバーフローとアンダーフローを避けるように作らなければならない。
84 * アンダーフローはキューの受信側の割り込みが先行した場合に発生する。
85 * これを避けるには、受信側が先行した場合に備えてダミーデータを
86 * キューに入れておく必要がある。この数は、先で論じた周期の一番大きい物に
89 * オーバーフローはキューの送信側の割り込みが先行した場合に発生する。
90 * これを避けるには、送信側が先行した場合に備えて空き領域を
91 * 確保する必要がある。この数は先で論じた周期の一番大きい物に
94 * 結論として、キューには、最も長い割り込み周期[単位はサンプル]の倍の
97 * なお、このソフトウェアは1サンプルあたり2[エントリ]をキューに格納するため、
98 * これを勘案すると、最低でもキューの長さ[エントリ]は、割り込み周期[サンプル]の四倍になる。
102 #define AF_QUESIZE 80 /* 送受信タスクの間のキューの長さ。8サンプルが最長割り込み周期と仮定してさらにマージンをもたせている */
104 #define WIDE_FM_OVERSAMPE 8 /* AF1サンプルあたりのWide FM サンプル数 */
106 #define WIDE_FM_FLAG 2 /* プライマリ・チャンネルのWIDE FM Modeを表すフラグのマスク */
108 #define PARAMDATA_NUM 16
115 #define TASK_PRIORITY_AF 5 /* AF DMAタスクの優先度。送信なので優先度高 */
116 #define TASK_PRIORITY_RX_IF 10 /* RX-IF DMA処理タスクの優先度。復調も行う */
117 #define LOGTASK_PRIORITY 12 /* デフォルトの初期優先度を上書きする */
118 #define TASK_PRIORITY_MONITOR 15 /* モニター・タスクの優先度。優先度低 */
121 * ターゲット依存の定義(CPU例外ハンドラの起動方法など)
125 #define STACK_SIZE_RX_IF 1024 /* タスクのスタックサイズ */
126 #define STACK_SIZE_AF 1024 /* タスクのスタックサイズ */
127 #define STACK_SIZE_MONITOR 1024 /* タスクのスタックサイズ */
128 #define TASK_PORTID 1 /* 文字入力するシリアルポートID */
138 * \brief フレームワークがラジオとのやりとりに使う変数。
140 * フレームワークはFPGAから送られてきたデータをこの変数の中に格納する。復調アルゴリズムは \ref getInfo を通してこれらの値にアクセスする。
143 // ラジオアルゴリズムとのやりとりに使う変数
144 extern struct RADIO {
145 unsigned short flags;
146 unsigned short smeter;
147 unsigned short comdata[PARAMDATA_NUM];
150 extern struct RADIO radio;
153 extern void rx_if_task(VP_INT exinf); /* SPORT0 RX DMAバッファの内容を復調するタスク */
154 extern void af_task(VP_INT exinf); /* 復調済みAF信号をSPORT0 TX DMAバッファにコピーするタスク */
155 extern void monitor_task(VP_INT exinf); /* SPORT0 TX DMAバッファにAFデータを書き込むタスク */
156 extern void sport0_rx_int_handler( void ); /* SPORT0 RX DMA割り込みのハンドラ */
157 extern void sport0_tx_int_handler( void ); /* SPORT0 TX DMA割り込みのハンドラ */
158 void init_peripherals(VP_INT p); /* ペリフェラルの初期化関数 */
161 #endif /* _MACRO_ONLY */
163 #endif /* _FRAMEWORK_H_ */