Odtwarzacz plików muzycznych

Transkrypt

Odtwarzacz plików muzycznych
Paweł Kallas
Warszawa, 30.06.2016r.
Mikrokontrolery ARM
Odtwarzacz plików muzycznych
Cel projektu
Celem projektu jest stworzenie prostego odtwarzacza plików muzycznych
zapisanych w formacie *.wav przy użyciu mikrokontrolera ARM wraz z
podłączonymi peryferiami. Projekt będzie składał się z następujących podzadań:
•
•
•
•
odczyt danych z pamięci zewnętrznej (karta pamięci)
Przetwarzanie plików *.wav
przesłanie danych do przetwornika cyfrowo-analogowego i wysłanie
ich przez port mini-jack
obsługa przycisków w celu interakcji z użytkownikiem (zmiana utworu,
pauza itp.)
Z punktu widzenia obsługi gotowy projekt powinien zachowywać się jak
klasyczny przenośny odtwarzacz mp3.
Wykorzystany sprzęt
Do realizacji tego projektu wykorzystana zostanie płytka uruchomieniowa
STM32F407 (zawiera ona układ DAC oraz wyjście audio). Dodatkowo konieczne
będzie podłączenie:
•
•
pamięci zewnętrznej (USB)
przycisków do nawigacji – podłączanych do dowolnego z portów
mikrokontrolera
Przetwornik CS43L22
Na płytce uruchomieniowej STM32F407VG zainstalowany jest przetwornik
audio. Komunikacja z nim odbywa się poprzez interfejs I2C (włączanie,
konfiguracja), natomiast dane przesyłane są przez interfejs I2S.
Wykorzystane biblioteki
W celu uproszczenia programowania miktrokontrolera wykorzystane zostały
biblioteki zewnęrzne stworzone przez Tilena Majerle dostępne na stronie
http://stm32f4-discovery.com. Są to następujące biblioteki:






GPIO – do obsługi portów zewnętrznych
DISCO – obsługa przycisku oraz diod
FATFS – system plików
USB_MSC_HOST – stworzenie hosta do obsługi pamięci zewnętrznej
I2C – do komunikacji z przetwornikiem audio
SPI – do przesyłania danych do przetwornika
 EXTI – do obsługi przerwań zewnętrznych (wykorzystywane do obsługi
przycisku)
Opis działania programu
W kodzie programu zostało użyte bardzo dużo komentarzy, które wyjaśniają jego
działanie. Poniżej przedstawiono opis zgrubny działania programu, aby przybliżyć
jego ogólne założenia.
Program jest stworzony w pojedynczym pliku „main.c” z odwołaniami do
bibliotek zewnętrznych zamieszczonych w folderze „TM”. Przed główną pętlą
programu zadeklarowane zostały zmienne, które będą wykorzystywane przez
całość programu. Następnie, w głównej funkcji programu inicjowane są
wszystkie używane komponenty, w tym konfigurowany jest przetwornik
CS43L22. Następnie, w nieskończonej pętli następuje próba połączenia się z
urządzeniem podłączonym do portu USB. Jeżeli taka próba się powiedzie
urządzenie zostaje zmontowane a następnie przeszukiwany jest jego główny
folder. Jeżeli znajdą się tam pliki z rozszerzeniem *.wav, zostają one kolejno
odtwarzane. Odpowiedzialna jest za to funkcja „playWavFile”.
Odtwarzanie pliku WAV
Na początku z pliku sczytywane są pierwsze 44 bajty, które zgodnie ze
standardem pliku wave przechowują informacje o sposobie zakodowania pliku.
Są to między innymi prędkość próbkowania pliku, ilość bajtów w próbce, ilość
kanałów itp. Informacje te są wykorzystane do odpowiedniej konfiguracji
przetwornika audio. Następnie plik jest odczytywany kolejno do 2 buforów, które
są przesyłane do przetwornika przez SPI w przerwaniu. Działa to w ten sposób,
że w momencie gdy bufor wyjściowy jest pusty przesyłane sa kolejne dane z
aktualnego bufora. Gdy dojdziemy do końca bufora zmieniamy bufor na drugi i
informujemy program główny (przez zmienną „bufferEmpty”) o konieczności
wypełnienia pustego buforu. Taki sposób odtwarzania gwarantuje ciągłe
odtwarzanie pliku.
Obsługa przycisku
Dodatkowo, poza pętlą główną, w przerwaniu, obsługiwany jest przycisk. Do jego
poprawnego działania zastosowano programowe przeciwdziałanie drganiu
styków. Polega to na sprytnym wykorzystaniu oczekiwania procesora a
następnie ponownym teście stanu przycisku. Obsługa przycisku polega wyłącznie
na zmianie stanu zmiennej logicznej „play”. W sytuacji gdy zmienna ta
przechowuje wartość 1 odtwarzanie następuje, natomiast w przeciwnym
przypadku (0) odtwarzanie jest wstrzymane. Działa to więc na zasadzie przycisku
„Play/Pause”.
Diody LED
Do dodatkowej komunikacji z użytkownikiem wykorzystane są diody LED
istniejące na płytce. Po poprawnym połączeniu z pamięcią zewnętrzną zapalona
zostaje dioda zielona. W trakcie odtwarzania świeci się dioda niebieska,
natomiast w sytuacji gdy skończą się pliki do odtwarzania zapalona zostaje dioda
pomarańczowa.

Podobne dokumenty