OSDN Git Service

リファクタリング
authortakemasa <suikan@users.sourceforge.jp>
Sat, 15 Sep 2012 23:21:54 +0000 (08:21 +0900)
committertakemasa <suikan@users.sourceforge.jp>
Sat, 15 Sep 2012 23:21:54 +0000 (08:21 +0900)
13 files changed:
uzume_prototype/Makefile
uzume_prototype/Makefile.depend
uzume_prototype/codec_ad1836a.h [deleted file]
uzume_prototype/configure-project
uzume_prototype/kernel_cfg.c
uzume_prototype/kernel_chk.c
uzume_prototype/kernel_id.h
uzume_prototype/kernel_obj.dat
uzume_prototype/uzume.c [moved from uzume_prototype/codec_ad1836a.c with 70% similarity]
uzume_prototype/uzume.cfg [new file with mode: 0644]
uzume_prototype/uzume.h [new file with mode: 0644]
uzume_prototype/uzume_callback.c [moved from uzume_prototype/codec_callback.c with 84% similarity]
uzume_prototype/uzume_prototype.cfg

index 71b3fe8..3422d7f 100644 (file)
@@ -116,10 +116,10 @@ UTASK_CFG = $(UNAME).cfg
 UTASK_DIR = $(SRCDIR)/library
 UTASK_ASMOBJS =
 ifdef USE_CXX
-    UTASK_CXXOBJS = $(UNAME).o codec_ad1836a.o codec_callback.o
+    UTASK_CXXOBJS = $(UNAME).o uzume.o uzume_callback.o
     UTASK_COBJS =
 else
-    UTASK_COBJS = $(UNAME).o codec_ad1836a.o codec_callback.o
+    UTASK_COBJS = $(UNAME).o uzume.o uzume_callback.o
 endif
 UTASK_CFLAGS =
 UTASK_LIBS =
index 665f910..c2c81b5 100644 (file)
@@ -1,5 +1,6 @@
 kernel_cfg.c kernel_id.h kernel_chk.c: kernel/systask/logtask.cfg \
-       kernel/include/kernel.h kernel/config/blackfin/cpu_defs.h \
+       kernel/include/kernel.h uzume.cfg \
+       kernel/config/blackfin/cpu_defs.h \
        kernel/config/blackfin/_common_bf592/chip_defs.h \
        kernel/config/blackfin/_common_bf592/sys_rename.h \
        kernel/include/t_config.h \
@@ -647,25 +648,25 @@ uzume_prototype.o: kernel/include/kernel.h \
        kernel/include/itron.h \
        /opt/uClinux2011R1RC4/bfin-elf/bin/../lib/gcc/bfin-elf/4.3.5/include/stddef.h \
        kernel/include/t_stddef.h 
-codec_ad1836a.o: \
+uzume.o: \
        /opt/uClinux2011R1RC4/bfin-elf/bin/../lib/gcc/bfin-elf/4.3.5/../../../../bfin-elf/include/defBF59x_base.h \
        kernel/include/kernel.h kernel/config/blackfin/cpu_defs.h \
        /opt/uClinux2011R1RC4/bfin-elf/bin/../lib/gcc/bfin-elf/4.3.5/../../../../bfin-elf/include/stdint.h \
        kernel/config/blackfin/_common_bf592/chip_defs.h \
        /opt/uClinux2011R1RC4/bfin-elf/bin/../lib/gcc/bfin-elf/4.3.5/../../../../bfin-elf/include/cdef_LPBlackfin.h \
-       codec_ad1836a.h \
        kernel/config/blackfin/_common_bf592/sys_rename.h \
        kernel/include/t_config.h \
        /opt/uClinux2011R1RC4/bfin-elf/bin/../lib/gcc/bfin-elf/4.3.5/../../../../bfin-elf/include/defBF592-A.h \
        kernel/config/blackfin/tool_config.h kernel/include/serial.h \
+       uzume.c \
        /opt/uClinux2011R1RC4/bfin-elf/bin/../lib/gcc/bfin-elf/4.3.5/../../../../bfin-elf/include/cdefBF59x_base.h \
        /opt/uClinux2011R1RC4/bfin-elf/bin/../lib/gcc/bfin-elf/4.3.5/../../../../bfin-elf/include/cdefBF592-A.h \
        kernel/config/blackfin/cpu_rename.h \
        kernel/config/blackfin/amakusa_bf592/sys_config.h \
        kernel/include/t_stddef.h \
+       kernel/config/blackfin/amakusa_bf592/i2c_subsystem.h \
        /opt/uClinux2011R1RC4/bfin-elf/bin/../lib/gcc/bfin-elf/4.3.5/../../../../bfin-elf/include/def_LPBlackfin.h \
-       kernel/include/t_services.h kernel/include/sil.h \
-       codec_ad1836a.c \
+       kernel/include/t_services.h kernel/include/sil.h uzume.h \
        /opt/uClinux2011R1RC4/bfin-elf/bin/../lib/gcc/bfin-elf/4.3.5/include-fixed/limits.h \
        kernel/config/blackfin/tool_defs.h kernel/include/t_syslog.h \
        kernel/config/blackfin/amakusa_bf592/sys_defs.h \
@@ -674,15 +675,15 @@ codec_ad1836a.o: \
        kernel/config/blackfin/_common_bf592/chip_config.h \
        /opt/uClinux2011R1RC4/bfin-elf/bin/../lib/gcc/bfin-elf/4.3.5/include/stddef.h \
        kernel/include/itron.h 
