UTASK_DIR = $(SRCDIR)/library
UTASK_ASMOBJS =
ifdef USE_CXX
- UTASK_CXXOBJS = $(UNAME).o uzume.o uzume_callback.o
+ UTASK_CXXOBJS = $(UNAME).o uzume.o uzume_callback.o ad7999.o
UTASK_COBJS =
else
- UTASK_COBJS = $(UNAME).o uzume.o uzume_callback.o
+ UTASK_COBJS = $(UNAME).o uzume.o uzume_callback.o ad7999.o
endif
UTASK_CFLAGS =
UTASK_LIBS =
kernel_cfg.c kernel_id.h kernel_chk.c: kernel/systask/logtask.cfg \
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/chip_defs.h ad7999.cfg \
kernel/config/blackfin/_common_bf592/sys_rename.h \
kernel/include/t_config.h \
kernel/config/blackfin/tool_config.h uzume_prototype.cfg \
kernel/config/blackfin/cpu_config.h kernel/include/itron.h \
kernel/config/blackfin/_common_bf592/chip_config.h
cpu_crtbegin.o: kernel/config/blackfin/cpu_crtbegin.c
-uzume_prototype.o: kernel/include/kernel.h \
- kernel/include/t_services.h \
+uzume_prototype.o: \
+ kernel/config/blackfin/amakusa_bf592/i2c_subsystem.h \
+ kernel/include/kernel.h kernel/include/t_services.h \
kernel/config/blackfin/cpu_defs.h uzume_prototype.c \
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/itron.h \
/opt/uClinux2011R1RC4/bfin-elf/bin/../lib/gcc/bfin-elf/4.3.5/include/stddef.h \
kernel/include/t_stddef.h
+ad7999.o: kernel/include/kernel.h ad7999.h \
+ kernel/config/blackfin/cpu_defs.h \
+ kernel/config/blackfin/_common_bf592/chip_defs.h \
+ kernel/include/serial.h kernel/include/t_stddef.h \
+ kernel/config/blackfin/amakusa_bf592/i2c_subsystem.h \
+ ad7999.c kernel/include/t_services.h \
+ /opt/uClinux2011R1RC4/bfin-elf/bin/../lib/gcc/bfin-elf/4.3.5/include-fixed/limits.h \
+ uzume.h kernel/config/blackfin/tool_defs.h \
+ kernel/include/t_syslog.h \
+ kernel/config/blackfin/amakusa_bf592/sys_defs.h \
+ /opt/uClinux2011R1RC4/bfin-elf/bin/../lib/gcc/bfin-elf/4.3.5/include/stddef.h \
+ kernel/include/itron.h
timer.o: \
/opt/uClinux2011R1RC4/bfin-elf/bin/../lib/gcc/bfin-elf/4.3.5/../../../../bfin-elf/include/defBF59x_base.h \
kernel/include/kernel.h kernel/include/timer.h \
kernel/include/kernel_cfg.h kernel/include/s_services.h \
kernel/config/blackfin/_common_bf592/chip_config.h \
kernel/include/../kernel/task.h kernel/include/kernel.h \
- kernel/include/timer.h \
+ ad7999.h kernel/include/timer.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 \
-kernel/configure -C blackfin -S amakusa_bf592 -A uzume_prototype -U "uzume.o uzume_callback.o"
+kernel/configure -C blackfin -S amakusa_bf592 -A uzume_prototype -U "uzume.o uzume_callback.o ad7999.o"
#include "logtask.h"
#include "i2c_subsystem.h"
#include "uzume.h"
+#include "ad7999.h"
/* Object initializer [task] */
-#define TNUM_TSKID 3
+#define TNUM_TSKID 4
const ID _kernel_tmax_tskid = (TMIN_TSKID + TNUM_TSKID - 1);
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)];
+static __STK_UNIT __stack_AD7999_TASK[__TCOUNT_STK_UNIT(1024)];
const TINIB _kernel_tinib_table[TNUM_TSKID] = {
{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)(0), (FP)(task_audiocodec), INT_PRIORITY(3), __TROUND_STK_UNIT(512), __stack_CODEC_TASK, 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)},
+ {0x00u | 0x02u, (VP_INT)(40), (FP)(ad7999_task), INT_PRIORITY(AD7999_PRIORITY), __TROUND_STK_UNIT(1024), __stack_AD7999_TASK, TA_NULL, (FP)(NULL)}
};
-const ID _kernel_torder_table[TNUM_TSKID] = {1,2,3};
+const ID _kernel_torder_table[TNUM_TSKID] = {1,2,3,4};
TCB _kernel_tcb_table[TNUM_TSKID];
/* Object initializer [semaphore] */
-#define TNUM_SEMID 5
+#define TNUM_SEMID 6
const ID _kernel_tmax_semid = (TMIN_SEMID + TNUM_SEMID - 1);
{1, 1, 1},
{1, 1, 1},
{1, 0, 1},
- {1, 0, 1}
+ {1, 0, 1},
+ {1, 1, 1}
};
SEMCB _kernel_semcb_table[TNUM_SEMID];
/* task */
+ OBJECT(task_4,AD7999_TASK);
OBJECT(task_3,CODEC_TASK);
OBJECT(task_2,LOGTASK);
OBJECT(task_1,MAIN_TASK);
/* semaphore */
+ OBJECT(semaphore_6,AD7999_SEM);
OBJECT(semaphore_3,SEM_I2C0_BLOCK);
OBJECT(semaphore_4,SEM_I2C0_SIGNAL);
OBJECT(semaphore_1,SERIAL_RCV_SEM1);
/* object identifier deifnition */
+#define AD7999_SEM 6
+#define AD7999_TASK 4
#define CODEC_TASK 3
#define LOGTASK 2
#define MAIN_TASK 1
// CODECの受信データを引数バッファにコピー
for ( sample = 0; sample < UZUME_BLOCKSIZE; sample++ ){
- leftIn[sample] = RxBuffer[bufRx].data[sample][ADC_L0];
- rightIn[sample] = RxBuffer[bufRx].data[sample][ADC_R0];
+ leftIn[sample] = RxBuffer[bufRx].data[sample][ADC_L0] >> UZUME_INT_BITS;
+ rightIn[sample] = RxBuffer[bufRx].data[sample][ADC_R0] >> UZUME_INT_BITS;
}
// 信号処理
// 引数データをCODEC用送信バッファにコピー
for ( sample = 0; sample < UZUME_BLOCKSIZE; sample++ ){
- TxBuffer[bufRx].data[sample][DAC_L0] = leftOut[sample];
- TxBuffer[bufRx].data[sample][DAC_R0] = rightOut[sample];
+ TxBuffer[bufRx].data[sample][DAC_L0] = leftOut[sample] << UZUME_INT_BITS;
+ TxBuffer[bufRx].data[sample][DAC_R0] = rightOut[sample] << UZUME_INT_BITS;
}
}
*/
#ifndef UZUME_H_
#define UZUME_H_
+
+/**
+ * @brief 汎用固定小数点型。
+ * @datails
+ * Blackfinでは32bitで使用する。整数部のビット長は0である。
+ */
+typedef int FX32;
+
/**
* @brief 割り込み1回あたりのサンプル数。ユーザーが変えてもよい。
*/
+#define UZUME_INT_BITS 0
+/**
+ * @brief スケーリング・ファクター
+ * @details
+ * AUDIOSAMPLE型の整数部のビット数を指定する。0の場合フォーマットは1.32、
+ * 3ならば4.28、7ならば8.24となる。
+ */
#define UZUME_BLOCKSIZE 64
/**
* @brief サンプルあたりのスロット数。I2Sなら2。
*/
#define SLOT_PER_SAMPLE 2
+/**
+ * @brief オーディオコーデック用データ型。
+ * @datails
+ * Blackfinでは32bitで使用する。整数部のビット長は、 UZUME_INT_BITS で宣言する。
+ */
typedef int AUDIOSAMPLE;
// CODECのスロット番号
#include "t_services.h"
#include "kernel_id.h"
#include "uzume.h"
+#include "ad7999.h"
/**
* @brief 信号処理初期化関数
* @param count @ref codec_callback()に渡される引数配列のサイズ
{
// ループ変数
int sample;
+ FX32 volume;
+
+ // ch 0 のボリューム値(32bit)
+ volume = get_volume(0)>>15;
// count個のサンプルすべてを処理する
for ( sample = 0; sample < UZUME_BLOCKSIZE; sample++ ){
- output_left[sample] = input_left[sample];
- output_right[sample] = input_right[sample];
+ output_left[sample] = (input_left[sample]>>16) * volume;
+ output_right[sample] = (input_right[sample]>>16) * volume;
}
}
#include "uzume_prototype.h"
#include <i2c_subsystem.h>
-unsigned char adcbuf[8];
#define ADCADDR 0x28
while(1)
{
- i2c_master_read(0, ADCADDR, adcbuf, 2);
- syslog( LOG_NOTICE, "ADC is : %02x%02x ", adcbuf[0], adcbuf[1]);
tslp_tsk(200);
}
}
/*
- * @(#) $Id: sample1.cfg,v 1.1 2009/01/31 05:27:37 suikan Exp $
*/
#include "kernel/systask/serial.cfg"
#include "kernel/systask/logtask.cfg"
#include "i2c0_m.cfg"
-#include "uzume.cfg"
\ No newline at end of file
+#include "uzume.cfg"
+#include "ad7999.cfg"