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.

Dystrybutorem zestawu X3-DIL64 jest KAMAMI.pl.

 

Dominik Leon Bieczyński

http://leon-instruments.blogspot.com

 

O autorze