-codec_callback.o: kernel/include/kernel.h \
+uzume_callback.o: kernel/include/kernel.h \
        kernel/include/t_services.h \
-       kernel/config/blackfin/cpu_defs.h \
+       kernel/config/blackfin/cpu_defs.h uzume.h \
        kernel/config/blackfin/_common_bf592/chip_defs.h \
        /opt/uClinux2011R1RC4/bfin-elf/bin/../lib/gcc/bfin-elf/4.3.5/include-fixed/limits.h \
        kernel/include/t_syslog.h kernel/config/blackfin/tool_defs.h \
-       codec_callback.c codec_ad1836a.h \
        kernel/config/blackfin/amakusa_bf592/sys_defs.h \
-       kernel/include/serial.h kernel_id.h kernel/include/itron.h \
+       kernel/include/serial.h uzume_callback.c kernel_id.h \
+       kernel/include/itron.h \
        /opt/uClinux2011R1RC4/bfin-elf/bin/../lib/gcc/bfin-elf/4.3.5/include/stddef.h \
        kernel/include/t_stddef.h 
 timer.o: \
@@ -812,7 +813,7 @@ kernel_cfg.o: \
        /opt/uClinux2011R1RC4/bfin-elf/bin/../lib/gcc/bfin-elf/4.3.5/../../../../bfin-elf/include/stdint.h \
        kernel/config/blackfin/_common_bf592/chip_defs.h \
        /opt/uClinux2011R1RC4/bfin-elf/bin/../lib/gcc/bfin-elf/4.3.5/../../../../bfin-elf/include/cdef_LPBlackfin.h \
-       codec_ad1836a.h kernel/include/t_config.h \
+       kernel/include/t_config.h \
        kernel/config/blackfin/_common_bf592/sys_rename.h \
        /opt/uClinux2011R1RC4/bfin-elf/bin/../lib/gcc/bfin-elf/4.3.5/../../../../bfin-elf/include/defBF592-A.h \
        kernel/include/../kernel/eventflag.h \
@@ -822,7 +823,7 @@ kernel_cfg.o: \
        kernel/config/blackfin/amakusa_bf592/i2c_subsystem.h \
        /opt/uClinux2011R1RC4/bfin-elf/bin/../lib/gcc/bfin-elf/4.3.5/../../../../bfin-elf/include/def_LPBlackfin.h \
        kernel/include/sil.h kernel/include/t_services.h \
-       kernel/config/blackfin/cpu_unrename.h \
+       kernel/config/blackfin/cpu_unrename.h uzume.h \
        /opt/uClinux2011R1RC4/bfin-elf/bin/../lib/gcc/bfin-elf/4.3.5/include-fixed/limits.h \
        kernel/include/t_syslog.h \
        kernel/config/blackfin/_common_bf592/hw_timer.h \
diff --git a/uzume_prototype/codec_ad1836a.h b/uzume_prototype/codec_ad1836a.h
deleted file mode 100644 (file)
index 0f20eaa..0000000
+++ /dev/null
@@ -1,46 +0,0 @@
-/**
- * @file codec_ad1836a.h
- * @brief CODEC関連定義
- */
-#ifndef AD1836A_COMPACT_H_
-#define AD1836A_COMPACT_H_
-/**
- * @brief 割り込み1回あたりのサンプル数。ユーザーが変えてもよい。
- */
-#define SAMPLE_PER_INTR 64
-/**
- * @brief サンプルあたりのスロット数。I2Sなら2。
- */
-#define SLOT_PER_SAMPLE 2
-
-
-// AD1836Aのスロット番号
-#define ADC_L0 0
-#define ADC_R0 1
-#define DAC_L0  0
-#define DAC_R0  1
-
-
-/**
- * @brief AD1836Aとデータをやり取りするためのバッファ
- * 
- * 割り込み1回の間にAD1836Aが転送するデータを格納するバッファ。サイズは
- * 割り込み1回あたりのサンプル数 @ref SAMPLE_PER_INTRと1サンプル内の
- * スロット数 @ref SLOT_PER_SAMPLEの積である。
- */
-struct CODEC_BUFFER{
-       int data[SAMPLE_PER_INTR][SLOT_PER_SAMPLE];
-} ;
-
-
-extern void task_ad1836a( VP_INT exinf );
-extern void inh_codec_sport(void);
-extern void codec_callback_init( int count );
-extern void codec_callback( 
-                                       int in0_left[], 
-                                       int in0_right[], 
-                                       int out0_left[], 
-                                       int out0_right[], 
-                                       int count);
-
-#endif /*AD1836A_COMPACT_H_*/
index 4cab2c0..b73c940 100755 (executable)
@@ -1 +1 @@
-kernel/configure -C blackfin -S amakusa_bf592 -A uzume_prototype -U "codec_ad1836a.o codec_callback.o"
+kernel/configure -C blackfin -S amakusa_bf592 -A uzume_prototype -U "uzume.o uzume_callback.o"
index d087df5..477624b 100644 (file)
@@ -21,7 +21,6 @@
 #endif
 
        /* User specified include files*/
-#include "codec_ad1836a.h"
 #include "uzume_prototype.h"
 #include "hw_timer.h"
 #include "timer.h"
@@ -29,6 +28,7 @@
 #include "serial.h"
 #include "logtask.h"
 #include "i2c_subsystem.h"
