Obsługa kontrolera eDMA w mikrokontrolerach KINETIS
Część sprzętowa zawiera dziesięć źródeł „zawsze włączonego żądania”, które mogą być wykorzystywane w trybie okresowego wyzwalania. Umożliwia to inicjalizację transferu bazując jedynie na PIT (rysunek 5).
Rys. 5. Aktywacja transferu jedynie przez PIT
W danej chwili tylko jeden kanał może aktywnie uczestniczyć w danym transferze. Aby zarządzać wieloma oczekującymi żądaniami transferów, kontroler eDMA umożliwia priorytetyzację kanałów. Można wybrać stały priorytet lub kolejkowanie okrężnie.
W schemacie stałych priorytetów każdy kanał jest przydzielony do poziomu priorytetu. Kiedy wiele żądań oczekuje na realizację, jako pierwszy realizowany jest transfer z kanału o najwyższym priorytecie. Standardowo arbitraż stałego priorytetu jest realizowany w ten sposób, że każdy kanał ma przypisany priorytet równy numerowi tego kanału. Kanały o wyższych priorytetach mogą neutralizować kanały o priorytetach niższych. Neutralizacja następuje, gdy kanał przeprowadza transfer, podczas gdy żądanie transferu pojawia się na kanale o wyższym priorytecie. Kanał o niskim priorytecie zatrzymuje transfer po zakończeniu bieżącej operacji odczytu/zapisu i umożliwia działanie kanału o wyższym priorytecie.
W trybie kolejkowania okrężnego eDMA przechodzi przez kanały od najwyższego do najniższego, sprawdzając, czy nie ma oczekującego żądania. Gdy zostaje osiągnięty kanał z oczekującym żądaniem, dozwolone jest przeprowadzenie transferu. Po zakończeniu transferu, eDMA kontynuuje przechodzenie pomiędzy kanałami w poszukiwaniu następnego oczekującego żądania.
Każdy kanał potrzebuje 32-bitowego deskryptora kontroli transferu (TCS – Transfer Control Descriptor ) do definiowania pożądanej operacji przenoszenia danych. Deskryptory kanałów są przechowywane w lokalnej pamięci eDMA w porządku według kolejności.
Za każdym razem, gdy kanał jest aktywowany i wykonywany, od źródła do miejsca przeznaczenia przenoszone jest n bitów. Jest to określane jako pomocnicza pętla transferu. Główna pętla transferu składa się z szeregu pomocniczych pętli transferu, a ich liczba jest określana przez TCD. Gdy iteracje pętli pomocniczej dobiegną końca, pole aktualnej iteracji (CITER – current iteration ) w TCD jest dekrementowane. Gdy pole aktualnej iteracji zostanie wyczerpane, kanał ukończył główną pętlę transferu. Na rysunku 6 przedstawiono zależność pomiędzy główną pętlą i pętlami pomocniczymi. W tym przykładzie kanał jest skonfigurowany w ten sposób, że pętla główna składa się z trzech iteracji pętli pomocniczej. Pętla pomocnicza jest skonfigurowana jako transfer 4 bajtów.
Rys. 6. Pętla główna i pętle pomocnicze
W celu skonfigurowania eDMA należy przestrzegać przedstawionych poniżej etapów inicjalizacji:
- Zapisanie rejestru kontrolnego eDMA (konieczne jedynie, gdy wymagana jest konfiguracja inna, niż standardowa).
- Konfiguracja rejestrów priorytetów kanałów w DCHPRIn (jeśli wymagane).
- Włączenie przerwań z powodu błędów przy wykorzystaniu rejestrów DMAEEI lub DMASEEI (jeśli wymagane).
- Zapisanie deskryptorów kontroli transferu dla kanałów, które będą wykorzystywane.
- Konfiguracja odpowiedniego modułu peryferyjnego oraz konfiguracja multipleksera eDMA w celu poprowadzenia sygnału aktywującego do właściwego kanału.
Wszystkie atrybuty transferu danego kanału są zdefiniowane w niepowtarzalnym TCD dla kanału. Każdy 32-bitowy TCD jest przechowywany w module kontrolnym eDMA. Jedynie pola DONE, ACTIVE oraz STATUS są inicjalizowane po resecie. Wszystkie pozostałe pola TCD są niezdefiniowane po resecie i muszą zostać zainicjalizowane przez oprogramowanie przed aktywacją kanału. Niezastosowanie się do tego może skutkować niemożliwym do przewidzenia działaniem. Należy odnieść się do specyfikacji odpowiedniego urządzenia, w celu zapoznania się ze szczegółowym opisem TCD.