*/
static void unpack_wide_fm ( unsigned int pri_ch, unsigned int sec_ch, int* idata, int* qdata )
{
- int command, data;
+ int command, data, exp, i, q;
// iデータとqデータを抽出する。両者とも16bitで、bit14からbit29に格納されている
- *idata = ( pri_ch << 2 ) & 0xFFFF0000;
- *qdata = ( sec_ch << 2 ) & 0xFFFF0000;
+ i = ( pri_ch << 2 ) & 0xFFFF0000;
+ q = ( sec_ch << 2 ) & 0xFFFF0000;
+ // ブロック浮動小数点処理。expでスケーリングする。
+ exp = ( pri_ch >> 10 ) & 0x0F;
+ *idata = i >> exp;
+ *qdata = q >> exp;
+
+#ifdef DEBUG_BLOCK_FLOAT
+ {
+ static int tested = 0;
+ if ( (i & 0x80000000) && ! tested )
+ {
+ tested = 1;
+ syslog( LOG_NOTICE, "i: %8x, exp: %d, idata:%8x", i, exp, *idata);
+ }
+ }
+#endif
// パラメータ・データを配列に格納する。
// 配列インデックスは comaddr、データはcomdataから。
// comdataはpri/secに分散している。
* \param sec_ch セカンダリ・チャンネルからのデータ
* \param idata 抽出したIデータ。[-1,1.0)の固定小数点形式。valid_iqが真の時のみ有効
* \param qdata 抽出したQデータ。[-1,1.0)の固定小数点形式。valid_iqが真の時のみ有効
- * \param valid_iq IQデータが有効の時真、向こうの時は偽
+ * \param valid_iq IQデータが有効の時真、無効の時は偽
* \detail
*/
/**
* \brief SHからのコマンドとパラメタを保存する
- * \param command
- * \param data
- * \details このルーチンはcfgファイルで宣言され、SPORT0 RX 割り込みハンドラとして登録される。
- * SPORT0 RX DMAがバッファの受信を終えるたびに呼び出される。
- * 割り込み専有時間を小さくするため、実際には、割り込みのクリアと受信タスクへの通知しかしていない。
+ * \param command コマンド種別
+ * \param data コマンドパラメータ
+ * \details このルーチンはSHからFPGA経由で受け取ったコマンドとそのデータを内部変数に格納する。
+ * 格納されたデータはユーザーが実装した復調アルゴリズムから、API経由で利用される。
*/
static void set_command_data( unsigned int command, unsigned int data )
{
*
* コメントアウトすると機能がディセーブルになる
*/
- #define DEBUG_QUEUEDEPTH // シリアルポートから、タスク間Queueの深さを表示させる
- #define DEBUG_DSPLOAD // シリアルポートからDSP負荷率を表示させる
-#define DEBUG_COMMAND // DSPに送られてくるコマンドの表示
-//#define DEBUG_COMMAND_API // 復調器から使えるAPIのデバッグ用
+// #define DEBUG_QUEUEDEPTH // シリアルポートから、タスク間Queueの深さを表示させる
+// #define DEBUG_DSPLOAD // シリアルポートからDSP負荷率を表示させる
+// #define DEBUG_COMMAND // DSPに送られてくるコマンドの表示
+// #define DEBUG_COMMAND_API // 復調器から使えるAPIのデバッグ用
+// #define DEBUG_BLOCK_FLOAT // WFMモードでブロック浮動小数点の整数化がうまく出来ているかダンプする。
/**
* \brief RX_IF受信SPORTバッファのDMAサイズ