Hirado  0.9.1
 All Data Structures Files Functions Variables Macros Groups
Data Structures | Macros | Functions | Variables
フレームワーク内部宣言

フレームワークの内部で使うオブジェクトの内部宣言。基本的にユーザーは参照しなくていい More...

Data Structures

struct  RADIO
 フレームワークがラジオとのやりとりに使う変数の型。 More...
 

Macros

#define RXIF_BUFSIZE   32
 RX_IF受信SPORTバッファのDMAサイズ More...
 
#define AF_BUFSIZE   8
 AF送信SPORTバッファのDMAサイズ More...
 
#define AF_QUESIZE   80 /* 送受信タスクの間のキューの長さ。8サンプルが最長割り込み周期と仮定してさらにマージンをもたせている */
 TASK_RX_IF と TASK_AF の間のデータキューサイズ More...
 
#define WIDE_FM_OVERSAMPE   8
 AF1サンプルあたりのWide FM サンプル数
 
#define WIDE_FM_FLAG   2
 プライマリ・チャンネルのWIDE FM Modeを表すフラグのマスク
 
#define PARAMDATA_NUM   16
 SHマイコン/FPGAから送られてくるコマンドの種類の数
 
#define TASK_PRIORITY_AF   5
 
#define TASK_PRIORITY_RX_IF   10
 
#define LOGTASK_PRIORITY   12
 
#define TASK_PRIORITY_MONITOR   15
 
#define STACK_SIZE_RX_IF   1024
 
#define STACK_SIZE_AF   1024
 
#define STACK_SIZE_MONITOR   1024
 
#define TASK_PORTID   1
 

Functions

void rx_if_task (VP_INT exinf)
 SPORT0 RX DMAバッファの内容を復調するタスク More...
 
void af_task (VP_INT exinf)
 復調済みAF信号をSPORT0 TX DMAバッファにコピーするタスク More...
 
void monitor_task (VP_INT exinf)
 デバッグ用のデータ収集を行うバックグラウン・タスク More...
 
void sport0_rx_int_handler (void)
 SPORT0 RX DMA割り込みのハンドラ
 
void sport0_tx_int_handler (void)
 SPORT0 TX DMA割り込みのハンドラ
 
void init_peripherals (VP_INT p)
 ペリフェラルの初期化関数 More...
 

Variables

struct RADIO radio
 フレームワークがラジオとのやりとりに使う変数。
 

Detailed Description

フレームワークの内部で使うオブジェクトの内部宣言。基本的にユーザーは参照しなくていい

Macro Definition Documentation

#define AF_BUFSIZE   8

AF送信SPORTバッファのDMAサイズ

AF送信SPORTバッファのDMAサイズ。単位は[count]。バイト単位ではなく 転送カウントが単位なので注意。 1サンプルが2カウント。

バッファサイズが8の場合、4サンプル(126uS)ごとに割り込みがかかる。

なお、このバッファサイズは必ず2の倍数にすること。

#define AF_QUESIZE   80 /* 送受信タスクの間のキューの長さ。8サンプルが最長割り込み周期と仮定してさらにマージンをもたせている */

TASK_RX_IF と TASK_AF の間のデータキューサイズ

2つのタスクの間のキューのサイズ[エントリ]を指定する。両タスクの 実行の間にはWideFM/nonWideFM切り替えと、割り込み周期の差異に起因する ジッターが生じするため、キューが必要になる。

キューのサイズを決める要素は2つある。ひとつはキュー受信側 (TASK_AF)がデータを読み取る周期、もうひとつはキュー送信側 (TASK_RX_IF)がデータを読み取る周期である。いずれも単位はサンプルで、 このうち大きなほうがデータキューのサイズを決める。

キューはオーバーフローとアンダーフローを避けるように作らなければならない。 アンダーフローはキューの受信側の割り込みが先行した場合に発生する。 これを避けるには、受信側が先行した場合に備えてダミーデータを キューに入れておく必要がある。この数は、先で論じた周期の一番大きい物に しておく。

オーバーフローはキューの送信側の割り込みが先行した場合に発生する。 これを避けるには、送信側が先行した場合に備えて空き領域を 確保する必要がある。この数は先で論じた周期の一番大きい物に しておく。

結論として、キューには、最も長い割り込み周期[単位はサンプル]の倍の 領域が必要である。

なお、このソフトウェアは1サンプルあたり2[エントリ]をキューに格納するため、 これを勘案すると、最低でもキューの長さ[エントリ]は、割り込み周期[サンプル]の四倍になる。

#define LOGTASK_PRIORITY   12

breif デフォルトの初期優先度を上書きする

#define RXIF_BUFSIZE   32

RX_IF受信SPORTバッファのDMAサイズ

RX_IF受信SPORTバッファのDMAサイズ。単位は[count]。バイト単位ではなく 転送カウントが単位なので注意。 ワイドFMモードの場合、1サンプルが16カウントになる。 非ワイドFMモードでは、1サンプルが4カウント。

バッファサイズが32の場合、ワイドFMモードでは2サンプル(63uS)ごとに、 非ワイドFMモードでは8サンプル(252uS)ごとに割り込みがかかる。

なお、このバッファサイズは必ず4の倍数にすること。

#define STACK_SIZE_AF   1024

breif タスクのスタックサイズ

#define STACK_SIZE_MONITOR   1024

breif タスクのスタックサイズ

#define STACK_SIZE_RX_IF   1024

breif タスクのスタックサイズ

#define TASK_PORTID   1

breif 文字入力するシリアルポートID

#define TASK_PRIORITY_AF   5

breif AF DMAタスクの優先度。送信なので優先度高

#define TASK_PRIORITY_MONITOR   15

breif モニター・タスクの優先度。優先度低

#define TASK_PRIORITY_RX_IF   10

breif RX-IF DMA処理タスクの優先度。復調も行う

Function Documentation

void af_task ( VP_INT  exinf)

復調済みAF信号をSPORT0 TX DMAバッファにコピーするタスク

Parameters
exinfタスクに渡す拡張データ。このタスクには何も渡さなくていい

このタスクは sport0_tx_int_handler() 割り込みハンドラからの セマフォ・シグナルを受け取り、タスク間キューからデータを取り出しSPORT処理を行う。

void init_peripherals ( VP_INT  p)

ペリフェラルの初期化関数

Parameters
pタスクに渡す拡張データ。このタスクには何も渡さなくていい
void monitor_task ( VP_INT  exinf)

デバッグ用のデータ収集を行うバックグラウン・タスク

Parameters
exinfタスクに渡す拡張データ。このタスクには何も渡さなくていい
void rx_if_task ( VP_INT  exinf)

SPORT0 RX DMAバッファの内容を復調するタスク

Parameters
exinfタスクに渡す拡張データ。このタスクには何も渡さなくていい

このタスクは sport0_rx_int_handler() 割り込みハンドラからの セマフォ・シグナルを受け取って受信処理を行う。