Start z STM32 VL Discovery – 13 — DMA

Start z STM32 VL Discovery – 13 — DMA
Razem głosów: 4 co stanowi: 75% całości.

 

Gdzie nie gdzie zaznaczałem różnice i podobieństwa do AVR , ale teraz przyszła pora na prawdziwego Potwora zawartego w ARM mianowicie DMA …  Już wcześniej pokazałem jak użyć DMA w przypadku wielokanałowego voltomierza na ADC.  Ale możliwości DMA są tak wielkie, że siłą rzeczy muszę temat rozwinąć.

DMA oznacza Direct Memory Access – umożliwia  bezpośredni dostęp do pamięci.

Ponieważ wszystkie urządzenia peryferyjne (takie jak konwerter AD) jawią się nam jako rejestr,

dzięki czemu możemy korzystać z DMA do transferu danych nie tylko między różnymi miejscami w pamięci

(jak może wskazywać tytuł , ale także do i od urządzeń peryferyjnych!

postaram się pokazać , procedurę inicjacji transferu DMA i jakie są jego możliwości.

W praktyce, transfer pamięć-pamięć nie jest szeroko stosowana, ponieważ przenoszenie większych

bloków danych między różnymi miejscami pamięci jest zwykle nieskuteczne i bezużyteczne.

Częściej używamy transferu DMA między peryferiami i pamięcią – typowy przykład do przenoszenia

danych P -> M  jest projekt oscyloskopu gdzie konwerter AD ma załadować jak najszybciej próbki

i używając DMA  przenieść pamięć danych, wypełnić  treścią zmienne kiedy  będą zawierać

załadowany przebieg.

Transmisja w przeciwnym kierunku, np. M -> P  w pamięci przebiegu generatora, w którym

przechowywane są żądane przebiegi sygnału wyjściowego, też  można wykorzystać DMA by kilkakrotnie

szybko przesyłać dane z pamięci do przetwornika. W obu przypadkach możemy dopasować transmisje

danych tak bez użycia rdzenia mikrokontrolera gdzie Cortex może się po prostu obijać :)

A my i tak będziemy mieli szybki oscyloskop + generator.

Jest to cecha, która jest używana dosyć chętnie przeze mnie,  AVR są na to zbyt powolne.

 

DMA

Opiszmy więc co mamy dostępne:

 

 

  • 7 kanałów DMA
  • każdy kanał jest podłączony do przypisanego mu peryferia np: USART, AD  ….
  • Oprogramowanie może ustalać priorytety w sumie 4  ( możemy ustawić priorytet przekazywanie danych z przetwornika AD do przesyłania danych z USART)
  • Niezależnie od wielkości i źródła danych docelowych (tj. możemy załadować stałe 32-bitowye do konwertera DA gdzie są przechowywane po 8-bitów). Możliwe są:  bajt, half word i word.
  • wsparcia dla buforów kołowych
  • Trzy flagi o postępie transferu  (połowa gotowa, zrobione i błąd podczas transmisji)
  • Dostęp z każdego miejsca w pamięci (tj. Flash, SRAM i urządzeń peryferyjnych podłączonych poprzez APB1, APB2 i AHB).
  • ilość przesyłanych danych od 1 do 65536
Ufff… sporo i całkiem zawile … ale się wszystko wyjaśni …
Zerknijmy na schemat blokowy:
bloklr.png
Zazwyczaj śledzę przy użyciu kanałów DMA większe ilości danych. Oczywiście, trzeba wybrać odpowiedni
kanał dla danego obwodu. Przypisanie kanału zostanie omówione bardziej szczegółowo trochę później,
teraz tylko omówię  kanały 1,3 i 4, które są wykorzystywane do ADC i DAC. USART jest stosunkowo
wolnym układem peryferyjnym więc w zasadzie można go trochę pogonić , ale szkoda używać
na to DMA (kanały 4 i 5). Dlatego zaczniemy jakby używać DMA od tyłu.
To samo odnosi się do priorytetów. Zaczniemy od niskiego i stopniowo będziemy zajmować wyższe,
jeśli zajdzie taka  potrzeba.
INICJACJA Kanałów DMA:
hmm … w zasadzie to wygląda tak :

Odnosi się to do transferu z pamięci do pamięci, ale zobaczcie sobie do wcześniejszego tematu z adc,

gdy używamy urządzenia peryferyjnego. I dlaczego używamy nazwy DMA1_Channel7? 
To dlatego, że wyższe wersje STM32 zawierają nawet dwa kontrolery DMA,
w przeciwieństwie do tego, który posiada seria Value Line.
Tak, ale nie zapomnijmy, że  aby przejść do urządzenia na  DMA potrzebujemy CLK,  jak to się mi
przytrafiło (choć wciąż podkreślają w nocie , że należy o tym pamiętać ).
Stan transferu możemy sobie sprawdzić nawet w trakcie jego trwania:

Powodem jest to, że możemy ustawić przerwanie/Flagę, która informuje nas, że mamy już pół,całe lub błąd.



Konkluzja 

Więc to jest wstęp do wszystkich DMA,
Jak chcesz zobaczyć działanie w praktyce zerknij do ADC z DMA.
Zainteresowanym bardziej szczegółowymi informacjami na temat DMA proponuję zajrzeć
do Reference Manual.
Oczywiście do tematu jeszcze wrócimy.

 

Podziel się na:
  • Print
  • Digg
  • Sphinn
  • del.icio.us
  • Facebook
  • Mixx
  • Google Bookmarks
  • Blogplay