Procesory z rodziny i.MX, w tym procesor i.MX6ULL, do którego odnosi się ten artykuł, wyposażone są w liczne sprzętowe peryferia obsługi dźwięku:
- SAI – interfejs zgodny z I²S/AC97/TDM,
- ASRC – synchronizuje i konwertuje sygnały o różnej częstotliwości próbkowania,
- SPDIF – nadajnik i odbiornik S/PDIF,
- MQS – stereofoniczny przetwornik DAC typu PWM.
W prezentowanym projekcie pokażemy sposób użycia przetwornika C/A MQS, który jest 2-kanałowym, 1-bitowym przetwornikiem typu sigma-delta.
Strumień próbek nadchodzący z magistrali I²S jest rozdzielany na lewy i prawy kanał, następnie sygnały w obu kanałach są nadpróbkowane (zwielokrotniane). Ze względu na małą rozdzielczość generatora PWM dla zwielokrotnionych próbek zastosowano technikę noise shaping. Technika ta polega na modulacji wartości najmniej znaczących bitów każdej próbki tak, aby po uśrednieniu przez zewnętrzny filtr dolnoprzepustowy odzyskać część dynamiki sygnału. Na jedną próbkę sygnału wejściowego przypada zatem wiele okresów PWM, każdy o nieznacznie innym stopniu wypełnienia.
Wewnątrz procesora i.MX6ULL blok MQS jest podłączony do jednego z wyjść SAI. Nie ma więc potrzeby osobnego konfigurowania w sterowniku buforów i kolejek odtwarzania, wystarczy skonfigurować SAI tak, jak miałoby to miejsce w przypadku podłączenia zewnętrznego kodeka audio do magistrali I²S. Rejestry konfiguracyjne MQS pozwalają jedynie ustawić dzielnik zegara mclk i liczbę cykli mclk przypadającą na jeden okres PWM. W domyślnej konfiguracji częstotliwość PWM wynosi 768 kHz. Każdej próbce sygnału wejściowego o częstotliwości próbkowania równej 48 kHz odpowiada szesnaście okresów PWM.