FITkit v2.0 je narozdíl od předchozích verzí osazen audio kodekem TLV320AIC23BPWTLV320AIC23B (FITkit verze v1.x jsou osazeny pouze zesilovačem. O veškerou digitalizaci a analogizaci se zde stará MCU).
Kodek samozřejmě obsahuje zvukový analogový vstup a výstup. Pro práci s kodekem pak slouží další dvě odlišná rohraní. Konfigurační rozhraní (software control), které slouží ke konfiguraci některých parametrů kodeku, jako je třeba ovládání způsobu zpracovádí dat, řízení datových cest, ovládání zesilovačů, nastavování pracovních režimů. Datově vstupně/výstupní rozhraní, které slouží pro přenos digitalizovaných dat a nastavování digitalních filtrů.
Ovladač kodeku se nachází v souborech mcu/libs/codec/audio_codec.h a mcu/libs/codec/audio_codec.c.
Probíhá přes samostatné rohraní, které slouží pouze k zápisu. Není možné přes něj z kodeku vyčíst jeho ahtuální konfiguraci. Může pracovat ve dvou režimech. Na FITkitu lze použít pouze rohraní SPI, protože je signál MODE zapojen do log. 1.
Způsob práce s SPI rozhraním kodeku se liší od SPI použitého ke komunikaci s FPGA z důvodu použití mírně odlišných signálů.
SPI rohraní kodeku a FPGA sdílí signály SPI_DO a SPI_CLK. Jako signál výběru komponenty slouží pro audio kodek signál ACLK. V tom se liší od zapojení FPGA. Signál ACLK je na FITkitu rovněž připojen k FPGA a může sloužit k rozvodu 32kHz hodinového signálu interních hodin MCU. Naštěstí žádná komponenta v FPGA není navržena k použití těchto hodin, takže můžeme signál ACLK směle využít ke konfiguraci kodeku.
Konfigurace kodeku probíhá nastavováním 11 interních registrů. (Podrobnější informace laneznete v datasheetu kodeku.) Každý registr je devítibitový a má svou sedmibitovou adresu. Pro nastavní jednoho registru musíte tedy přes SPI poslat 16 bitů adresy registru a jeho obsah. Přenos se zahajuje nastavením ACLK do 0. V každém hodinovém cyklu SPI_CLK se přenese jeden bit adresy registru a jeho obsahu. Přenos se ukončuje přenesením 16. bitu a nastavením ACLK do 1.
Fukce pro kofiguraci:
void codec_SPI_write(unsigned int addr, unsigned int data)
Funkce nastaví registr na adrese addr
na požadovanou hodnotu data
. Funkce tedy přenese 16 bitů přes SPI.
Signál ACLK slouží jako select signál audio kodeku. Pokud na něj připojíte v MCU interní 32kHz hodiny, nebude možné kodek správně nakonfigurovat.
alias adresy |
adresa |
funkce registru |
|
0x00 |
ovládání hlasitosti levého vstupního kanálu |
|
0x01 |
ovládání hlasitosti pravého vstupního kanálu |
|
0x02 |
ovládání hlasitosti levého výstupního kanálu sluchátek |
|
0x03 |
ovládání hlasitosti pravého výstupního kanálu sluchátek |
|
0x04 |
řízení analogové cesty |
|
0x05 |
řízení digitální cesty |
|
0x06 |
zapínání/vypínání činnosti interních komponent |
|
0x07 |
řízení formátu digitálního datového rozhraní |
|
0x08 |
řízení vzorkovací frekvence |
|
0x09 |
aktivace digitálního rozhraní |
|
0x0F |
reset, uvedení do výchozí konfigurace |
Tabulka : Adresy a popis funkce konfiguračních regisrů.
Kodek je vybaven rozhaním pro přenos digitalizovaného zvuku.
signál |
směr |
funkce |
|
vstup, výstup |
časování |
|
vstup, výstup |
synchronizace zápisu |
|
vstup, výstup |
synchronizace čtení |
|
vstup |
datový vstup |
|
výstup |
datový výstup |
Tabulka : Digitální rozhraní kodeku.
Rozhraní pro přenos digitalizovaného zvuku tvoří pět signálu uvedených v tabulce. V závislosti na nastavení přenosového protokolu mají některé signály odlišnou funkci.
Kodek může pracovat jako master nebo slave:
master - kodek si nastavuje BCLK, LRCIN, LRCOUT, ty se chovají jako výstup.
slave - kodek poslouchá BCLK, LRCIN, LRCOUT, které se chovají jako vstupy. Tyto signály musí nastavovat připojené zařízení. Protokol a časování musí korespondovat s konfigurací kodeku.
Rozhraní pro přenos digitálního zvuku podporuje čtyři komunikační protokoly, jejich výčet naleznete v dokumentaci TLV320AIC23B. Zde je popsán pouze DSP režim, protože ten je použit pro komunikaci s FPGA.
Jedná se o režim kompatibilní s McBSP porty DSP procesorů firmy Texas Instruments. Signály `signal:LRCIN`` a LRCOUT slouží jako synchronizace přenosu datových rámců. Sestupná hrana těchto signálů zahajuje přenos jednoho rámce. Každý rámec se skládá ze dvou slov. Jedno slovo odpovídá jednomu vzorku. Bitová šířka slova může být nastavena na 16b, 20b, 24b nebo 32b. V jednom rámci je nejdříve přenášeno slovo levého kanálu, které je okamžitě následováno vzorkem pravého kanálu. U obou slov je přenos zahájen nejvyšším významovým bitem. Přenos dalšího rámce musí být zahájen signály LRCIN nebo LRCOUT.
Obrázek 2.1: Časování signálů v DSP režimu. Diagram ukazuje časování pro LPR=1, které je použito při komunikaci s FPGA. To znamená, že první bit levého vzorku levého kanálu musí být dostupný na náběžné hraně BCLK až za sestupnou hranou signálů LRCIN a LRCOUT. Šířka slova je nastavena na 16 bitů.
Rychlost nastavování signálů LRCIN a LRCOUT závisí na použité vzorkovací frekvenci.
Ke kodeku je připojen 12MHz oscilátor (MCLK). V závislosti na rychlosti připojených hodin je možné nastavit požadovanou vzorkovací frekvenci. Tabulky uvádějící dostupné vzorkovací frekvence pro specifické frekvence MCLK naleznete v dokumentaci kodeku TLV320AIC23B.
Pro vstupní A/D a výstupní D/A převodník je možné nastavit rozdílné vzorkovací frekvence. Dále je možné pro každý převodník použít frekvenční dělič, kterým se zpomalí hodiny na polovinu, tím je možné dosáhnout další snížení vzorkovací frekvence.
Kodek podporuje dva režimy pro vzorkování:
USB - pro frekvenci MCLK = 12MHz
normální - pro frekvence MCLK = 12,288MHz, 11,2896MHz, 18,432MHz a 16,9344MHz
I když je ke kodeku připojen 12MHz oscilátor, lze kodek nakonfigurovat také do normálního režimu, ve kterém bude fungovat. V dokumentaci TLV320AIC23B lze nalézt kofigurace vzorkovacích frekvencí pro normální režim.
Pokud nakonfigurujete kodek do normálního režimu, nebudou data vzorkována na frekvencích uvedených v datasheetu. Podíl skutečné vzorkovací frekvence a požadované frekvence bude odpovídat podílu 12MHz ku rychlosti hodin uvedených v dokumentaci pro danou konfiguraci.
ADC (kHz) |
DAC (kHz) |
96 |
96 |
88,2 |
88,2 |
48 |
48 |
44,1 |
44,1 |
32 |
32 |
8,021 |
8,021 |
8 |
8 |
48 |
8 |
44,1 |
8,021 |
8 |
48 |
8,021 |
44,1 |
Tabulka : Dostupné kombinace vzorkovacích frekvencí v USB režimu bez dělení MCLK.
V USB režimu kodek nevzorkuje přesně na frekvencích uvedených v tabulce. Skutečné frekvence jsou velmi blízké ale vyšsší (viz dokumentace).
Kód, který nastaví 48kHz vzorkovací frekvenci pro A/D a D/A převodníky. Nakonfiguruje rozhraní do DSP režimu. Nastaví kodek jako master. Aktivuje vstupy, výstupy a kodek.
// reset codec codec_SPI_write(RST_REG, 0); // setup analog path // disable added sidetone, eable DAC, disable nalob bypass, mute microphone, disable microphone boost codec_SPI_write(ALOG_PATH_CTRL, ST_disable | DAC_on | BYP_off | INSEL_line | MICM_on | MICB_off); // setup digital interface // master mode, disable left-right channel swap, left-right phase on, word lengt 16b, DSP digital interface // 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); // setup sample rate // no clock output and input divider, 48kHz sampling rate in USB mode codec_SPI_write(SRATE_CTRL, CLKOUT_full | CLKIN_full | USB_ADC48k_DAC48k | CLKMOD_USB); // setup digital interface // enable digital interface codec_SPI_write(DTAL_IFACE_ACT, ACT_on); // setup line in // left-right swap off, disable mute, 0dB gain 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)); // setup headphone out // zero cross-detect off, 0dB gain 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)); // setup digital path // DAC mute off, disable de-emphasis, enable ADC high-pass filter codec_SPI_write(DTAL_PATH_CTRL, DACM_off | DEEMP_disabled | ADCHP_on); // setup codec power // device power on, clock on, oscillator on, outputs on, DAC on, ADC on, microphone off, line input on 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);
Stereo Audio CODEC, 8-to 96-KHz, With Integrated Headphone Amplifier [online] Dostupný na WWW: http://www.ti.com/lit/gpn/tlv320aic23b