+#include "uzume.h"
 
 
        /* Object initializer [task] */
 
 const ID _kernel_tmax_tskid = (TMIN_TSKID + TNUM_TSKID - 1);
 
-static __STK_UNIT __stack_CODEC_TASK[__TCOUNT_STK_UNIT(512)];
 static __STK_UNIT __stack_MAIN_TASK[__TCOUNT_STK_UNIT(1024)];
 static __STK_UNIT __stack_LOGTASK[__TCOUNT_STK_UNIT(LOGTASK_STACK_SIZE)];
+static __STK_UNIT __stack_CODEC_TASK[__TCOUNT_STK_UNIT(512)];
 
 const TINIB _kernel_tinib_table[TNUM_TSKID] = {
-       {0x00u | 0x02u, (VP_INT)(0), (FP)(task_ad1836a), INT_PRIORITY(3), __TROUND_STK_UNIT(512), __stack_CODEC_TASK, TA_NULL, (FP)(NULL)},
        {0x00u | 0x02u, (VP_INT)(0), (FP)(main_task), INT_PRIORITY(5), __TROUND_STK_UNIT(1024), __stack_MAIN_TASK, TA_NULL, (FP)(NULL)},
-       {0x00u | 0x02u, (VP_INT)(( VP_INT ) 1), (FP)(logtask), INT_PRIORITY(LOGTASK_PRIORITY), __TROUND_STK_UNIT(LOGTASK_STACK_SIZE), __stack_LOGTASK, TA_NULL, (FP)(NULL)}
+       {0x00u | 0x02u, (VP_INT)(( VP_INT ) 1), (FP)(logtask), INT_PRIORITY(LOGTASK_PRIORITY), __TROUND_STK_UNIT(LOGTASK_STACK_SIZE), __stack_LOGTASK, TA_NULL, (FP)(NULL)},
+       {0x00u | 0x02u, (VP_INT)(0), (FP)(task_audiocodec), INT_PRIORITY(3), __TROUND_STK_UNIT(512), __stack_CODEC_TASK, TA_NULL, (FP)(NULL)}
 };
 
 const ID _kernel_torder_table[TNUM_TSKID] = {1,2,3};
@@ -60,9 +60,9 @@ const ID _kernel_tmax_semid = (TMIN_SEMID + TNUM_SEMID - 1);
 
 const SEMINIB _kernel_seminib_table[TNUM_SEMID] = {
        {1, 0, 1},
-       {1, 0, 1},
        {1, 1, 1},
        {1, 1, 1},
+       {1, 0, 1},
        {1, 0, 1}
 };
 
@@ -136,7 +136,7 @@ const INHINIB _kernel_inhinib_table[TNUM_INHNO] = {
        {16,0,(FP)CFG_INT_ENTRY(sio0_tx_handler)},
        {21,0,(FP)CFG_INT_ENTRY(timer_handler)},
        {24,0,(FP)CFG_INT_ENTRY(i2c0_master_handler)},
-       {INHNO_SPORT0_RX,0,(FP)CFG_INT_ENTRY(inh_codec_sport)}
+       {9,0,(FP)CFG_INT_ENTRY(inh_codec_sport)}
 };
 
 
index 32af7ea..d9e62ab 100644 (file)
@@ -39,9 +39,9 @@ void checker_function(void)
 
                /* task */
 
-       OBJECT(task_1,CODEC_TASK);
-       OBJECT(task_3,LOGTASK);
-       OBJECT(task_2,MAIN_TASK);
+       OBJECT(task_3,CODEC_TASK);
+       OBJECT(task_2,LOGTASK);
+       OBJECT(task_1,MAIN_TASK);
        EVAR(ID,_kernel_tmax_tskid);
        EVAR(TINIB,_kernel_tinib_table);
        MEMBER(task_initialization_block,tskatr);
@@ -56,11 +56,11 @@ void checker_function(void)
 
                /* semaphore */
 
-       OBJECT(semaphore_4,SEM_I2C0_BLOCK);
-       OBJECT(semaphore_5,SEM_I2C0_SIGNAL);
-       OBJECT(semaphore_2,SERIAL_RCV_SEM1);
-       OBJECT(semaphore_3,SERIAL_SND_SEM1);
-       OBJECT(semaphore_1,SPORT0_SEM);
+       OBJECT(semaphore_3,SEM_I2C0_BLOCK);
+       OBJECT(semaphore_4,SEM_I2C0_SIGNAL);
+       OBJECT(semaphore_1,SERIAL_RCV_SEM1);
+       OBJECT(semaphore_2,SERIAL_SND_SEM1);
+       OBJECT(semaphore_5,SPORT0_SEM);
        EVAR(ID,_kernel_tmax_semid);
        EVAR(SEMINIB,_kernel_seminib_table);
        MEMBER(semaphore_initialization_block,sematr);
@@ -120,7 +120,7 @@ void checker_function(void)
        OBJECT(interrupt_1,16);
        OBJECT(interrupt_2,21);
        OBJECT(interrupt_3,24);
-       OBJECT(interrupt_4,INHNO_SPORT0_RX);
+       OBJECT(interrupt_4,9);
        EVAR(ID,_kernel_tnum_inhno);
        EVAR(INHINIB,_kernel_inhinib_table);
        MEMBER(interrupt_handler_initialization_block,inhno);
index d78f84d..c9762da 100644 (file)
@@ -3,14 +3,14 @@
 
        /* object identifier deifnition */
 
