3 * @author: Shinichiro Nakamura
4 * @brief SGTL5000初期化プログラム
6 * SGTL5000の初期化を行う。I2Cを使って初期化を行う。
9 #include "i2s_subsystem.h"
10 #include "i2c_subsystem.h"
13 * \brief コーデック初期化データ列の長さ
15 * SGTL5000に与える初期化データの長さである。長さはレジスタアドレスとデータの組が
18 #define CODECINITDATALEN 18 /* SGTL5000初期化データ長 */
20 #ifndef UZUME_SGTL5000_I2C_PORT
22 * @brief CODECのI2Cポート。
23 * SGTL5000が接続されているI2Cペリフェラルのポート番号。デフォルトは0である。他のポートを使いたい時には
24 * sys_config.hで宣言すると良い。なお、I2Cコントローラ・ペリフェラルがひとつしかない場合には0を指定する。
26 # define UZUME_SGTL5000_I2C_PORT 0
29 #ifndef UZUME_SGTL5000_I2C_ADRS
31 * @brief SGTL5000のI2Cデバイスアドレス(7bit右づめ)
33 # define UZUME_SGTL5000_I2C_ADRS 0x0A
36 /* SGTL5000 TWI初期化データ列 */
37 static const unsigned char sgtl5000_initdata[CODECINITDATALEN][4] =
39 {0x00, 0x02, 0x00, 0x73}, // CHIP_DIG Power 0000-0000 0111-0011
40 {0x00, 0x30, 0x77, 0xFF}, // CHIP_ANA_POWER 0111-0111 1111-1111
41 {0x00, 0x32, 0x83, 0x12}, // CHIP_PLL_CTRL 1000-0011 0001-0010(16/786)
42 {0x00, 0x04, 0x00, 0x0B}, // CHIP_CLK_CTRL 0000-0000 0000-1011
43 {0x00, 0x06, 0x00, 0x80}, // CHIP_I2S_CTRL 0000-0000 1000-0000
44 {0x00, 0x0A, 0x00, 0x10}, // CHIP_SSS_CTRL 0000-0000 0001-0000
45 {0x00, 0x0E, 0x02, 0x00}, // CHIP_ADCDAC_CTRL 0000-0010 0000-0000
46 {0x00, 0x10, 0x3C, 0x3C}, // CHIP_DAC_VOL
47 {0x00, 0x14, 0x01, 0x5F}, // CHIP_PAD_STRENGTH 0000-0001 0101-1111
48 {0x00, 0x20, 0x01, 0x00}, // CHIP_ANA_ADC_CTRL 0000-0001 0000-0000
49 {0x00, 0x22, 0x18, 0x18}, // CHIP_ANA_HP_CTRL
50 {0x00, 0x24, 0x00, 0x04}, // CHIP_ANA_CTRL 0000-0000 0000-0100
51 {0x00, 0x26, 0x00, 0x00}, // CHIP_LINREG_CTRL 0000-0000 0000-0000
52 {0x00, 0x28, 0x00, 0x00}, // CHIP_REF_CTRL 0000-0000 0000-0000
53 {0x00, 0x2A, 0x00, 0x00}, // CHIP_MIC_CTRL 0000-0000 0000-0000
54 {0x00, 0x2C, 0x00, 0x00}, // CHIP_LINE_OUT_CTRL 0000-0000 0000-0000
55 {0x00, 0x2E, 0x06, 0x06}, // CHIP_LINE_OUT_VOL 0000-0110 0000-0110
56 {0x00, 0x34, 0x00, 0x00}, // CHIP_CLK_TOP_CTRL 0000-1000 0000-0000
62 * TLV32AIC23Bに初期化数値列をI2C経由で送り込む。タスクコンテキストで呼び出さなければならない。
63 * 初期化後、TLV32AIC23Bはクロック信号を生成して動作を開始する。
69 /* SGTL5000に初期化データを送信する */
70 for ( i=0; i< CODECINITDATALEN; i++){
71 i2c_master_write(UZUME_SGTL5000_I2C_PORT, UZUME_SGTL5000_I2C_ADRS, sgtl5000_initdata[i], 4);