Mikrokontrolery AVR XMEGA w praktyce, część 23. Podstawy DMA
Mikrokontrolery XMEGA mają tak dużo peryferiów, że rdzeń procesora potrzebuje dwóch dodatkowych układów wspomagających, by móc je efektywnie wykorzystać. Pierwszy z nich to system zdarzeń, który poznaliśmy w części 14. Służy on do przekazywania prostych sygnałów logicznych pomiędzy peryferiami. Drugi to układ DMA (Direct Memory Access), który służy do przesyłania danych bez udziału rdzenia procesora.
Pamięć w XMEGA
Ponieważ DMA nie występowało w starych układach ATtiny oraz ATmega i zapewne jest nowością dla wielu czytelników – omówię dokładnie jak wygląda przesyłanie danych w pamięci mikrokontrolera i w jaki sposób DMA poprawia efektywność tego procesu.
Układy AVR mają dwie oddzielne przestrzenie adresowe – osobną dla pamięci programu (tzw. ROM, choć tak naprawdę jest to pamięć Flash wielokrotnego zapisu) oraz oddzielną dla pamięci RAM i układów peryferyjnych. Mamy zatem dwie niezależne magistrale adresowe i dwie magistrale danych (zobacz rysunek 1). Do pamięci programu podłączony jest jedynie dekoder instrukcji procesora i z tej pamięci procesor praktycznie non-stop pobiera instrukcje. Inaczej wygląda sytuacja z pamięcią danych – tutaj transfery zachodzą tylko wtedy, kiedy procesor chce uzyskać dostęp do jakiejś zmiennej lub rejestrów układów peryferyjnych. Są więc sytuacje, kiedy magistrala adresowa i magistrala danych pamięci RAM jest niewykorzystywana.
Rys. 1. Organizacja pamięci w mikrokontrolerach XMEGA
Jak wygląda operacja skopiowania komórki pamięci z jednego adresu pod inny adres? Każda komórka pamięci w procesorze ma swój unikalny adres, który w przypadku XMEGA może być 24-bitowy. Procesor na magistralę adresową wystawia adres komórki, która ma być odczytana i wysyła żądanie odczytu. Pamięć lub układ peryferyjny udostępnia żądany bajt informacji na magistrali danych. Procesor kopiuje ten bajt do jednego ze swoich rejestrów roboczych R0-R31. Następnie procesor na magistralę adresową wypisuje adres komórki, do której mają trafić dane. Na magistralę danych kopiuje wartość rejestru R0-R31, który przechowuje interesujące nas informacje, po czym wysyła sygnał zapisu. Adresy komórek źródłowych i docelowych również są przechowywane w rejestrach roboczych R0-R31.
Skomplikowane? Niekoniecznie. Jest to dość prosta operacja, ale ma dwie wady. Trwa dość długo i całkowicie pochłania rdzeń procesora, przez co nie może on wykonywać żadnych innych operacji. Kopiowanie dużych bloków pamięci może na długi czas zablokować procesor. W takiej sytuacji pomocny jest układ DMA.
DMA jest układem bardzo prostym w działaniu. Jego zadaniem jest skopiowanie określonej liczby bajtów z jednego miejsca w drugie miejsce. W tym czasie procesor może wykonywać inne operacje całkowicie bez utraty funkcjonalności. Co się stanie w sytuacji, kiedy procesor będzie chciał uzyskać dostęp do pamięci, w czasie kiedy DMA transferuje dane? Wówczas praca DMA zostanie automatycznie zawieszona, a kiedy procesor zakończy swoje działanie, DMA będzie kontynuować pracę.
Do czego DMA może się przydać?
Oprócz zastosowań trywialnych, jak kopiowanie danych z jednej tablicy do drugiej, DMA bardzo dobrze współpracuje z innymi układami peryferyjnymi. DMA potrafi przesyłać dane z tablicy do układu interfejsowego USART czy SPI, dzięki czemu całkowicie sprzętowo i bardzo szybko można przesłać duży blok danych pomiędzy urządzeniami. W podobny sposób istnieje możliwość odbierania danych z układów transmisyjnych. DMA równie dobrze współpracuje z przetwornikiem analogowo-cyfrowym i cyfrowo-analogowym. Na przykład, pomiar przetwornikiem może być inicjowany timerem w zadanych odstępach czasowych, a po zakończeniu pomiaru, DMA może kopiować wyniki pomiaru z przetwornika do tablicy, którą procesor przetwarza w czasie rzeczywistym. Przypomina to układ akwizycji z oscyloskopu? A jakże! Równie łatwo można zrobić generator DDS. Zastosowanie układu DMA ogranicza jedynie wyobraźnia programisty, a żeby tę wyobraźnię rozbudzić, warto przeczytać książki Tomasza Francuza, w których opisuje najróżniejsze zastosowania DMA w praktycznych przykładach.
|
|
Dominik Leon Bieczyński
http://leon-instruments.blogspot.com



Jedna taśma – tysiące paczek: RS i tesa łączą logistykę i ESG
Zmiana technologii przyłączeniowej bez modyfikacji PCB? Konstrukcja TWIN w terminalach SPTH od Phoenix Contact
Nowość w ofercie firmy SCHURTER: superkondensatory – ultrakompaktowe i jednocześnie niezwykle wydajne 

![https://www.youtube.com/watch?v=XkeyLmtLfxo O konkursie organizowanym przez firmę TRUMPF Huettinger i polskie uczelnie techniczne opowiada Alicja Peresada i prof. Jacek Rąbkowski oraz kilkoro nagrodzonych dyplomantów: mgr inż. Jakub Dobosz, inż. Maja Zielińska, dr inż. Jakub Kołodziej, dr inż Weronika Hryniewska-Guzik i dr inż. Grzegorz Bartyzel. Zapraszamy do obejrzenia filmu! [materiał redakcyjny]](https://mikrokontroler.pl/wp-content/uploads/2026/07/TRUMPF-czolowka.png)



