Abstrakt: Práce s digitálním rozhraním kodeku TLV320AIC23B
V FPGA je pomocí BRAM paměti realizován kruhový buffer o kapacitě 512 32-bitových položek. Kruhový buffer je připojený ke kodeku TLV320AIC23B. V této aplikaci je buffer využit jako drát - tzn. slouží pouze k propojení digitálního výstupu na digitální vstup kodeku.
Obslužná aplikace pracuje s audio vstupem JP6 a výstupem JP7.
Audio kodek TLV320AIC23B se skládá ze dvou částí - analogové (obsahuje zesilovače, mixer) a digitální (obsahuje A/D a D/A sigma delta převodník a dále digitální seriové rozhraní). Analogová část umožňuje vynechat digitální část (bypass) pro účely testování. Aktivace digitálního rozhraní se provádí pomocí příkazu DSP_ON
, bypass poté pomocí BYPASS_DSP
. Pokud neslyšíte zvuk ani po zadání příkazu BYPASS_DSP
, ujistěte se, že jste správně zapojili linkový vstup.
Příkazem DSP_ON
se přes SPI rozhraní v kodeku aktivují A/D a D/A převodníky, nastaví se komunikační protokol na DSP režim, nastaví se vzorkovací frekvence a bitová šířka slova.
Příkaz BYPASS_DSP
deaktivuje digitální převodníky a v kodeku aktivuje analogový bypass, který propojí analogový vstup s analogovým výstupem.
V obou předchozích režimech je aktivní výstup JP7.
Příkazem MUTE
se v sobou režimech ztlumí hlasitost výstupu na minimum. Příkazem RESTORE
se obnoví původní hlasitost výstupu.
Konfigurace kodeku
Konfigurace kodeku se provádí pomocí rozhraní SPI. K zápisu konfiguračního slova se používá funkce codec_SPI_write(reg, content)
, kde reg
je sedmibitová adresa konfiguračního registru a content
je devítibitový obsah registru.
Popis funkce a registrů lze najít v souborech mcu/libs/codec/audio_codec.h a mcu/libs/codec/audio_codec.c.
V ukázkové aplikaci se DSP režim kodeku aktivuje posloupností následujících příkazů:
term_send_str("codec setup: reset\n"); codec_SPI_write(RST_REG, 0); term_send_str("codec setup: analog path control\n"); codec_SPI_write(ALOG_PATH_CTRL, ST_disable | DAC_on | BYP_off | INSEL_line | MICM_on | MICB_off); term_send_str("codec setup: digital interface format\n"); // LRP_on must be set, MSB must be available after LRCIN/CLRCOUT falling edge codec_SPI_write(DTAL_IFACE_FMAT, MS_master | LRSWAP_off | LRP_on | IWL_16bit | FOR_DSP); term_send_str("codec setup: sample rate format\n"); codec_SPI_write(SRATE_CTRL, CLKOUT_full | CLKIN_full | USB_ADC48k_DAC48k | CLKMOD_USB); term_send_str("codec setup: digital interface activation\n"); codec_SPI_write(DTAL_IFACE_ACT, ACT_on); term_send_str("codec setup: line-in left and right\n"); codec_SPI_write(LINE_IN_VOL_L, LRS_off | LIM_off | (LIV_GAIN_Z)); codec_SPI_write(LINE_IN_VOL_R, RLS_off | LIM_off | (LIV_GAIN_Z)); term_send_str("codec setup: headphone left and right\n"); codec_SPI_write(HPHONE_OUT_VOL_L, LZC_on | (LHV_GAIN_Z - 0)); codec_SPI_write(HPHONE_OUT_VOL_R, RZC_on | (RHV_GAIN_Z - 0)); term_send_str("codec setup: digital path control\n"); codec_SPI_write(DTAL_PATH_CTRL, DACM_off | DEEMP_disabled | ADCHP_on); term_send_str("codec setup: power control\n"); codec_SPI_write(PWR_DWN_CTRL, CODEC_ON | CODEC_CLK_on | CODEC_OSC_on | CODEC_OUT_on | CODEC_DAC_on | CODEC_ADC_on | CODEC_MIC_off | CODEC_LINE_on);
Před spuštěním kodeku se ujistěte, že propojka J3, J4 je aktivní a J2 neaktivní.
Do konektoru JP7 zapojte sluchátka a do JP6 zdroj signálu (např. MP3 přehrávač).
Přeložte aplikaci.
Naprogramujte MCU a FPGA a spusťte terminálový program.
Nyní byste měli ve sluchátkách slyšet zvuk přicházející na linkový vstup JP6.