Abstrakt: Práce s digitálním zvukem kodeku TLV320AIC23B v MCU
V FPGA je z BRAM vytvořen kruhový buffer o kapacitě 512 32-bitových položek. Každá položka se skládá z dvou 16-bitových vzorků, pro levý a pravý kanál jeden. Použitá BRAM má dva porty, které zpřístupňují její obsah. Port A slouží k zápisu/čtení dat do/z kodeku, k portu B je připojen řadič SPI připojený k MCU. Tento SPI řadič slouží čistě k přenosu zvukových dat mezi FPGA a MCU a tvoří tak samostatný přenosový kanál s přenosovou rychlostí 14MHz v každém směru. MCU pak realizuje čtení zvukových dat a jejich zpětný zápis. Celá aplikace se chová jako propojení digitálního výstupu s digitálním vstupem kodeku přes MCU.
Obslužná aplikace digitalizuje vstupní signál z linkového vstupu JP6 a přehrává jej na výstupu JP7.
Na obrázku 1.1 je znázorněno blokové schéma zapojení komponent. Bločky codec reader
a codec writer
jsou realizovány jako samostatné generické komponenty aic23b_dsp_read
a aic23b_dsp_write
, které realizují převod signálu pro přenos do kodeku. Dohromady s BRAM
tvoří komponentu aic23b_dsp_ringbuffer
jejíž VHDL popis naleznete v souboru fpga/ctrls/audio/aic23b_dsp_ringbuffer.vhd. Blok fast SPI
realizuje řadič druhého SPI pro přenos zvuku. VHDL popis komponenty naleznete v souboru fpga/spi_controller.vhd. Bloky BRAM CU
jsou realizovány jako procesy. Slouží k výpočtu adresy pro zápis a čtení z BRAM. Jsou řízeny komponentami, které realizují komunikační rozhraní pro kodek a MCU.
Kodek TLV320AIC23B se dá rozdělit na dvě části - analogovou (zesilovače a mixer) a digitální (A/D a D/A sigma delta převodník, digitální sériové rozhraní). Analogová část umožňuje obejít (bypass) digitální část. Aktivace digitálního rozhraní se v aplikaci provede příkazem DSP_ON
, příkazem BYPASS_DSP
deaktivujete digitální rozhraní a zapne se bypass. Pokud neslyšíte zvuk ani po zadání příkazu BYPASS_DSP
ujistěte se, zda máte správně připojen linkový vstup.
Příkazem DSP_ON
se skrze konfigurační SPI rozhraní kodeku nastaví konfigurační registry, čímž se aktivují A/D D/A převodníky, nastaví komunikační protokol na DSP režim, vzorkovací frekvence a bitová šířka vzorků.
Příkaz BYPASS_DSP
deaktivuje digitální převodníky a aktivuje analogový bypass, kterým se propojí analogový vstup s analogovým výstupem.
V obou předchozích případech, je aktivní výstup JP7.
Příkazem MUTE
se v obou režimech sníží hlasitost výstupu na minimum. Příkaz RESTORE
obnoví původní hlasitost výstupu.
MCU je v této aplikaci připojeno k FPGA pomocí dvou SPI rozhraní. První SPI je klasické, určené pro komunikaci s SPI řadičem. Je definováno v knihovně libfitkit. Druhé SPI rozhraní slouží pouze k přenosu digitálního zvuku. Funkce pro MCU naleznete v souborech mcu/fspi.h a mcu/fspi.c. Toto rozhraní pracuje na 14MHz.
Před spuštěním kodeku se ujistěte, že propojky J3, J4 jsou aktivní a J2 je 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 (vzorkovaný na 8kHz) přicházející do linkového vstupu JP6.