Co do generowania dźwięku, przećwiczyłem oba warianty.
Pierwszy to uaktualnianie danych dla DAC w przerwaniach. Próbka 2048 bajtów jest odczytywana co jakiś tam krok. Tym większy, im większą częstotliwość odtwarzania potrzebuję. W sumie procek nie robi nic innego prócz odczytu klawiszy i przekazania (raz na naciśniecie klawisza) danych do SCT2024, które sterują wyświetlaczami 7-SEG LED z numerem przebiegu). Mimo to, procek pracuje "w pocie czoła". Metoda ta ma wady: znaczne obciążenie procka, albo niemiły dla ucha aliasing.
Druga metoda z użyciem EVSYS timera i DMA. Tutaj próbka jest znacznie mniejsza, bo 256 bajtów, a częstotliwością steruje się poprzez zmianę w rejestrze PER, bo transfer DMA jest po przepełnieniu timera. W tej metodzie mam z głowy aliasing, ale wadą jest znaczne pogorszenie rozdzielczości częstotliwości przy wysokich częstotliwościach (przy małych wartościach PER).
Aktualnie czytam książkę Kolegi tmf, "Układy peryferyjne". Na razie skupiam się na 2 rozdziałach: "DAC" i "niech zagra muzyka", w których opisany jest transfer STEREO do 2 kanałów jednocześnie. Z tego, co udało mi się ustalić, być może wyjdzie inna metoda, będąca niejako kombinacją dwóch opisanych powyżej:
Są sobie dwa bufory po 512 bajtów (dlatego tyle, bo karty SD mają taką paczkę, ale to na przyszłość), każdy dla jednego kanału. Każdy z buforów jest transmitowany za pomocą DMA do dwóch rejestrów DAC. Jak wyzwalać konwersje? Tego jeszcze nie wiem.
Jest także bufor główny o wielkości 2048 bajtów zawierający przebieg okresowy. Teraz jakiś timer odczytywałby ten bufor główny co jakiś krok, który byłby częstotliwością odtwarzania i przekazywał do tych mniejszych buforów "podłączonych" przez DMA do DACa.
To jest tylko teoretyczne rozważanie, nie sprawdzałem go jeszcze. Może być błędne zupełnie, a może któryś z Kolegów podpowie, jak to zrobić najłatwiej? Chodzi mi o generowanie poszczególnych nut, czyli częstotliwości z tabeli na początku tego wątku.
PS. Jeśli temat tego postu odbiega zanadto od tematu całego wątku, proszę o przeniesienie.