Marcin Gąsiorek
Transkrypt
Marcin Gąsiorek
Marcin Gąsiorek – V rok Koło Naukowe Techniki Cyfrowej dr inż. Wojciech Mysiński – opiekun naukowy Cortex-M3 ST Microelectronics core processor capabilities The paper presents the capabilities of the ARM Cortex-M3 as compared to other popular architectures, 8 - and 32 - bit. In addition, microcontrollers are also presented ST Microelectronics companies and their extended capabilities. This device sets new standards of performance and cost, as well as being capable of low power operation and hard real-time control. Możliwości procesorów z rdzeniem Cortex-M3 firmy ST Microelectronics W artykule przedstawiono możliwości procesorów ARM Cortex-M3 na tle innych popularnych architektur 8- i 32- bitowych. Oprócz tego zaprezentowane są również mikrokontrolery firmy ST Microelectronics oraz ich rozbudowane możliwości. Mikrokontrolery firmy ST Microelectronics wyznaczają nowe standardy uzyskiwania wysokiej wydajności w stosunku do kosztów, pracy przy niskim poborze mocy i wszędzie tam gdzie stawia sie wysokie wymagania dla systemów czasu rzeczywistego. Keywords: Cortex-M3, STM32, interrupt, Thumb-2, ADC, Timery Słowa kluczowe: Cortex-M3, STM32, przerwania, Thumb-2, ADC 1. Wprowadzenie O tym, że mikrokontrolery już na stałe zagościły w naszym życiu nie trzeba chyba nikogo przekonywać. Ich ciągły rozwój pozwala konstruktorom na stawianie sobie większych wyzwań jak również ograniczenie kosztów projektu dzięki bogatemu wyposażeniu w urządzenia peryferyjne i coraz lepiej zaprojektowane jednostki arytmetyczne. Do najliczniejszej i najpopularniejszej grupy mikrokontrolerów należą na dzień dzisiejszy jeszcze 8-bitowe AVR-y. Jednak są one wypierane przez ARM-y z 32-bitowym rdzeniem, a dokładniej ARM7, ARM9 i Cortex-y. Głównym powodem zmiany mikrokontrolera z AVR na ARM jest cena i możliwości: przykładowo popularna Atmega128 kosztuje ok 25zł 1, natomiast STM32F100 (Cortex-M3) to koszt ok. 19zł1 1 Ceny z dnia 05.06.2010r Tab.1 Porównanie przykładowych mikrokontrolerów AVR i ARM Wyposażenie Timery Atmega128 2x8-bit STM32F100 do 12 timerów, 16-bit (konfigurowalne) 2x16-bit 8-bit PWM 16-bit PWM Interfejsy SPI, USART, I2C 2xSPI, 2xI2C, 3xUSART ADC 8-kanałowy, 10-cio bitowy 16-kanałowy, 12-bitowy W powyższej tabeli przedstawiona jest tylko część atutów przykładowego mikrokontrolera z rodziny ARM. 1.1 Dlaczego Cortex? Cortex to następca popularnej architektury ARM7 i pochodnych ARM7. Rdzenie Cortex charakteryzują się szybszym wykonywaniem programów przy takiej samej częstotliwości taktowania jak starsze rdzenie, większą gęstością upakowania poleceń (Thumb-2) oraz mniejszym poborem energii[5]. Cortex-y dzielą się na: Cortex-A series – przeznaczony dla wymagających aplikacji z systemami operacyjnymi (Symbian, Linux i Windows), które wymagają dużych mocy obliczeniowych, obsługi pamięci wirtualnej z MMU lub implementacji interpreterów Javy. Cortex-R series – implementowane w systemach, gdzie krytyczny jest czas reakcji (RTOS, ABS). Cortex-M series – zastosowanie konsumenckie i przemysłowe ze względu na cenę i dużą wydajność. Na rys. 1 przedstawione są wersje rdzeni pod kątem funkcjonalności i możliwości. Można również zauważyć, że każda seria dzieli się na kolejne, z oznaczeniami cyfrowymi. Warto tutaj wspomnieć że od 2010 roku rdzenie A9 zostały wzbogacone o wersje core duo. Rys. 1 Porównanie wersji rdzeni Cortex i ARM Ponieważ artykuł dotyczy rodziny M3, przybliżę nieco całą serię M i następnie skupię sie już tylko i wyłącznie na Cortex-ach M3. W skład serii M wchodzą obecnie cztery rdzenie: M0 – rdzeń o bardzo małych rozmiarach i najbardziej energooszczędny. M1 – zaprojektowany z myślą o implementacji w układach FPGA (rdzeń miękki). M3 – do stosowania w mikrokontrolerach (główny bohater). M4 – 32-bit DSC – kontrola i przetwarzanie sygnałów cyfrowych, sterowanie silnikami, wbudowane systemy audio. Rys. 2 Kompatybilność kodu dla różnych rdzeni Cortex 2. Rdzeń Cortex-M3 Zaskakująco dobry stosunek możliwości do ceny uzyskano w rdzeniach Cortex -M3 dzięki wielu zaawansowanym narzędziom, np. 3-poziomowe kolejkowanie instrukcji ze spekulacyjnym mechanizmem przewidywania rozgałęzień, skrócony czas wykonywania większości operacji do jednego cyklu, nowy zestaw instrukcji Thumb -2 (rys. 5). Pozostałe właściwości rdzenia to[1][4][5]: • Architektura Harvardzka - takie podejście pozwala na dostęp do pamięci programu i danych w tym samym czasie. • Nested vectored interrupt controller NVIC – poprawiony, prostszy w obsłudze sprzętowy kontroler przerwań (poprawiony na życzenie programistów) • Do 240 programowanych przerwań + do 256 poziomów priorytetów (zmiennych) • Małe opóźnienia obsługi przerwań dzięki zastosowanym mechanizmom Tail-Chaining (rys. 3), Late Arrival (rys. 4) oraz przerwaniu operacji POP (rys. 5). • Wywłaszczenie przerwań o niższym priorytecie • Obsługa przerwań zagnieżdżonych • Mnożenie w jednym cyklu i sprzętowe dzielenie • Do 4GB przestrzeni adresowej • Możliwość operowania na pojedynczych bitach dzięki technice bit -banding 2 • Dostęp do pamięci programu w jednym cyklu • Zintegrowane tryby obniżonego poboru energii. 2 W technice tej nie ma konieczności odczytu całego słowa, przepisywania go do rejestru, zamieniania interesującego nas bitu i ponownego zapisania do pamięci jak to przebiegało w innych mikrokontrolerach. Jeśli potrzebujemy zamienid (lub odczytad) jeden bit, zamieniamy go bezpośrednio w pamięci, dlatego technika ta została również nazwana "pamięcią o dostępie atomowym". Rys. 3 a) klasyczna obsługa późniejszego przerwania, b) Tail-chaining (kolejkowanie przerwań), po obsłudze wcześniejszego przerwania omijana jest operacja ściągana ze stosu i ponownego wkładania na stos bieżącego procesu. Rys. 4 a) standardowa obsługa przerwania, b) Late arrival (obsługa późniejszego przerwania), kiedy podczas obsługi przerwania o niższym priorytecie nadejdzie przerwanie o wyższym priorytecie, eliminowana jest jedna zbędna operacja odkładania ponownie na stos bieżącego procesu, a co za tym idzie omijana jest jedna zbędna operacja zdejmowania ze stosu. Rys. 5 a) standardowa obsługa przerwania, b) jeśli podczas zdejmowania ze stosu zostanie zgłoszone przerwanie, operacja ta zostanie przerwana w ciagu 1-12 cykli, następnie po wykonaniu mechanizmu Tail-chaining zostanie obsłużone przerwanie, bez zbędnej procedury zdejmowania ze stosu. Najważniejszą zaletą rdzeni Cortex-M3 jest zdolność do obsługi instrukcji na danych 16- i 32-bitowych bez konieczności stosowania jakichkolwiek zabiegów. Takie rozwiązanie pozwoliło na zmniejszenie objętości kodu wynikowego oraz zwiększenie wypadkowej prędkości wykonywania programu, a wszystko to zostało osiągnięte dzięki nowemu zestawowi instrukcji Thumb-2. Rys. 6 Porównanie wydajności i objętości kodu wynikowego dla zestawu instru kcji ARM (32-bit), Thumb (16-bit) oraz Thumb-2 (16-, 32-bit) Tab. 2 Porównanie mikrokontrolerów ARM z Cortex-ami Cortex-M3 ARM7 Harvard von Neumann Lista instrukcji Thumb/Thumb-2 ARM/Thumb Prędkość wykonywania poleceń 1.25 DMIPS/MHz Max. 0.95 DMIPS/MHz (ARM) NMI+1-240 FIQ/IRQ Opóźnienie obsługi przerwania 12 cykli 24-42 cykli Minimalny odstęp pomiędzy obsługą kolejnych przerwań 6 cykli 24 cykle wbudowany brak do 8 obszarów (MPU) brak Pipeline 3-stopniowy + przewidywanie rozgałęzień 3-stopniowy Pobór mocy 0.19 mW/MHz 0.28 mW/MHz Architektura Przerwania Tryb oszczędzania energii Ochrona pamięci 3. STM32Fx Producent mikrokontrolerów STM32, przygotował odpowiednie podrodziny, z których możemy dobrać odpowiedni mikrokontroler dla naszych potrzeb[3]: Value Line (STM32F100) – najtańsze w rodzinie STM32 mikrokontrolery oferowane w czterech wersjach obudów, wyposażone w pamięci programu Flash o pojemności do 128 kB, SRAM do 8 kB taktowane sygnałem zegarowym o maksymalnej częstotliwości 24 MHz, wyposażone we wszystkie standardowe interfejsy komunikacyjne oraz bogaty zestaw bloków peryferyjnych, w tym przetwornik A/C, dwukanałowy C/A oraz - jako pierwszy mikrokontroler z rdzeniem Cortex-M3 - interfejs HDMI-CEC, Access Line (STM32F101) – popularne mikrokontrolery oferowane w szerokiej gamie obudów, wyposażone w pamięci programu Flash o pojemności do 512 kB, taktowane sygnałem zegarowym o maksymalnej częstotliwości 36 MHz, wyposażone we wszystkie standardowe interfejsy komunikacyjne oraz bogaty zestaw bloków peryferyjnych, w tym przetwornik A/C, USB Access Line (STM32F102) – mikrokontrolery oferowane w obudowach o liczbie wyprowadzeń 48 lub 64, o funkcjonalności i wyposażeniu zbliżonym do podrodziny STM32F101 (maksymalna częstotliwość taktowania wynosi 48 MHz), pamięci Flash o pojemności do 128 kB, dodatkowo wyposażone w interfejs USB device (Full Speed), Performance Line (STM32F103) – mikrokontrolery o bogatszym wyposażeniu niż wersje F101 i F102, przystosowane do taktowania sygnałem o częstotliwości do 72 MHz, mają wbudowane m.in. interfejsy SDIO, CAN, I2S oraz timery PWM (mogą sterować pracą silników elektrycznych), dostępne we wszystkich wariantach obudów z pamięciami programu o pojemności do 512 kB, Connectivity Line (STM32F105/107) – najnowsza grupa mikrokontrolerów w rodzinie STM32, wyposażona w interfejs USB-OTG oraz (wyłącznie wersje F107) ethernetowy MAC z możliwością obsługi standardu IEEE1588 (patrz ramka). Mikrokontrolery z tej grupy wyposażono w CPU identyczne z zastosowanym w F103 (taktowanie do 72 MHz), dwa interfejsy I2S, dwa interfejsy CAN oraz wiele standardowych interfejsów komunikacyjnych. Rys. 7 Uproszczone schematy blokowe podrodzin mikrokontrolerów. Rys. 8 Uproszczona architektura mikrokontrolera z rodziny STM32 Na rys. 8 została przedstawiona podstawowa architektura wewnętrzna mikrokontrolera z rodziny STM32[6]. Można tutaj zauważyć 2 szyny danych APB1 i APB2 gdzie szyna APB1 jest taktowana z częstotliwością 36MHz a APB2 z maksymalną częstotliwością rdzenia (na ogół 72MHz). Dodatkowo w STM32 zastosowano szynę danych BusMatrix, do której podłączony jest rdzeń, kontroler DMA, pamięci SRMA i FLASH, oraz wymienione wyżej szyny danych. Kontroler DMA umożliwia transmisję danych z urządzeń peryferyjnych do pamięci, z pamięci do urządzeń peryferyjnych i z pamięci do pamięci bez zbędnego obciążenia rdzenia. Ponieważ rdzeń i kontroler DMA korzystają z tej samej szyny, przewidzianych jest kilka algorytmów arbitrażu, w celu uniknięcia zablokowania szyny, jednym z nich jest algorytm karuzelowy. W zasadzie na wymienionych powyżej częściach składowych architektury mikrokontrolera STM32 można by zakwalifikować ten model do przeciętnych. Jednakże producent, zadbał o dodatkowe atuty, które wyróżniają go z Cortex-ów. 3.1 Porty wejścia/wyjścia Porty wejść/wyjść mogą pracować w jednym z sześciu trybów[4]: -jako linie wejściowe: •bez podciągania „pływające” •z podciąganiem do zasilania (pull-up) •z podciąganiem do masy (pull-down) •analogowe -jako linie wyjściowe •z otwartym drenem •symetryczne (push-pull) Dodatkowo producent dał możliwość konfiguracji częstotliwości wyjść (50MHz, 10MHz i 2MHz co odpowiada czasom narastania 5ns, 25ns, 125ns). Czynnik ten ma ogromne znaczenie podczas uwzględniania w projekcie kompatybilności elektromagnetycznej. Gdyby tego jeszcze było mało, istnieje możliwość całkowitego lub częściowego remapingu 3 niektórych wyprowadzeń, głównie wyjść timerów. Warto tutaj również wspomnieć, że każde wyprowadzenie mikrokontrolera STM32 może działać jako źródło przerwania (EXTI). 3.2 Przetwornik A/C Mikrokontrolery z rodziny STM32 wyposażono w co najmniej jeden 12-bitowy, 16kanałowy przetwornik A/C z czasem przetwarzania równym 1us (1MS/s). Przetworniki mogą pracować w wielu trybach, konfigurowanych przez programistę, m.in. można dokonać jednoczesnego pomiaru napięcia na wielu wejściach, lub skonfigurować dwa kanały przetwornika, aby generował przerwanie przy za niskim lub zbyt wysokim poziomie napięcia. 3.3 Wektor przerwań Do 43 maskowanych przerwań programowych o16 poziomach priorytetów Krótkie i przewidywalne czasy obsługi przerwań Wsparcie dla tail-chaining, late arrival Automatyczne zachowywanie i odtwarzanie kontekstu, przy wchodzeniu i wychodzeniu z procedury obsługi przerwania Dużo łatwiejsza programowa implementacja wektora funkcji obsługi przerwań. 3 Dokładne informacje jak przemapowad wyprowadzenia oraz, na które piny można znaleźd w nocie aplikacyjnej dla danej rodziny mikrokontrolerów STM32. 3.4 Układy czasowo-licznikowe W mikrokontrolerach STM32 konstruktor ma do dyspozycji do 10 (16-bitowych) timerów (wliczając w to SysTick4) mogących pracować w różnych konfiguracjach. Odpowiednio skonfigurowane timery i ich kanały umożliwiają m.in. pomiar parametrów sygnału PWM, generowanie sygnałów PWM, odbieranie sygnałów z czujników halla i enkoderów, pomiary czasu trwania impulsów, formowanie pojedynczych impulsów. Dodatkowo niektóre wyjścia timerów posiadają swoje komplementarne odpowiedniki, dzięki czemu można generować sygnały PWM z czasem martwym lub do 8 sygnałów PWM (co jest dość istotne przy sterowaniu np. silnikiem bezszczotkowym prądu stałego[1]). Oprócz wymienionych wyżej, mikrokontrolery z rodziny STM32 posiadają wiele systemów zabezpieczeń takich jak: System nadzoru sygnału zegarowego5 Rejestry chronione przed utratą danych Watchdog niezależny (IWDG) Watchdog okienkowy (WWDG) Mechanizmy te w znacznym stopniu wspomagają proces projektowania urządzeń, gdzie o pomyłce nie ma mowy, jak również ważna jest stabilność systemu czasu rzeczywistego. 4. Bibliografia [1] [2] [3] [4] [5] [6] 4 K. Paprocki, Mikrokontrolery STM32 w praktyce, Legionowo 2009 http://www.st.com/mcu/inchtml-pages-stm32.html (10.06.2010) http://www.st.com/mcu/familiesdocs-110.html (10.06.2010) User Manual to STM32 http://www.hitex.com (10.06.2010) The Insider's Guide To The STM32 ARM Based Microcontroller, Hitex 2008 Timer systemowy - dzięki niemu, można generowad przerwania w ściśle określonych odstępach czasu. Jest to przydatna funkcja np. przy przełączaniu wątków w RTOS. 5 Kiedy uszkodzeniu ulegnie rezonator zewnętrzny, jego zadanie przejmie rezonator wewnętrzny.