OSDN Git Service

doxygenコメント追加
[trx-305dsp/dsp.git] / hirado / framework.h
1 /**
2  * \file framework.h
3  * \brief フレームワーク・インクルードファイル
4  * \details
5  * 原則としてこのファイルの中の宣言をユーザーが変更する必要はない。例外はデバッグマクロのコメントアウト制御である。
6  *
7  * このファイルの中には複数のデバッグマクロが用意されており、これらのコメントアウトを説いて宣言状態にすると、DSP UARTのシリアルポートから
8  * 内部状態を見ることができる。以下にマクロを列挙する。これらはフレームワークの開発中に使用したものをそのまま残している。
9  *
10  * ユーザーが使うとすれば、DEBUG_DSPLOADか、DEBUG_COMMANDだろう。
11  *
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モードでブロック浮動小数点の整数化がうまく出来ているかダンプする。
17  *
18  */
19
20 #ifndef _FRAMEWORK_H_
21 #define _FRAMEWORK_H_
22
23 /*
24  *  RX_IFアプリケーションのヘッダファイル
25  */
26
27 #include <t_services.h>
28 #include "demodulator.h"
29
30
31 /*
32  * デバッグマクロ
33  *
34  * コメントアウトすると機能がディセーブルになる
35 */
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モードでブロック浮動小数点の整数化がうまく出来ているかダンプする。
41
42 /**
43  * \brief RX_IF受信SPORTバッファのDMAサイズ
44  * \details
45  * RX_IF受信SPORTバッファのDMAサイズ。単位は[count]。バイト単位ではなく
46  * 転送カウントが単位なので注意。
47  * ワイドFMモードの場合、1サンプルが16カウントになる。
48  * 非ワイドFMモードでは、1サンプルが4カウント。
49  *
50  * バッファサイズが32の場合、ワイドFMモードでは2サンプル(63uS)ごとに、
51  * 非ワイドFMモードでは8サンプル(252uS)ごとに割り込みがかかる。
52  *
53  * なお、このバッファサイズは必ず4の倍数にすること。
54  */
55 #define RXIF_BUFSIZE 32
56
57 /**
58  * \brief AF送信SPORTバッファのDMAサイズ
59  * \details
60  * AF送信SPORTバッファのDMAサイズ。単位は[count]。バイト単位ではなく
61  * 転送カウントが単位なので注意。
62  * 1サンプルが2カウント。
63  *
64  * バッファサイズが8の場合、4サンプル(126uS)ごとに割り込みがかかる。
65  *
66  * なお、このバッファサイズは必ず2の倍数にすること。
67  */
68 #define AF_BUFSIZE 8
69
70
71 /**
72  * \brief TASK_RX_IF と TASK_AF の間のデータキューサイズ
73  * \details
74  * 2つのタスクの間のキューのサイズ[エントリ]を指定する。両タスクの
75  * 実行の間にはWideFM/nonWideFM切り替えと、割り込み周期の差異に起因する
76  * ジッターが生じするため、キューが必要になる。
77  *
78  * キューのサイズを決める要素は2つある。ひとつはキュー受信側
79  * (TASK_AF)がデータを読み取る周期、もうひとつはキュー送信側
80  * (TASK_RX_IF)がデータを読み取る周期である。いずれも単位はサンプルで、
81  * このうち大きなほうがデータキューのサイズを決める。
82  *
83  * キューはオーバーフローとアンダーフローを避けるように作らなければならない。
84  * アンダーフローはキューの受信側の割り込みが先行した場合に発生する。
85  * これを避けるには、受信側が先行した場合に備えてダミーデータを
86  * キューに入れておく必要がある。この数は、先で論じた周期の一番大きい物に
87  * しておく。
88  *
89  * オーバーフローはキューの送信側の割り込みが先行した場合に発生する。
90  * これを避けるには、送信側が先行した場合に備えて空き領域を
91  * 確保する必要がある。この数は先で論じた周期の一番大きい物に
92  * しておく。
93  *
94  * 結論として、キューには、最も長い割り込み周期[単位はサンプル]の倍の
95  * 領域が必要である。
96  *
97  * なお、このソフトウェアは1サンプルあたり2[エントリ]をキューに格納するため、
98  * これを勘案すると、最低でもキューの長さ[エントリ]は、割り込み周期[サンプル]の四倍になる。
99  *
100  *
101  */
102 #define AF_QUESIZE          80      /* 送受信タスクの間のキューの長さ。8サンプルが最長割り込み周期と仮定してさらにマージンをもたせている */
103
104 #define WIDE_FM_OVERSAMPE   8       /* AF1サンプルあたりのWide FM サンプル数 */
105
106 #define WIDE_FM_FLAG        2       /* プライマリ・チャンネルのWIDE FM Modeを表すフラグのマスク */
107
108 #define PARAMDATA_NUM 16
109
110
111 /*
112  *  各タスクの優先度の定義
113  */
114
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  /* モニター・タスクの優先度。優先度低 */
119
120 /*
121  *  ターゲット依存の定義(CPU例外ハンドラの起動方法など)
122  */
123
124
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 */
129
130
131
132 /*
133  *  関数のプロトタイプ宣言
134  */
135 #ifndef _MACRO_ONLY
136
137 /**
138  * \brief フレームワークがラジオとのやりとりに使う変数。
139  * \details
140  * フレームワークはFPGAから送られてきたデータをこの変数の中に格納する。復調アルゴリズムは \ref getInfo を通してこれらの値にアクセスする。
141  */
142
143     // ラジオアルゴリズムとのやりとりに使う変数
144 extern struct RADIO {
145     unsigned short flags;
146     unsigned short smeter;
147     unsigned short comdata[PARAMDATA_NUM];
148 } radio;
149
150 extern struct RADIO radio;
151
152
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);        /* ペリフェラルの初期化関数 */
159
160
161 #endif /* _MACRO_ONLY */
162
163 #endif /* _FRAMEWORK_H_ */