Próbuję właśnie uruchomić urządzenie posiadające sprzętowy dekoder MP3 VS1003. Urządzenie wykonałem w dwóch wariantach: z układem PIC32MX795F512L oraz szesnastobitowym układem PIC24 (zacząłem od tego drugiego, ale w międzyczasie postanowiłem przenieść projekt na układ 32 bitowy). Ma to znaczenie o tyle, że w obydwu wersjach kod zachowuje się tak samo, czyli raczej można wykluczyć problem wynikający ze specyfiki sprzętowej, np. pin zajęty przez jakieś układ peryferyjny.
Płytki zostały zaprojektowane w oparciu schematy z PDF-ów producenta. W obydwu wersjach schemat jest identyczny, a ukłąd ścieżek prawie identyczny. Przyglądałem się wielokrotnie i błędów w połączeniach nie dostrzegam.
Od strony programowej próbowałem posłużyć się tym kodem z STM32 znalezionym na GitHubie, portując go na PIC24/PIC32.
Dźwięk jest odtwarzany, ale najlepsze co uzyskałem to "ćwierkający" efekt. Co ciekawe najlepsze efekty uzyskałem przy małym buforze na fragmenty danych z pliku (zaledwie 16 bitów). Gdy ustawię więcej, "ćwierkanie" staje się szybsze przechodzi w szum albo wręcz nastaje cisza. Efekty nie są też w 100% powtarzalne, nie zawsze odtwarzanie chce się rozpocząć.
Co najdziwniejsze, przy większych rozmiarach bufora program szybciej dociera do końca pliku, jakby linia DREQ nic nie dawała - jej konfigurację po stronie MPU sprawdzałem wiele razy i wszystko wydaje się być ok.
W tej chwili skończyły mi się pomysły i jeśli nic innego nie przyjdzie mi do głowy, przeportuję popularną bibliotekę z Arduino, napisaną w C++. Nie chciałbym jednak wyważać otwartych drzwi, jeśli istnieje jakaś dobra biblioteka w C, którą można łatwo przenosić między rodzinami mikrokontrolerów, albo która ma wersję dla PIC32.