-#define CODEC_TASK           1
-#define LOGTASK              3
-#define MAIN_TASK            2
-#define SEM_I2C0_BLOCK       4
-#define SEM_I2C0_SIGNAL      5
-#define SERIAL_RCV_SEM1      2
-#define SERIAL_SND_SEM1      3
-#define SPORT0_SEM           1
+#define CODEC_TASK           3
+#define LOGTASK              2
+#define MAIN_TASK            1
+#define SEM_I2C0_BLOCK       3
+#define SEM_I2C0_SIGNAL      4
+#define SERIAL_RCV_SEM1      1
+#define SERIAL_SND_SEM1      2
+#define SPORT0_SEM           5
 
 #endif /* KERNEL_ID_H */
 
index 702735c..149f118 100644 (file)
Binary files a/uzume_prototype/kernel_obj.dat and b/uzume_prototype/kernel_obj.dat differ
similarity index 70%
rename from uzume_prototype/codec_ad1836a.c
rename to uzume_prototype/uzume.c
index 627bba6..6e8abf5 100644 (file)
@@ -1,12 +1,12 @@
 
 /**
- * @file codec_ad1836a.c
- * @brief AD1836Aの初期化と制御
+ * @file uzume.c
+ * @brief CODECの初期化と制御
  */
 #include "t_services.h"
 #include "s_services.h"
 #include "cdefBF592-A.h"
-#include "codec_ad1836a.h"
+#include "uzume.h"
 #include "kernel_id.h"
 #include <i2c_subsystem.h>
 /**
@@ -15,7 +15,7 @@
  * TLV320AIC23に与える初期化データの長さである。長さはレジスタアドレスとデータの組が
  * 何組であるかを示す。
  */
-#define     CODECINITDATALEN        10      /* TLV320AIC23B初期化データ長 */
+#define     CODECINITDATALEN        11      /* TLV320AIC23B初期化データ長 */
 
 #define     I2C_PORT        0
 #define     CODEC_ADDRESS   0x1A
