12半音階によるトーン生成
Rev. | 05c64c80a10b324b375562a6070f403efa4d0028 |
---|---|
サイズ | 3,057 バイト |
日時 | 2013-06-03 23:41:51 |
作者 | suikan |
ログメッセージ | 最初のコミット |
/**
* @file sgtl5000.c
* @author: Shinichiro Nakamura
* @brief SGTL5000初期化プログラム
* @details
* SGTL5000の初期化を行う。I2Cを使って初期化を行う。
*/
#include "i2s_subsystem.h"
#include "i2c_subsystem.h"
/**
* @brief コーデック初期化データ列の長さ
* @details
* SGTL5000に与える初期化データの長さである。長さはレジスタアドレスとデータの組が
* 何組であるかを示す。
*/
#define CODECINITDATALEN 18 /* SGTL5000初期化データ長 */
#ifndef UZUME_SGTL5000_I2C_PORT
/**
* @brief CODECのI2Cポート。
* SGTL5000が接続されているI2Cペリフェラルのポート番号。デフォルトは0である。他のポートを使いたい時には
* sys_config.hで宣言すると良い。なお、I2Cコントローラ・ペリフェラルがひとつしかない場合には0を指定する。
*/
# define UZUME_SGTL5000_I2C_PORT 0
#endif
#ifndef UZUME_SGTL5000_I2C_ADRS
/**
* @brief SGTL5000のI2Cデバイスアドレス(7bit右づめ)
*/
# define UZUME_SGTL5000_I2C_ADRS 0x0A
#endif
/* SGTL5000 TWI初期化データ列 */
static const unsigned char sgtl5000_initdata[CODECINITDATALEN][4] =
{
{0x00, 0x02, 0x00, 0x73}, // CHIP_DIG Power 0000-0000 0111-0011
{0x00, 0x30, 0x77, 0xFF}, // CHIP_ANA_POWER 0111-0111 1111-1111
{0x00, 0x32, 0x83, 0x12}, // CHIP_PLL_CTRL 1000-0011 0001-0010(16/786)
{0x00, 0x04, 0x00, 0x0B}, // CHIP_CLK_CTRL 0000-0000 0000-1011
{0x00, 0x06, 0x00, 0x80}, // CHIP_I2S_CTRL 0000-0000 1000-0000
{0x00, 0x0A, 0x00, 0x10}, // CHIP_SSS_CTRL 0000-0000 0001-0000
{0x00, 0x0E, 0x02, 0x00}, // CHIP_ADCDAC_CTRL 0000-0010 0000-0000
{0x00, 0x10, 0x3C, 0x3C}, // CHIP_DAC_VOL
{0x00, 0x14, 0x01, 0x5F}, // CHIP_PAD_STRENGTH 0000-0001 0101-1111
{0x00, 0x20, 0x01, 0x00}, // CHIP_ANA_ADC_CTRL 0000-0001 0000-0000
{0x00, 0x22, 0x18, 0x18}, // CHIP_ANA_HP_CTRL
{0x00, 0x24, 0x00, 0x04}, // CHIP_ANA_CTRL 0000-0000 0000-0100
{0x00, 0x26, 0x00, 0x00}, // CHIP_LINREG_CTRL 0000-0000 0000-0000
{0x00, 0x28, 0x00, 0x00}, // CHIP_REF_CTRL 0000-0000 0000-0000
{0x00, 0x2A, 0x00, 0x00}, // CHIP_MIC_CTRL 0000-0000 0000-0000
{0x00, 0x2C, 0x00, 0x00}, // CHIP_LINE_OUT_CTRL 0000-0000 0000-0000
{0x00, 0x2E, 0x06, 0x06}, // CHIP_LINE_OUT_VOL 0000-0110 0000-0110
{0x00, 0x34, 0x00, 0x00}, // CHIP_CLK_TOP_CTRL 0000-1000 0000-0000
};
/**
* @brief コーデックの初期化
* @details
* TLV32AIC23Bに初期化数値列をI2C経由で送り込む。タスクコンテキストで呼び出さなければならない。
* 初期化後、TLV32AIC23Bはクロック信号を生成して動作を開始する。
*/
void init_codec()
{
int i;
/* SGTL5000に初期化データを送信する */
for ( i=0; i< CODECINITDATALEN; i++){
i2c_master_write(UZUME_SGTL5000_I2C_PORT, UZUME_SGTL5000_I2C_ADRS, sgtl5000_initdata[i], 4);
}
}