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.