ADC z DMA

Transkrypt

ADC z DMA
MIKROPROCESORY – architektura i programowanie
Pozostały nam pewne, odłożone tematy:
Bezpośredni dostęp do pamięci
Oszczędne gospodarowanie mocą zasilania
Kwestia bezpośredniego dostępu do pamięci w kontrolerach CISC
rodziny 51 pojawia się np. w kontekście używania
przetworników ADC. Koncept DMA powstał we wczesnych stadiach
rozwoju mikroprocesorów.
DMA (direct memory access)- bezpośredni dostęp do pamięci
Wprowadzenie DMA wiąże się z tendencją do odciążania jednostki
centralnej z funkcji, które obniżają sprawność systemu. W tym
przypadku chodzi o przesyłanie danych do i z urządzeń
peryferyjnych.
Ta funkcja nasuwa porównania DMA z systemem przerwań. Uważa się, że
powoduje znacznie mniej problemów przy ustawianiu systemu. Może to wynikać
po prostu z faktu, że jest używany przez znacznie mniej urządzeń (dyski, karty
dźwiękowe, ...) Z kolei, jeśli problemy się pojawiają, to są zwykle trudne do
zdiagnozowania.
MIKROPROCESORY – architektura i programowanie
Pomysł DMA (Motorola ?) powstał w powiązaniu z rozwojem
mikroprocesorów i najczęściej w literaturze dyskutowany
i opisywany jest w kontekście architektur PC, a w szczególności
w połączeniu z opisami magistral ISA (lub pochodnych EISA, VLB
...). Występują liczne typy i kontrolery DMA.
Pomysł bezpośredniego dostępu do pamięci przeniesiono
również do konstrukcji mikrokontrolerów, gdzie stosowany jest
jako opcja przy obsłudze wybranych urządzeń peryferyjnych
(wewnętrznych).
Obsługa przetwornika ADC w mikrokontrolerach AduC812 jest
dobrym przykładem takiego zastosowania.
Chodzi tu nie tylko o odciążenie jednostki centralnej, ale wręcz
o pełne wykorzystanie sprawności przetwornika, które bez DMA
nie mogło by być spełnione.
MIKROPROCESORY – architektura i programowanie
DMA w mikrokontrolerach rodziny 51
na przykładzie ADC w ADuC812.
Przy maksymalnej szybkości konwersja ADC zajmuje 5 µs.
Przy pracy w trybie konwersji ciągłej obsługa przerwań i
transport wyników do pamięci zajmowałoby więcej czasu.
ADuC812 został wyposażony w kontroler DMA sterujący szybkim
przenoszeniem wyników ADC do zewnętrznej pamięci RAM.
Przewidziano możliwość adresowania 16 MByte obszaru i stąd trzy
rejestry SFR, za pomocą których realizuje się (klasyczne – dla
współpracy z urządzeniami) odwzorowanie zewnętrznego RAM
w wewnętrznej pamięci danych. Te trzy rejestry to DMAL, DMAH,
DMAP – wskaźniki zawierające młodszą, średnią i starszą część 24bitowego adresu zewnętrznego RAM.
MIKROPROCESORY – architektura i programowanie
Kanał komunikacji pomiędzy ADC (AduC812) a zewnętrznym RAM
zestawiony jest z linii portów P0 i P2, które w trakcie operacji DMA
są niedostępne dla innych swych funkcji.
Jeśli port P2 używany jest w trybie kontaktów z zewnętrzną
pamięcią danych to służy do wystawiania średniego i starszego
wskaźnika adresowego, zaś port P0 w takim trybie wystawia
najmłodszą część adresu, a następnie służy za magistralę danych.
Pracę ADC w trybie DMA wybieramy przez ustawienie bitu 6 (DMA)
w ADCCON2.
Przed rozpoczęciem używania ADC w tym trybie należy ustawić
i specjalnie skonfigurować obszar pamięci (zewnętrzny RAM), który
przeznaczamy na pomieszczenie wyników konwersji. Większość
operacji przygotowujących ten tryb pracy wykonuje się przy
wyłączonym ADC.
MIKROPROCESORY – architektura i programowanie
Sekwencja operacji jest więc następująca:
Wyłączenie zasilania obwodów ADC (bity MD1 i MD0 w ADCCON1
ustawiamy na 0)
Początkowy, 24-bitowy adres początku obszaru zewnętrznego
RAM, do którego zamierzamy wpisywać dane z konwersji ADC
należy wpisać do rejestrów DMAL, DMAH I DMAP
(w tej kolejności !!!)
Obszar zewntętrznego RAM musi być wstępnie, przed
zainicjowaniem konwersji, skonfigurowany: ADC, poprzez DMA,
będzie wpisywać wyniki kolejnych konwersji do kolejnych par
bajtów, poczynając od ustawionego adresu startowego. Bajt
o niższym adresie a każdej pary musi mieć wstępnie wpisany
numer kanału do czterech starszych bitów. Reszta bitów oraz bajt
o wyższym adresie mają być wyzerowane. Taka pre-konfiguracja
dla ostatniej pary musi być powtórzona, a za nią musi być wpisany
bajt, będący sygnałem zatrzymania konwersji, o treści 0xF0.
MIKROPROCESORY – architektura i programowanie
Do rejestru ADCCON2 wpisuje się bit DMA
Do rejestru ADCCON1 wpisuje się żądane parametry
konfiguracyjne (dotyczące czasu konwersji, włączenia
zasilania dla ADC i ewentualnego zezwolenia na użycie
TIMER2, lub zewnętrznego taktowania konwersji)
Startujemy konwersję. Przez ustawienie bitu pojedynczej lub
ciągłej konwersji, wystartownie TIMER2 lub przez odebranie
sygnału zewnętrznego – stosownie do wybranego trybu
taktowania ADC.
Używając ADC w trybie DMA należy zwrócić szczególną uwagę na
ewentualne konflikty w programie przy dostępie do zewnętrznej
pamięci danych, na relacje czasowe dotyczące pobierania
numeru kanału ADC dla kolejnej konwersji i zapisu wyniku
konwersji do kolejnej komórki pamięci.
MIKROPROCESORY – architektura i programowanie
Oszczędne zasilanie mikrokontrolerów
(na przykładzie ADC w ADuC812)
Większość współcześnie produkowanych mikroprocesorów
i mikrokontrolerów może sterować swoim poborem mocy.
Oszczędzanie mocy ma sens wtedy, gdy pełna wydajność procesora
jest okresowo niepotrzebna lub gdy części systemu mikrokontrolera
są okresowo nieużywane.
W układach cyfrowych dominującej obecnie technologii CMOS
pobór mocy jest, w niezłym przybliżeniu proporcjonalny do częstości
przełączania. Jedną z często stosowanych metod oszczędzania
poboru mocy jest obniżanie częstości taktowania. Jest to możliwe
tym bardziej, że większość mikrokontrolerów może poprawnie
pracować w bardzo szerokim zakresie czestości taktującego zegara.
MIKROPROCESORY – architektura i programowanie
Przykładowo: podstawowe obwody cyfrowe ADuC812 pobierają ok.
1.6 nA * MCLK + 6 mA, przy napięciu zasilania 5V (gdzie MCLK jest
częstością oscylatora).
Obecne architektury mikrokontrolerów zezwalają również na
znaczne zmniejszenie poboru mocy po prostu przez całkowite lub
częściowe wyłączanie zasilania dla poszczególnych elementów
systemu (układów peryferyjnych).
Przykładowo: układ ADC pobiera ok 1.3 mA, każdy z
przetworników DAC ok. 0.25 mA, a układ napięcia referencyjnego
ok. 0.2 mA.
MIKROPROCESORY – architektura i programowanie
Oszczędne zasilanie mikrokontrolerów
(na przykładzie ADC w ADuC812)
Poza dosyć oczywistymi wyłączeniami nieużywanych urządzeń,
w rodzinie mikrokontrolerów 51 istnieje pewna konwencja
dotycząca stanów pracy procesora. Programista ADuC812 ma
możność wprowadzania procesora w stan idle lub w stan powerdown.
W obydwu stanach zachowuje się podtrzymanie pamięci.
MIKROPROCESORY – architektura i programowanie
Stan IDLE oznacza wyłączenie taktowania CPU, ale zachowanie
aktywności portów, systemu przerwań i pracy większości urządzeń
peryferyjnych. Wyprowadzenie z tego stanu do stanu normalnej
pracy odbywa się automatycznie (np. Dla obsługi przerwania).
Stan POWER-DOWN jest stanem głebokiego uśpienia, z którego
procesor wyprowadzony może być sekwencją podobną do reset
czy załączenia zasilania.
Wprowadzenie mikrokontrolera w stan IDLE lub POWER-DOWN
zachodzi w czasie taktu następującego bezpośrednio po
ustawieniu bitu IDL lub bitu PD w rejestrze PCON.