DMA i bramkowane PIT w mikrokontrolerach Kinetis

W przykładzie interfejs DMA jest wykorzystywany do zasilania przetwornika analogowo-cyfrowego za pomocą słowa rozkazu kanału oraz przeniesienia wyniku konwersji A/C do wewnętrznej pamięci SRAM. Słowo rozkazu kanału A/C przechowuje wszystkie informacje, których przetwornik A/C potrzebuje do przeprowadzenia przetwarzania, więc dzięki wykorzystywaniu DMA do zapewniania słów rozkazu kanału, moduł może zostać poinformowany o przeprowadzeniu przetwarzania bez interwencji jednostki centralnej. Po przeniesieniu przez eDMA wyniku do wewnętrznej pamięci SRAM, aplikacja może przeprowadzić dalszą analizę danych.
Wejście ADC0 musi być próbkowane co milisekundę. Żeby to osiągnąć, 32-bitowe słowo rozkazu kanału A/C musi być dostarczane do ADC0_SC1A (0x4003B000) w każdej milisekundzie, jeśli tylko przetwornik jest zdolny do przyjęcia rozkazu. Słowo rozkazu kanału jest zlokalizowane w wewnętrznej pamięci SRAM. Poniższy przykład wymaga jedynie pojedynczego słowa rozkazu kanału przekazanego do modułu A/C. Jest ono przechowywane w zmiennej nazwanej command. Po tym, gdy moduł A/C zakończy przetwarzanie, rezultat jest przenoszony z rejestru wynikowego ADC0_RA modułu A/C, zlokalizowanego w adresie 0x4003B010, do adresu 0x1FFF9000 w wewnętrznej pamięci SRAM. Funkcjonowanie tego przykładu przedstawiono na rysunku 1.


 


Rys. 1. Przedstawienie przykładu 2.

Rys. 1. Przedstawienie przykładu 2.


 


Do zaimplementowania tego przykładu potrzebne są dwa kanały eDMA: jeden do transferu słowa rozkazu kanału, a drugi do transferu wyniku. Żądanie transferu rozkazu wymaga 1 ms wyzwalania PIT oraz zawsze aktywnego wyzwalacza. Multiplekser DMA musi być skonfigurowany do bramkowanej PIT aktywacji kanału. Do przeprowadzenia tego transferu skonfigurowany jest kanał 1.
Kanał 0 jest wykorzystywany do transferu wyniku A/C do pamięci RAM. Transfer ten jest aktywowany, gdy flaga gotowego wyniku A/C jest ustawiona. Standardowy arbitraż kanałów przydziela kanałowi 1 priorytet wyższy od kanału 0. Konfiguracja ta gwarantuje, że moduł A/C otrzymuje słowo rozkazy kanału w każdej mikrosekundzie. Jednakże może to spowodować nadpisanie wyników w rejestrze wynikowym zanim zostaną one przeniesione przez eDMA, jako że kanał odczytujący wynik nie ma przydzielonego priorytetu. Ustawienia te mogą zostać zmienione, w celu zagwarantowania, że każdy rezultat jest przechwytywany, aby przydzielić wyższy priorytet kanałowi odczytującemu wyniki. Konfiguracja multipleksera DMA dla kanałów 0 oraz 1 jest następująca:


 

 


Kanał pierwszy jest skonfigurowany do używania okresowego wyzwalacza – PIT1. Moduł PIT1 musi być uruchomiony oraz skonfigurowany na pożądany interwał czasowy.
Przed rozpoczęciem transferu DMA (uruchomieniem PIT1), dane rozkazów modułu A/C muszą być przygotowane zgodnie z definicją rejestru rozkazów A/C. Każdy kanał w tym przykładzie przeprowadza transfer danych do lub z adresu statycznego, odpowiednio 32-bitowego rozkazu lub rejestru wynikowego. Z tego powodu konieczne jest odzyskiwanie wskaźników adresów w TCD, gdy zakończona jest główna lub pomocnicza pętla transferu. Przykład ten nie ma do przetransferowania tabeli danych, co sprawia, że tylko jedna pojedyncza pętla pomocnicza jest potrzebna do zakończenia głównej pętli transferu. Adresy źródła i miejsca przeznaczenia są zatem odzyskiwane po ukończeniu głównej pętli. Konfiguracja TCD dla kanałów 0 i 1 wygląda następująco:


 

O autorze