Direct Memory Acces

Czyli binarny parobek na usługach procesora

DMA (Direct Memory Access) to mechanizm bezpośredniego dostępu do pamięci. Pozwala on na umieszczanie danych z rejestrów peryferiów mikrokontrolera w pamięci bez użycia mocy obliczeniowej procesora. Zwykle stanowi osobny układ wbudowany w strukturę mikrokontrolera (jak np ADC).

Jego konfiguracja nie jest skomplikowana, polega na określeniu miejsca źródłowego (skąd dane mają być kopiowane), docelowego (gdzie dane mają być przesyłane), kierunku transmisji i ilośći danych do skopiowania.

Mikroprocesor widzi pamięć jako jedną przestrzeń adresową, z punktu widzenia programisty nie ma więc różnicy czy dane są kopiowane między pamięcią, a peryferiami, czy między pamięcią, a pamięcią.

Poniżej zaprezentowane zostaną dwa przykłady - najprostsza konfiguracja z użyciem standardowej biblioteki (STL) oraz konfiguracja z użyciem operacji na rejestrach procesora.


Przykładowa najprostsza z możliwych konfiguracja DMA dla STM32 z użyciem biblioteki STL. Pozwala na sprawdzenie działanie mechanizmu DMA - po uruchomieniu tej funkcji wartość data_dst będzie równa data_src bez koniczności jawnego nakazu przypisania wartości.

Oczywiście taki przykład jest największym możliwym uproszczeniem, a DMA pokazuje na co je stać w przypadku naprawde procesoro-chłonnych zadań (kopiowanie obrazów do bufora ramki z pamięci flash, odbieranie ramek ethernetowych)


Konfiguracja z użyciem rejestrów procesora będzie dotyczyła odczytu wartośći z dwóch kanałów ADC. W tym w wypadku nie obędzie się bez zaglądania do Reference Manual używanego mikrokontrolera.

Nie jest to trudne, rejestry są dobrze opisane w dokumentacji, a tak napisana konfiguracja jest wykonywana przez procesor szybciej - nie tworzymy w pamięci zbędnej struktury i nie wywyołujemy kolejnej funkcji konfiguracyjnej.

TAGS: dma, uart, ethernet