3 * Toyohashi Open Platform for Embedded Real-Time Systems/
4 * Just Standard Profile Kernel
6 * Copyright (C) 2000-2003 by Embedded and Real-Time Systems Laboratory
7 * Toyohashi Univ. of Technology, JAPAN
8 * Copyright (C) 2005 by Embedded and Real-Time Systems Laboratory
9 * Graduate School of Information Science, Nagoya Univ., JAPAN
11 * 上記著作権者は,以下の (1)〜(4) の条件か,Free Software Foundation
12 * によって公表されている GNU General Public License の Version 2 に記
13 * 述されている条件を満たす場合に限り,本ソフトウェア(本ソフトウェア
14 * を改変したものを含む.以下同じ)を使用・複製・改変・再配布(以下,
16 * (1) 本ソフトウェアをソースコードの形で利用する場合には,上記の著作
17 * 権表示,この利用条件および下記の無保証規定が,そのままの形でソー
19 * (2) 本ソフトウェアを,ライブラリ形式など,他のソフトウェア開発に使
20 * 用できる形で再配布する場合には,再配布に伴うドキュメント(利用
21 * 者マニュアルなど)に,上記の著作権表示,この利用条件および下記
23 * (3) 本ソフトウェアを,機器に組み込むなど,他のソフトウェア開発に使
24 * 用できない形で再配布する場合には,次のいずれかの条件を満たすこ
26 * (a) 再配布に伴うドキュメント(利用者マニュアルなど)に,上記の著
27 * 作権表示,この利用条件および下記の無保証規定を掲載すること.
28 * (b) 再配布の形態を,別に定める方法によって,TOPPERSプロジェクトに
30 * (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
31 * 害からも,上記著作権者およびTOPPERSプロジェクトを免責すること.
33 * 本ソフトウェアは,無保証で提供されているものである.上記著作権者お
34 * よびTOPPERSプロジェクトは,本ソフトウェアに関して,その適用可能性も
35 * 含めて,いかなる保証も行わない.また,本ソフトウェアの利用により直
36 * 接的または間接的に生じたいかなる損害に関しても,その責任を負わない.
38 * @(#) $Id: sample1.h,v 1.3 2009/05/13 13:10:13 suikan Exp $
45 * RX_IFアプリケーションのヘッダファイル
48 #include <t_services.h>
49 #include "demodulator.h"
55 * コメントアウトすると機能がディセーブルになる
57 // #define DEBUG_QUEUEDEPTH // シリアルポートから、タスク間Queueの深さを表示させる
58 // #define DEBUG_DSPLOAD // シリアルポートからDSP負荷率を表示させる
59 // #define DEBUG_COMMAND // DSPに送られてくるコマンドの表示
60 // #define DEBUG_COMMAND_API // 復調器から使えるAPIのデバッグ用
61 // #define DEBUG_BLOCK_FLOAT // WFMモードでブロック浮動小数点の整数化がうまく出来ているかダンプする。
64 * \brief RX_IF受信SPORTバッファのDMAサイズ
66 * RX_IF受信SPORTバッファのDMAサイズ。単位は[count]。バイト単位ではなく
68 * ワイドFMモードの場合、1サンプルが16カウントになる。
69 * 非ワイドFMモードでは、1サンプルが4カウント。
71 * バッファサイズが32の場合、ワイドFMモードでは2サンプル(63uS)ごとに、
72 * 非ワイドFMモードでは8サンプル(252uS)ごとに割り込みがかかる。
74 * なお、このバッファサイズは必ず4の倍数にすること。
76 #define RXIF_BUFSIZE 32
79 * \brief AF送信SPORTバッファのDMAサイズ
81 * AF送信SPORTバッファのDMAサイズ。単位は[count]。バイト単位ではなく
85 * バッファサイズが8の場合、4サンプル(126uS)ごとに割り込みがかかる。
87 * なお、このバッファサイズは必ず2の倍数にすること。
93 * \brief TASK_RX_IF と TASK_AF の間のデータキューサイズ
95 * 2つのタスクの間のキューのサイズ[エントリ]を指定する。両タスクの
96 * 実行の間にはWideFM/nonWideFM切り替えと、割り込み周期の差異に起因する
97 * ジッターが生じするため、キューが必要になる。
99 * キューのサイズを決める要素は2つある。ひとつはキュー受信側
100 * (TASK_AF)がデータを読み取る周期、もうひとつはキュー送信側
101 * (TASK_RX_IF)がデータを読み取る周期である。いずれも単位はサンプルで、
102 * このうち大きなほうがデータキューのサイズを決める。
104 * キューはオーバーフローとアンダーフローを避けるように作らなければならない。
105 * アンダーフローはキューの受信側の割り込みが先行した場合に発生する。
106 * これを避けるには、受信側が先行した場合に備えてダミーデータを
107 * キューに入れておく必要がある。この数は、先で論じた周期の一番大きい物に
110 * オーバーフローはキューの送信側の割り込みが先行した場合に発生する。
111 * これを避けるには、送信側が先行した場合に備えて空き領域を
112 * 確保する必要がある。この数は先で論じた周期の一番大きい物に
115 * 結論として、キューには、最も長い割り込み周期[単位はサンプル]の倍の
118 * なお、このソフトウェアは1サンプルあたり2[エントリ]をキューに格納するため、
119 * キューの長さ[エントリ]は、割り込み周期[サンプル]の四倍になる。
123 #define AF_QUESIZE 80 /* 送受信タスクの間のキューの長さ。8サンプルが最長割り込み周期と仮定してさらにマージンをもたせている */
125 #define WIDE_FM_OVERSAMPE 8 /* AF1サンプルあたりのWide FM サンプル数 */
127 #define WIDE_FM_FLAG 2 /* プライマリ・チャンネルのWIDE FM Modeを表すフラグのマスク */
129 #define PARAMDATA_NUM 16
136 #define TASK_PRIORITY_AF 5 /* AF DMAタスクの優先度。送信なので優先度高 */
137 #define TASK_PRIORITY_RX_IF 10 /* RX-IF DMA処理タスクの優先度。復調も行う */
138 #define LOGTASK_PRIORITY 12 /* デフォルトの初期優先度を上書きする */
139 #define TASK_PRIORITY_MONITOR 15 /* モニター・タスクの優先度。優先度低 */
142 * ターゲット依存の定義(CPU例外ハンドラの起動方法など)
146 #define STACK_SIZE_RX_IF 1024 /* タスクのスタックサイズ */
147 #define STACK_SIZE_AF 1024 /* タスクのスタックサイズ */
148 #define STACK_SIZE_MONITOR 1024 /* タスクのスタックサイズ */
149 #define TASK_PORTID 1 /* 文字入力するシリアルポートID */
159 // ラジオアルゴリズムとのやりとりに使う変数
160 extern struct RADIO {
161 unsigned short flags;
162 unsigned short smeter;
163 unsigned short comdata[PARAMDATA_NUM];
166 extern struct RADIO radio;
169 extern void rx_if_task(VP_INT exinf); /* SPORT0 RX DMAバッファの内容を復調するタスク */
170 extern void af_task(VP_INT exinf); /* 復調済みAF信号をSPORT0 TX DMAバッファにコピーするタスク */
171 extern void monitor_task(VP_INT exinf); /* SPORT0 TX DMAバッファにAFデータを書き込むタスク */
172 extern void sport0_rx_int_handler( void ); /* SPORT0 RX DMA割り込みのハンドラ */
173 extern void sport0_tx_int_handler( void ); /* SPORT0 TX DMA割り込みのハンドラ */
174 void init_peripherals(VP_INT p); /* ペリフェラルの初期化関数 */
177 #endif /* _MACRO_ONLY */
179 #endif /* _FRAMEWORK_H_ */