OSDN Git Service

動作検証済み。DSPの負荷率を%で表示できるようになった。出力はsyslog()
[trx-305dsp/dsp.git] / trx305 / framework.h
1 /*
2  *  TOPPERS/JSP Kernel
3  *      Toyohashi Open Platform for Embedded Real-Time Systems/
4  *      Just Standard Profile Kernel
5  *
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
10  *
11  *  上記著作権者は,以下の (1)〜(4) の条件か,Free Software Foundation
12  *  によって公表されている GNU General Public License の Version 2 に記
13  *  述されている条件を満たす場合に限り,本ソフトウェア(本ソフトウェア
14  *  を改変したものを含む.以下同じ)を使用・複製・改変・再配布(以下,
15  *  利用と呼ぶ)することを無償で許諾する.
16  *  (1) 本ソフトウェアをソースコードの形で利用する場合には,上記の著作
17  *      権表示,この利用条件および下記の無保証規定が,そのままの形でソー
18  *      スコード中に含まれていること.
19  *  (2) 本ソフトウェアを,ライブラリ形式など,他のソフトウェア開発に使
20  *      用できる形で再配布する場合には,再配布に伴うドキュメント(利用
21  *      者マニュアルなど)に,上記の著作権表示,この利用条件および下記
22  *      の無保証規定を掲載すること.
23  *  (3) 本ソフトウェアを,機器に組み込むなど,他のソフトウェア開発に使
24  *      用できない形で再配布する場合には,次のいずれかの条件を満たすこ
25  *      と.
26  *    (a) 再配布に伴うドキュメント(利用者マニュアルなど)に,上記の著
27  *        作権表示,この利用条件および下記の無保証規定を掲載すること.
28  *    (b) 再配布の形態を,別に定める方法によって,TOPPERSプロジェクトに
29  *        報告すること.
30  *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
31  *      害からも,上記著作権者およびTOPPERSプロジェクトを免責すること.
32  *
33  *  本ソフトウェアは,無保証で提供されているものである.上記著作権者お
34  *  よびTOPPERSプロジェクトは,本ソフトウェアに関して,その適用可能性も
35  *  含めて,いかなる保証も行わない.また,本ソフトウェアの利用により直
36  *  接的または間接的に生じたいかなる損害に関しても,その責任を負わない.
37  *
38  *  @(#) $Id: sample1.h,v 1.3 2009/05/13 13:10:13 suikan Exp $
39  */
40
41 #ifndef _FRAMEWORK_H_
42 #define _FRAMEWORK_H_
43
44 /*
45  *  RX_IFアプリケーションのヘッダファイル
46  */
47
48 #include <t_services.h>
49 #include "demodulator.h"
50
51
52 /*
53  * デバッグマクロ
54  *
55  * コメントアウトすると機能がディセーブルになる
56 */
57 #define DEBUG_QUEUEDEPTH    // シリアルポートから、タスク間Queueの深さを表示させる
58 #define DEBUG_DSPLOAD       // シリアルポートからDSP負荷率を表示させる
59
60
61 /**
62  * \brief RX_IF受信SPORTバッファのDMAサイズ
63  * \details
64  * RX_IF受信SPORTバッファのDMAサイズ。単位は[count]。バイト単位ではなく
65  * 転送カウントが単位なので注意。
66  * ワイドFMモードの場合、1サンプルが16カウントになる。
67  * 非ワイドFMモードでは、1サンプルが4カウント。
68  *
69  * バッファサイズが32の場合、ワイドFMモードでは2サンプル(63uS)ごとに、
70  * 非ワイドFMモードでは8サンプル(252uS)ごとに割り込みがかかる。
71  *
72  * なお、このバッファサイズは必ず4の倍数にすること。
73  */
74 #define RXIF_BUFSIZE 32
75
76 /**
77  * \brief AF送信SPORTバッファのDMAサイズ
78  * \details
79  * AF送信SPORTバッファのDMAサイズ。単位は[count]。バイト単位ではなく
80  * 転送カウントが単位なので注意。
81  * 1サンプルが2カウント。
82  *
83  * バッファサイズが8の場合、4サンプル(126uS)ごとに割り込みがかかる。
84  *
85  * なお、このバッファサイズは必ず2の倍数にすること。
86  */
87 #define AF_BUFSIZE 8
88
89
90 /**
91  * \brief TASK_RX_IF と TASK_AF の間のデータキューサイズ
92  * \details
93  * 2つのタスクの間のキューのサイズ[エントリ]を指定する。両タスクの
94  * 実行の間にはWideFM/nonWideFM切り替えと、割り込み周期の差異に起因する
95  * ジッターが生じするため、キューが必要になる。
96  *
97  * キューのサイズを決める要素は2つある。ひとつはキュー受信側
98  * (TASK_AF)がデータを読み取る周期、もうひとつはキュー送信側
99  * (TASK_RX_IF)がデータを読み取る周期である。いずれも単位はサンプルで、
100  * このうち大きなほうがデータキューのサイズを決める。
101  *
102  * キューはオーバーフローとアンダーフローを避けるように作らなければならない。
103  * アンダーフローはキューの受信側の割り込みが先行した場合に発生する。
104  * これを避けるには、受信側が先行した場合に備えてダミーデータを
105  * キューに入れておく必要がある。この数は、先で論じた周期の一番大きい物に
106  * しておく。
107  *
108  * オーバーフローはキューの送信側の割り込みが先行した場合に発生する。
109  * これを避けるには、送信側が先行した場合に備えて空き領域を
110  * 確保する必要がある。この数は先で論じた周期の一番大きい物に
111  * しておく。
112  *
113  * 結論として、キューには、最も長い割り込み周期[単位はサンプル]の倍の
114  * 領域が必要である。
115  *
116  * なお、このソフトウェアは1サンプルあたり2[エントリ]をキューに格納するため、
117  * キューの長さ[エントリ]は、割り込み周期[サンプル]の四倍になる。
118  *
119  *
120  */
121 #define AF_QUESIZE          80      /* 送受信タスクの間のキューの長さ。8サンプルが最長割り込み周期と仮定してさらにマージンをもたせている */
122
123 #define WIDE_FM_OVERSAMPE   8       /* AF1サンプルあたりのWide FM サンプル数 */
124
125 #define WIDE_FM_FLAG        2       /* プライマリ・チャンネルのWIDE FM Modeを表すフラグのマスク */
126
127 /*
128  *  各タスクの優先度の定義
129  */
130
131 #define TASK_PRIORITY_RX_IF   10  /* RX-IF DMA処理タスクの優先度。復調も行う */
132 #define TASK_PRIORITY_AF       5  /* AF DMAタスクの優先度。送信なので優先度高 */
133 #define TASK_PRIORITY_MONITOR 15  /* モニター・タスクの優先度。優先度低 */
134
135 /*
136  *  ターゲット依存の定義(CPU例外ハンドラの起動方法など)
137  */
138
139
140 #define STACK_SIZE_RX_IF    1024    /* タスクのスタックサイズ */
141 #define STACK_SIZE_AF       1024    /* タスクのスタックサイズ */
142 #define STACK_SIZE_MONITOR  1024    /* タスクのスタックサイズ */
143 #define TASK_PORTID         1       /* 文字入力するシリアルポートID */
144
145
146
147 /*
148  *  関数のプロトタイプ宣言
149  */
150 #ifndef _MACRO_ONLY
151
152 extern void rx_if_task(VP_INT exinf);   /* SPORT0 RX DMAバッファの内容を復調するタスク */
153 extern void af_task(VP_INT exinf);      /* 復調済みAF信号をSPORT0 TX DMAバッファにコピーするタスク */
154 extern void monitor_task(VP_INT exinf);   /* SPORT0 TX DMAバッファにAFデータを書き込むタスク */
155 extern void sport0_rx_int_handler( void );  /* SPORT0 RX DMA割り込みのハンドラ */
156 extern void sport0_tx_int_handler( void );  /* SPORT0 TX DMA割り込みのハンドラ */
157 void init_peripherals(VP_INT p);        /* ペリフェラルの初期化関数 */
158
159
160 #endif /* _MACRO_ONLY */
161
162 #endif /* _FRAMEWORK_H_ */