@@ -27,6 +27,7 @@
  */
 static unsigned char tlv320aic23init[CODECINITDATALEN][2] =
 {
+                { 30 | 0x00, 0x00 },     /* RESET. */
                 { 0 | 0x01, 0x17 },     /* L_in vol : LR simul-update, unmute, 0dB */
                 { 2 | 0x01, 0x17 },     /* R_in vol : LR simul-update, unmute, 0dB */
                 { 4 | 0x01, 0xF9 },     /* L_HP vol : LR simul-update, zero-cross, 0dB */
@@ -46,7 +47,7 @@ static unsigned char tlv320aic23init[CODECINITDATALEN][2] =
  * @brief DMAデスクリプタ型
  * 
  * ADSP-BF533のDMA用デスクリプタ型。 avairablebufメンバーはDMAが使わないフィールドで、
- * これは@ref task_ad1836a()が利用できるバッファを特定するためのIDとして使う。
+ * これは@ref task_CODEC()が利用できるバッファを特定するためのIDとして使う。
  */
 struct DMA_DESCRIPTOR{
        struct DMA_DESCRIPTOR * next;   ///< 次のデスクリプタへのポインタ
@@ -57,7 +58,7 @@ struct DMA_DESCRIPTOR{
        /**
         * @brief バッファ特定用フィールド
         * 
-        * 初期化時に定数を設定しておく。@ref task_ad1836a()はDMAが使用中のデスクリプタの
+        * 初期化時に定数を設定しておく。@ref task_CODEC()はDMAが使用中のデスクリプタの
         * このフィールドを読み、有効なバッファにアクセスするためのインデックスとして使う。
         */
        short avairableBuf;     
@@ -68,14 +69,14 @@ struct DMA_DESCRIPTOR{
 /**
  * @brief 送信CODECバッファ
  * 
- * DMAがSPORT経由でAD1836Aにデータを送り出すためのバッファ。配列要素が3つあるのはトリプルバッファであるため。
+ * DMAがSPORT経由でCODECにデータを送り出すためのバッファ。配列要素が3つあるのはトリプルバッファであるため。
  */
 static struct CODEC_BUFFER TxBuffer[3];
 /**
  * @brief 受信CODECバッファ
  * 
  * 
- * DMAがSPORT経由でAD1836Aにデータを受信するためのバッファ。配列要素が3つあるのはトリプルバッファであるため。
+ * DMAがSPORT経由でCODECにデータを受信するためのバッファ。配列要素が3つあるのはトリプルバッファであるため。
  */
 static struct CODEC_BUFFER RxBuffer[3];
 
@@ -85,14 +86,14 @@ static struct CODEC_BUFFER RxBuffer[3];
  * 
  * トリプルバッファなのでデスクリプタを3個使用する。
  */
-static struct DMA_DESCRIPTOR tDesc[3];
+static struct DMA_DESCRIPTOR txDesc[3];
 /**
  * @brief 受信DMAデスクリプタ変数
  * 
  * 
  * トリプルバッファなのでデスクリプタを3個使用する。
  */
-static struct DMA_DESCRIPTOR rDesc[3];
+static struct DMA_DESCRIPTOR rxDesc[3];
 
 /**
  * @brief 左入力データ引渡し変数
@@ -102,7 +103,7 @@ static struct DMA_DESCRIPTOR rDesc[3];
  * 左右チャンネルそれぞれに配列を与える。配列内部にはサンプル順にデータが並ぶ。
  * ステレオは2系統あるので左チャンネルも2系統分のデータがある。
  */
-static int leftIn[SAMPLE_PER_INTR];
+static int leftIn[AUDIOBUFSIZE];
 /**
  * @brief 右入力データ引渡し変数
  * 
@@ -111,7 +112,7 @@ static int leftIn[SAMPLE_PER_INTR];
  * 左右チャンネルそれぞれに配列を与える。配列内部にはサンプル順にデータが並ぶ。
  * ステレオは2系統あるので右チャンネルも2系統分のデータがある。
  */
-static int rightIn[SAMPLE_PER_INTR];
+static int rightIn[AUDIOBUFSIZE];
 /**
  * @brief 左出力データ引渡し変数
  * 
@@ -119,7 +120,7 @@ static int rightIn[SAMPLE_PER_INTR];
  * @ref codec_callback()関数から出力オーディオデータをうけとるための引数。
  * 左右チャンネルそれぞれに配列を与える。配列内部にはサンプル順にデータが並ぶ。
  */
-static int leftOut[SAMPLE_PER_INTR];
+static int leftOut[AUDIOBUFSIZE];
 /**
  * @brief 右出力データ引渡し変数
  * 
@@ -127,7 +128,7 @@ static int leftOut[SAMPLE_PER_INTR];
  * @ref codec_callback()関数から出力オーディオデータをうけとるための引数。
  * 左右チャンネルそれぞれに配列を与える。配列内部にはサンプル順にデータが並ぶ。
  */
-static int rightOut[SAMPLE_PER_INTR];
+static int rightOut[AUDIOBUFSIZE];
 
 /**
  * @brief コーデックの初期化
@@ -135,7 +136,7 @@ static int rightOut[SAMPLE_PER_INTR];
  * TLV32AIC23Bに初期化数値列をI2C経由で送り込む。タスクコンテキストで呼び出さなければならない。
  * 初期化後、TLV32AIC23Bはクロック信号を生成して動作を開始する。
  */
-void init_tlv320aic23b()
+void init_codec()
 {
         int i;
 
@@ -149,19 +150,19 @@ void init_tlv320aic23b()
 
 
 /**
- * @brief AD1836A用SPORTを設定する
+ * @brief CODEC用SPORTを設定する
  * 
  * 
- * SPORT0をAD1836A用に設定する。EZ-KIT BF533の結線はTDM仕様になっているので
+ * SPORT0をCODEC用に設定する。EZ-KIT BF533の結線はTDM仕様になっているので
  * この設定もI2SではなくTDMである。RCRx, TCRxの設定はBF533のマニュアルを参照されたい。
  */
 static void setup_sport0(void)
 {
-    // PORTG設定
+    // ADSP-BF592 PORTG設定
     // DR0PRI, RSCK0, RFS0, TD0PRI, TSCK0, TSF0をMUXで0 ( Primary func )にする
     *pPORTG_MUX &= ~0x00ee;
 
-    // PORTG設定
+    // ADSP-BF592 PORTG設定
     // DR0PRI, RSCK0, RFS0, TD0PRI, TSCK0, TSF0をFERでイネーブルにする
     *pPORTG_FER = 0x00ee;
 
@@ -188,10 +189,10 @@ static void setup_sport0(void)
 }
 
 /**
- * @brief AD1836A用にSPORT0 DMAを設定する
+ * @brief CODEC用にSPORT0 DMAを設定する
  * 
  * 
- * AD1836A用のオーディオDMAを設定する。DMAはデスクリプタのリンクからなる。トリプルバッファを
+ * CODEC用のオーディオDMAを設定する。DMAはデスクリプタのリンクからなる。トリプルバッファを
  * 使うため、デスクリプタは送受それぞれに3つ用意する。
  * 
  * デスクリプタ変数のavairableBufフィールドはDMAハードウェア用ではなく、管理ソフトウェア
@@ -203,52 +204,52 @@ static void setup_sport0(void)
  */
 static void setup_sport0_dma(void)
 {
-       rDesc[0].next = &rDesc[1];
-       rDesc[0].start = RxBuffer[0].data;
-       rDesc[0].config = 0x7700 | WNR | WDSIZE_32 | DI_EN | DMAEN;     // Large List, 7 short word.
-       rDesc[0].x_count = SLOT_PER_SAMPLE * SAMPLE_PER_INTR;
-       rDesc[0].x_modify = 4;
-       rDesc[0].avairableBuf = 1;      // DMA_NEXT_PTRがデスクリプタ[0]なら、バッファ1を使える。
+       rxDesc[0].next = &rxDesc[1];
+       rxDesc[0].start = RxBuffer[0].data;
+       rxDesc[0].config = 0x7700 | WNR | WDSIZE_32 | DI_EN | DMAEN;    // Large List, 7 short word.
+       rxDesc[0].x_count = SLOT_PER_SAMPLE * AUDIOBUFSIZE;
+       rxDesc[0].x_modify = 4;
+       rxDesc[0].avairableBuf = 1;     // DMA_NEXT_PTRがデスクリプタ[0]なら、バッファ1を使える。
        
-       rDesc[1].next = &rDesc[2];
-       rDesc[1].start = RxBuffer[1].data;
-       rDesc[1].config = 0x7700 | WNR | WDSIZE_32 | DI_EN | DMAEN;     // Large List, 7 short word.
-       rDesc[1].x_count = SLOT_PER_SAMPLE * SAMPLE_PER_INTR;
-       rDesc[1].x_modify = 4;
-       rDesc[1].avairableBuf = 2;      // DMA_NEXT_PTRがデスクリプタ[1]なら、バッファ2を使える。
+       rxDesc[1].next = &rxDesc[2];
+       rxDesc[1].start = RxBuffer[1].data;
+       rxDesc[1].config = 0x7700 | WNR | WDSIZE_32 | DI_EN | DMAEN;    // Large List, 7 short word.
+       rxDesc[1].x_count = SLOT_PER_SAMPLE * AUDIOBUFSIZE;
+       rxDesc[1].x_modify = 4;
+       rxDesc[1].avairableBuf = 2;     // DMA_NEXT_PTRがデスクリプタ[1]なら、バッファ2を使える。
        
-       rDesc[2].next = &rDesc[0];
-       rDesc[2].start = RxBuffer[2].data;
-       rDesc[2].config = 0x7700 | WNR | WDSIZE_32 | DI_EN | DMAEN;     // Large List, 7 short word.
-       rDesc[2].x_count = SLOT_PER_SAMPLE * SAMPLE_PER_INTR;
-       rDesc[2].x_modify = 4;
-       rDesc[2].avairableBuf = 0;      // DMA_NEXT_PTRがデスクリプタ[2]なら、バッファ0を使える。
+       rxDesc[2].next = &rxDesc[0];
+       rxDesc[2].start = RxBuffer[2].data;
+       rxDesc[2].config = 0x7700 | WNR | WDSIZE_32 | DI_EN | DMAEN;    // Large List, 7 short word.
+       rxDesc[2].x_count = SLOT_PER_SAMPLE * AUDIOBUFSIZE;
+       rxDesc[2].x_modify = 4;
+       rxDesc[2].avairableBuf = 0;     // DMA_NEXT_PTRがデスクリプタ[2]なら、バッファ0を使える。
        
        // DMA2設定 (SPORT0 TX)
-       tDesc[0].next = &tDesc[1];
-       tDesc[0].start = TxBuffer[0].data;
-       tDesc[0].config = 0x7700 | WDSIZE_32 | DMAEN;   // Large List, 7 short word.
-       tDesc[0].x_count = SLOT_PER_SAMPLE * SAMPLE_PER_INTR;
-       tDesc[0].x_modify = 4;
-       tDesc[0].avairableBuf = 1;      // DMA_NEXT_PTRがデスクリプタ[0]なら、バッファ1を使える。
+       txDesc[0].next = &txDesc[1];
+       txDesc[0].start = TxBuffer[0].data;
+       txDesc[0].config = 0x7700 | WDSIZE_32 | DMAEN;  // Large List, 7 short word.
+       txDesc[0].x_count = SLOT_PER_SAMPLE * AUDIOBUFSIZE;
+       txDesc[0].x_modify = 4;
+       txDesc[0].avairableBuf = 1;     // DMA_NEXT_PTRがデスクリプタ[0]なら、バッファ1を使える。
        
-       tDesc[1].next = &tDesc[2];
-       tDesc[1].start = TxBuffer[1].data;
-       tDesc[1].config = 0x7700 | WDSIZE_32 | DMAEN;   // Large List, 7 short word.
-       tDesc[1].x_count =  SLOT_PER_SAMPLE * SAMPLE_PER_INTR;
-       tDesc[1].x_modify = 4;
-       tDesc[1].avairableBuf = 2;      // DMA_NEXT_PTRがデスクリプタ[1]なら、バッファ2を使える。
-
-       tDesc[2].next = &tDesc[0];
-       tDesc[2].start = TxBuffer[2].data;
-       tDesc[2].config = 0x7700 | WDSIZE_32 | DMAEN;   // Large List, 7 short word.
-       tDesc[2].x_count =  SLOT_PER_SAMPLE * SAMPLE_PER_INTR;
-       tDesc[2].x_modify = 4;
-       tDesc[2].avairableBuf = 0;      // DMA_NEXT_PTRがデスクリプタ[2]なら、バッファ1を使える。
-
-
-       *pDMA2_NEXT_DESC_PTR = &tDesc[0];               // 送信設定
-       *pDMA1_NEXT_DESC_PTR = &rDesc[0];               // 受信DMA設定
+       txDesc[1].next = &txDesc[2];
+       txDesc[1].start = TxBuffer[1].data;
+       txDesc[1].config = 0x7700 | WDSIZE_32 | DMAEN;  // Large List, 7 short word.
+       txDesc[1].x_count =  SLOT_PER_SAMPLE * AUDIOBUFSIZE;
+       txDesc[1].x_modify = 4;
+       txDesc[1].avairableBuf = 2;     // DMA_NEXT_PTRがデスクリプタ[1]なら、バッファ2を使える。
+
+       txDesc[2].next = &txDesc[0];
+       txDesc[2].start = TxBuffer[2].data;
+       txDesc[2].config = 0x7700 | WDSIZE_32 | DMAEN;  // Large List, 7 short word.
+       txDesc[2].x_count =  SLOT_PER_SAMPLE * AUDIOBUFSIZE;
+       txDesc[2].x_modify = 4;
+       txDesc[2].avairableBuf = 0;     // DMA_NEXT_PTRがデスクリプタ[2]なら、バッファ1を使える。
+
+
+       *pDMA2_NEXT_DESC_PTR = &txDesc[0];              // 送信設定
+       *pDMA1_NEXT_DESC_PTR = &rxDesc[0];              // 受信DMA設定
        *pDMA2_CONFIG = 0x7700 | WDSIZE_32;     // 32bit転送、デスクリプタ・リンク、デスクリプタ・サイズ=7word
        *pDMA1_CONFIG = 0x7700 | WNR | WDSIZE_32;
 }
@@ -257,7 +258,7 @@ static void setup_sport0_dma(void)
  * @brief SPORTをイネーブルにしてオーディオ処理をはじめる
  * 
  * 
- * DMA送受信を開始してオーディオ送受信を開始する。
+ * DMA送受信を開始してオーディオ送受信を開始する。この関数はCPUアンロック状態で呼ばなければならない。
  */
 static void start_audio(void)
 {
@@ -265,9 +266,12 @@ static void start_audio(void)
        *pDMA2_CONFIG |= DMAEN;
        *pDMA1_CONFIG |= DMAEN;
        asm("ssync;");
-       // SPORT0 開始 
+
+       // SPORT0 開始 なるべくアトミックに近い状態になるよう、CPUロック状態で開始する。
+       loc_cpu();
        *pSPORT0_TCR1 |= TSPEN;
        *pSPORT0_RCR1 |= RSPEN;
+       unl_cpu();
 }
 
 /**
@@ -280,30 +284,28 @@ static void start_audio(void)
  * 最初にSPIとSPORT0の割り込み禁止を解除する。SPORT0はオーディオ受信DMA割り込み
  * であるため問題はないが、SPIに関しては他のペリフェラルと共用するならば何らかの検討が必要である。
  * 
- * 次にAD1836Aのリセットパルスを生成する。これはEZ-KIT Lite Bf533の設計上必須である。
  * 
  * SPORT DMAは送受信いずれもDMAチェーンを用いている。そのための設計をする際、
  * デスクリプタ変数に有効なバッファのインデックスを書き込んでおくことで後の処理を簡略化
  * できるようにしている。
  * 
  * 割り込み待ちのループ内部ではsport0_semを使ってSPORT RX割り込みハンドらである
- * @ref inh_codec_sport()からの割り込み通知を待つ。通知を受けたらAD1836Aの構造に依存した
+ * @ref inh_codec_sport()からの割り込み通知を待つ。通知を受けたらCODECの構造に依存した
  * バッファを解いてフラットな入力配列をL/R両方に用意する。これは @ref codec_callback()に
  * 渡すためのものである。
  * 
- * @ref codec_callback()から戻ったら、今度は先ほどと逆にフラットな出力配列からAD1836A
+ * @ref codec_callback()から戻ったら、今度は先ほどと逆にフラットな出力配列からCODEC
  * 構造に応じたバッファを組み立てる。
  * 
  */
-void task_ad1836a(VP_INT extinf)
+void task_audiocodec(VP_INT extinf)
 {
        
        ena_int( INTNO_SPORT0_RX );             // SPORT0 DMA割り込みマスクをはずす 
        
-       init_tlv320aic23b();
+       init_codec();
 
-       codec_callback_init( SAMPLE_PER_INTR ); // コールバックの初期化
-       
+       init_audio( AUDIOBUFSIZE );     // コールバックの初期化
 
        setup_sport0();         //                      SPORT0 設定 
        setup_sport0_dma();     //                      SPORT DMA 設定 
@@ -323,22 +325,22 @@ void task_ad1836a(VP_INT extinf)
                bufTx = (( struct DMA_DESCRIPTOR * ) *pDMA2_NEXT_DESC_PTR )->avairableBuf;
                bufRx = (( struct DMA_DESCRIPTOR * ) *pDMA1_NEXT_DESC_PTR )->avairableBuf;
                
-                               // AD1836Aの受信データを引数バッファにコピー
-               for ( sample = 0; sample < SAMPLE_PER_INTR; sample++ ){
+                               // CODECの受信データを引数バッファにコピー
+               for ( sample = 0; sample < AUDIOBUFSIZE; sample++ ){
                        leftIn[sample]  = RxBuffer[bufRx].data[sample][ADC_L0];
                        rightIn[sample] = RxBuffer[bufRx].data[sample][ADC_R0];
                }
                
                                // 信号処理
-               codec_callback
+               process_audio
                                leftIn,
                                rightIn,
                                leftOut,
                                rightOut,
-                               SAMPLE_PER_INTR);
+                               AUDIOBUFSIZE);
                
-                               // 引数データをAD1836A用送信バッファにコピー
-               for ( sample = 0; sample < SAMPLE_PER_INTR; sample++ ){
+                               // 引数データをCODEC用送信バッファにコピー
+               for ( sample = 0; sample < AUDIOBUFSIZE; sample++ ){
                        TxBuffer[bufRx].data[sample][DAC_L0] = leftOut[sample];
                        TxBuffer[bufRx].data[sample][DAC_R0] = rightOut[sample];
                }                               
diff --git a/uzume_prototype/uzume.cfg b/uzume_prototype/uzume.cfg
new file mode 100644 (file)
index 0000000..70dd4db
--- /dev/null
@@ -0,0 +1,15 @@
+INCLUDE("\"uzume.h\"");
+
+/*
+* SPORT0の割り込み通知用セマフォ
+*/
+CRE_SEM( SPORT0_SEM,    { TA_TPRI, 0, 1});
+
+
+/*
+* プライベートな資源
+*/
+
+CRE_TSK( CODEC_TASK, { TA_HLNG|TA_ACT, 0, task_audiocodec,  3, 512, NULL });
+DEF_INH( INHNO_SPORT0_RX, {TA_HLNG, inh_codec_sport} );
+
diff --git a/uzume_prototype/uzume.h b/uzume_prototype/uzume.h
new file mode 100644 (file)
index 0000000..6eb7a2e
--- /dev/null
@@ -0,0 +1,47 @@
+/**
+ * @file uzume.h
+ * @brief CODEC関連定義
+ */
+#ifndef UZUME_H_
+#define UZUME_H_
+/**
+ * @brief 割り込み1回あたりのサンプル数。ユーザーが変えてもよい。
+ */
+#define AUDIOBUFSIZE 64
+/**
+ * @brief サンプルあたりのスロット数。I2Sなら2。
+ */
+#define SLOT_PER_SAMPLE 2
+
+typedef int AUDIOSAMPLE;
+
+// CODECのスロット番号
+#define ADC_L0 0
+#define ADC_R0 1
+#define DAC_L0  0
+#define DAC_R0  1
+
+
+/**
+ * @brief CODECとデータをやり取りするためのバッファ
+ * 
+ * 割り込み1回の間にCODECが転送するデータを格納するバッファ。サイズは
+ * 割り込み1回あたりのサンプル数 @ref SAMPLE_PER_INTRと1サンプル内の
+ * スロット数 @ref SLOT_PER_SAMPLEの積である。
+ */
+struct CODEC_BUFFER{
+       AUDIOSAMPLE data[AUDIOBUFSIZE][SLOT_PER_SAMPLE];
+} ;
+
+
+extern void task_audiocodec( VP_INT exinf );
+extern void inh_codec_sport(void);
+extern void init_audio( int count );
+extern void process_audio( 
+        AUDIOSAMPLE input_left[],
+        AUDIOSAMPLE input_right[],
+        AUDIOSAMPLE output_left[],
+        AUDIOSAMPLE output_right[],
+        AUDIOSAMPLE count);
+
+#endif /*UZUME_H_*/
similarity index 84%
rename from uzume_prototype/codec_callback.c
rename to uzume_prototype/uzume_callback.c
index be63f3b..a8883e0 100644 (file)
@@ -1,11 +1,11 @@
 /**
- * @file codec_callback.c
+ * @file uzume_callback.c
  * @brief オーディオ信号処理を行うユーザー・コールバック
  * 
  */
 #include "t_services.h"
 #include "kernel_id.h"
-#include "codec_ad1836a.h"
+#include "uzume.h"
 /**
  * @brief 信号処理初期化関数
  * @param count @ref codec_callback()に渡される引数配列のサイズ
@@ -14,7 +14,7 @@
  * この関数は@ref codec_callback()に先立って一度だけ呼び出される。フィルタの構築や
  * 変数の初期化に使う。count引数の値は@ref codec_callback()のcount引数と同じである。
  */
-void codec_callback_init( int count )
+void init_audio( int count )
 {
 
 }
@@ -36,11 +36,11 @@ void codec_callback_init( int count )
  * この関数が使う資源で、あらかじめ初期化が必要なものは、@ref codec_callback_init()の
  * 中で初期化しておく。
  */
-void codec_callback
-                       int in0_left[], 
-                       int in0_right[], 
-                       int out0_left[], 
-                       int out0_right[], 
+void process_audio
+                       int input_left[], 
+                       int input_right[], 
+                       int output_left[], 
+                       int output_right[], 
                        int count)
 {
                // ループ変数
@@ -48,8 +48,8 @@ void codec_callback(
        
                // count個のサンプルすべてを処理する
        for ( sample = 0; sample < count; sample++ ){
-               out0_left[sample]  = in0_left[sample];
-               out0_right[sample] = in0_right[sample];
+               output_left[sample]  = input_left[sample];
+               output_right[sample] = input_right[sample];
        }
 }
 
index 874aff9..ca0f819 100644 (file)
@@ -6,25 +6,6 @@
 #define _MACRO_ONLY
 #include "uzume_prototype.h"
 
-INCLUDE("\"codec_ad1836a.h\"");
-
-/*
-* プライベートだがアプリケーションで初期化が必要な資源
-*/
-CRE_SEM( SPORT0_SEM,    { TA_TPRI, 0, 1});
-
-
-/*
-* プライベートな資源
-*/
-
-
-CRE_TSK( CODEC_TASK, { TA_HLNG|TA_ACT, 0, task_ad1836a,  3, 512, NULL });
-DEF_INH( INHNO_SPORT0_RX, {TA_HLNG, inh_codec_sport} );
-
-
-
-
 INCLUDE("\"uzume_prototype.h\"");
 CRE_TSK(MAIN_TASK, { TA_HLNG|TA_ACT, 0, main_task, MAIN_PRIORITY,
             STACK_SIZE, NULL });
@@ -32,4 +13,5 @@ CRE_TSK(MAIN_TASK, { TA_HLNG|TA_ACT, 0, main_task, MAIN_PRIORITY,
 #include "kernel/systask/timer.cfg"
 #include "kernel/systask/serial.cfg"
 #include "kernel/systask/logtask.cfg"
-#include "i2c0_m.cfg"
\ No newline at end of file
+#include "i2c0_m.cfg"
+#include "uzume.cfg"
\ No newline at end of file