• R/O
  • HTTP
  • SSH
  • HTTPS

dsp: 提交

TRX-305内蔵DSPのフレームワーク開発リポジトリ。


Commit MetaInfo

修訂9e8be2bb4bf7d960af7709100ca9cb8e4bceabd0 (tree)
時間2015-05-22 22:46:51
作者suikan <suikan@user...>
Commitersuikan

Log Message

このコミットで、SPORT0のTX/RXのDMAがかっちり動作している。QUEUEもオーバーフロー・アンダーフローを起こさないことを確認。

#define DEBUG_QUEUELENGTHでチェックできる。

Change Summary

差異

--- a/trx305/framework.c
+++ b/trx305/framework.c
@@ -46,12 +46,13 @@ static struct {
4646 } radio;
4747
4848
49+ // デバッグ用変数群
50+#if defined (DEBUG_QUEUEDEPTH)
4951 static int debug_counter = 0;
50-static int debug_level = 0;
51-static int debug_tx_counter = 0;
52-static int debug_rx_counter = 0;
53-
54-#define DEBUGLOOP (31700)
52+static int debug_queue_level = 0;
53+static int debug_queue_max = INT_MIN;
54+static int debug_queue_min = INT_MAX;
55+#endif
5556
5657
5758 /**
@@ -82,7 +83,11 @@ void rx_if_task(VP_INT exinf)
8283 pack_af_sample(0, 0, &af_pri_ch, &af_sec_ch);
8384 syscall(psnd_dtq(DTQ_AF, (VP_INT)af_pri_ch));
8485 syscall(psnd_dtq(DTQ_AF, (VP_INT)af_sec_ch));
85- debug_level ++;
86+#ifdef DEBUG_QUEUEDEPTH
87+ debug_queue_level +=2;
88+ if ( debug_queue_level > debug_queue_max)
89+ debug_queue_max = debug_queue_level;
90+#endif // DEBUG_QUEUEDEPTH
8691 }
8792
8893
@@ -105,7 +110,6 @@ void rx_if_task(VP_INT exinf)
105110 init_sport0_tx(); // 送信DMA開始。割り込みはまだ生成しない
106111 init_sport0_rx(); // 受信DMA開始。割り込みイネーブル。
107112
108-#if 1
109113 // AF送信を開始する。ただし、送信DMA割り込みはまだ発生しない。
110114 *pDMA2_CONFIG |= DMAEN; // TX SPORT DMA Enable
111115 *pSPORT0_TCR1 |= TSPEN; // TX SPORT Enable
@@ -127,28 +131,6 @@ void rx_if_task(VP_INT exinf)
127131 *pDMA1_CONFIG |= DMAEN; // RX SPORT DMA Enable
128132 *pSPORT0_RCR1 |= RSPEN; // RX SPORT Enable
129133 ssync();
130-#else
131- syscall(act_tsk(TASK_AF)); // AFデータ送信タスクをアクティブにする
132- *pDMA1_CONFIG = 0; // RX SPORT DMA Disable
133- *pDMA2_CONFIG = 0;
134- *pSPORT0_TCR1 |= RSPEN; // TX SPORT Enable
135- *pSPORT0_RCR1 |= RSPEN; // RX SPORT Enable
136- ssync();
137-
138-#endif
139-
140- while(1)
141- {
142- tslp_tsk(1000);
143- syslog( LOG_INFO, "TX: %d, RX: %d, lenght: %d", debug_tx_counter, debug_rx_counter, debug_counter );
144- syslog( LOG_NOTICE, "SPORT0_TCR1 %04x", *pSPORT0_TCR1);
145- syslog( LOG_NOTICE, "SPORT0_TCR2 %04x", *pSPORT0_TCR2);
146- syslog( LOG_NOTICE, "SPORT0_STAT %04x", *pSPORT0_STAT);
147- syslog( LOG_NOTICE, "SPORT0_TCLKDIV %04x", *pSPORT0_TCLKDIV);
148- syslog( LOG_NOTICE, "SPORT0_TFSDIV %04x", *pSPORT0_TFSDIV);
149-
150- }
151-
152134
153135
154136 /*
@@ -211,11 +193,13 @@ void rx_if_task(VP_INT exinf)
211193
212194 // パック済みオーディオサンプルをAFキューに送信する
213195 // キューに空きがなければ、待たずにエラーをもって帰る
214-#if 0
215196 syscall(psnd_dtq(DTQ_AF, (VP_INT)af_pri_ch));
216197 syscall(psnd_dtq(DTQ_AF, (VP_INT)af_sec_ch));
217-#endif
218- debug_level += 2;
198+#ifdef DEBUG_QUEUEDEPTH
199+ debug_queue_level += 2;
200+ if ( debug_queue_level > debug_queue_max)
201+ debug_queue_max = debug_queue_level;
202+#endif // DEBUG_QUEUEDEPTH
219203 }
220204
221205 }
@@ -240,17 +224,28 @@ void rx_if_task(VP_INT exinf)
240224 pack_af_sample( left, right, &af_pri_ch, &af_sec_ch);
241225 // パック済みオーディオサンプルをAFキューに送信する
242226 // キューに空きがなければ、待たずにエラーをもって帰る
243-#if 0
244227 syscall(psnd_dtq(DTQ_AF, (VP_INT)af_pri_ch));
245228 syscall(psnd_dtq(DTQ_AF, (VP_INT)af_sec_ch));
246-#endif
247- debug_level += 2;
229+#ifdef DEBUG_QUEUEDEPTH
230+ debug_queue_level += 2;
231+ if ( debug_queue_level > debug_queue_max)
232+ debug_queue_max = debug_queue_level;
233+#endif // DEBUG_QUEUEDEPTH
248234 }
249235 } // 非ワイドFMの場合
250236
251237
252238 } // RX-IF DMAバッファ内部のデータを処理
253239
240+#ifdef DEBUG_QUEUEDEPTH
241+ debug_counter ++;
242+ static int debug_total = 0;
243+ if ( debug_counter > 30000 )
244+ {
245+ debug_counter = 0;
246+ syslog( LOG_NOTICE, "%8d: que depth max : %d, min : %d ", debug_total++, debug_queue_max, debug_queue_min);
247+ }
248+#endif // DEBUG_QUEUEDEPTH
254249
255250 } while (1);
256251
@@ -304,21 +299,15 @@ void af_task(VP_INT exinf)
304299 // AFキューから送信すべきデータを取り出す
305300 // SVCにポーリングを使用しているため、取り出すべきデータがなければ待ちに入らずに
306301 // エラーコードを返す
307-#if 0
308302 syscall(prcv_dtq( DTQ_AF, (VP_INT)&data));
309-#endif
310303 // DMAバッファに書き込み
311304 filled_buffer[i] = data;
312-
313- debug_level --;
305+#ifdef DEBUG_QUEUEDEPTH
306+ debug_queue_level --;
307+ if ( debug_queue_min > debug_queue_level)
308+ debug_queue_min = debug_queue_level;
309+#endif // DEBUG_QUEUEDEPTH
314310 }
315-#if 0
316- debug_counter ++;
317- if ( debug_counter > DEBUGLOOP ){
318- syslog( LOG_NOTICE, "AF LENGTH %d", debug_level);
319- debug_counter =0;
320- }
321-#endif
322311
323312 }while (1);
324313 }
@@ -439,20 +428,11 @@ void sport0_rx_int_handler(void)
439428 {
440429 // DMA割り込みをクリアする。
441430 *pDMA1_IRQ_STATUS = DMA_DONE;
442-#if 1
443431 // タスクにSPORT0受信DMAのバッファが埋まったと知らせる。
444-// syscall(isig_sem(SEM_SPORT0_RX)); // デバッグとりあえずタスクは殺しておく。
445-#else
446- int dummy;
447-
448- dummy = pSPORT0_RX32;
449-#endif
432+ syscall(isig_sem(SEM_SPORT0_RX)); // デバッグとりあえずタスクは殺しておく。
450433 // ペリフェラルへの書き込みを待つ。
451434 ssync();
452435
453- debug_rx_counter++;
454- debug_counter+=4;
455-
456436 }
457437
458438 /**
@@ -466,17 +446,11 @@ void sport0_tx_int_handler(void)
466446 // DMA割り込みをクリアする。
467447 *pDMA2_IRQ_STATUS = DMA_DONE;
468448
469-#if 1
470449 // タスクにSPORT0送信DMAのバッファが空いたと知らせる。
471-// syscall(isig_sem(SEM_SPORT0_TX));
472-#else
473- *pSPORT0_TX32 = 0;
474-#endif
450+ syscall(isig_sem(SEM_SPORT0_TX));
475451 // ペリフェラルへの書き込みを待つ。
476452 ssync();
477453
478- debug_counter-=2;
479- debug_tx_counter++;
480454 }
481455
482456 /**
--- a/trx305/framework.h
+++ b/trx305/framework.h
@@ -48,6 +48,10 @@
4848 #include <t_services.h>
4949 #include "demodulator.h"
5050
51+
52+#define DEBUG_QUEUEDEPTH
53+
54+
5155 /**
5256 * \brief RX_IF受信SPORTバッファのDMAサイズ
5357 * \details
Show on old repository browser