Nowy gracz wśród 32-bitowców
| TechnikaRdzeń AVR32 został zaprezentowany przez firmę Atmel w 2006 r., dotychczas był on implementowany tylko w procesorach aplikacyjnych rodziny AP7000. Procesory te dedykowane są do najbardziej wymagających 32-bitowych aplikacji. W aplikacjach typu embedded nie jest wymagana aż tak duża wydajność, natomiast bardziej liczy się integracja układów peryferyjnych. Jako odpowiedź na wymóg rynku, w tym roku przedstawiono nowe układy – rodzinę UC3, wyposażoną w rdzeń AVR32 i pamięć Flash.
Niezbędnymi elementami architektury mikrokontrolerów w układach embedded są wbudowana pamięć Flash, szybkie interfejsy komunikacyjne i duży stopień integracji peryferii. Coraz większa ekspansja sieci w urządzeniach przemysłowych oraz konsumenckich wymusza stosowanie mikrokontrolerów z ethernetem oraz innymi szerokopasmowymi interfejsami, gdyż według Forrester Research w ciągu kolejnych lat 95% urządzeń podłączonych do sieci nie będzie komputerami PC.
Do niedawna wspomniany obszar rynku zarezerwowany był głównie dla mikrokontrolerów z rdzeniem ARM7. Obecnie produkowanych jest tyle wersji układów z ARM7, że wielu konstruktorów nawet nie zastanawia się nad alternatywą. Należy jednak pamiętać, że nie jest to nowa architektura – ARM7 opracowano już w 1993 r. Wymagania aplikacji w tamtym czasie nie były aż tak duże jak ma to miejsce dzisiaj. Pomimo przyśpieszania zegara, dodawania coraz nowszych peryferii sam rdzeń się nie zmienił, wciąż ma te same ograniczenia. Jedną z alternatyw jest rdzeń AVR32 opracowany przez firmę Atmel. Został on pierwotnie zaimplementowany w procesorach aplikacyjnych, a ostatnio także w mikrokontrolerach serii UC3. Wydajność mikrokontrolerów UC3 porównano z najszybszymi obecnie na rynku układami z rdzeniem ARM7 (tabela 1). Przy częstotliwości taktowania 66 MHz układ UC3 pracuje z wydajnością 80 MIPS.
Istnieje jeszcze jeden mit związany z mikrokontrolerami z rdzeniem ARM7. Konstruktorzy sięgają po nie, uznając je jako standard, pozwalający na przeniesienie swojego projektu na układ z ARM7 innego producenta. Nic bardziej mylnego, o ile sam rdzeń jest standardem, to należy pamiętać, że rdzeń otoczony jest przez zespół peryferii, różnych dla każdego producenta. Aplikacja odwołuje się głównie do peryferii, a nie do samego rdzenia. Tym samym migracja z układów z ARM7 Atmela do układów UC3 jest naturalna i prosta, natomiast przejście na układ innego producenta wiąże się z poważnymi zmianami projektu.
Tabela 1. Porównanie wydajności układów UC3 i ARM7 | ||
---|---|---|
ARM7 | UC3 | |
Slow clock | <20 MHz 0,55 MIPS/MHz (Thumb) 0,70 MIPS/MHz (ARM) | <30 MHz 1,30 MIPS/MHz |
Fast clock | >40 MHz 0,47 MIPS/MHz (Thumb) 0,60 MIPS/MHz (ARM) | >30 MHz 1,20 MIPS/MHz |
Architektura układów UC3
Rdzeń AVR32 zaprojektowany został w oparciu o prostszą, wydajniejszą architekturę harwardzką. ARM7 korzysta z klasycznej architektury von Neumana. W układach UC3 zastosowano szereg innowacyjnych rozwiązań, między innymi zdecydowano się na jeden zestaw instrukcji o różnej długości 16 i 32 bitów. Stosowanie instrukcji różnej długości nie wymaga zmiany trybu pracy, jak np. w ARM/Thumb. W celu zmniejszenia objętości kodu wynikowego rozszerzono grupę instrukcji load/store, w innych architekturach tego typu operacje zajmują nawet do 30% całego kodu. Dostępne są również instrukcje load/store, które w jednym cyklu rozkazowym „w locie” potrafią modyfikować dane pobrane z rejestru, zanim zapiszą je do pamięci. Dodano też grupę jednocyklowych instrukcji DSP, takich jak mnożenie czy mnożenie z akumulacją. Wyniki operacji mogą być 32-, 48- i 64-bitowe. Dodatkowo zaimplementowano operacje na bitach, jak np.: pobranie n bitów rejestru i wpisanie do innego rejestru od pozycji p. Takie instrukcje bitowe mają duże znaczenie w aplikacjach obsługi protokołów.
Rodzina UC3 dzieli się na dwie grupy UC3A oraz UC3B. Jako pierwsze do produkcji weszły układy UC3A w obudowach TQFP144 i 100. Po nich dostępne będą UC3B w obudowach QFP/QFN 64 i 48. Szczegółowe informacje na temat układów UC3 znajdują się w tabeli 2.
Pierwszym układem rodziny UC3A jest AT32UC3A0512 (rys. 1). Mikrokontroler ten ma 512kB pamięci Flash wyposażonej w dwa osobne banki, umożliwiające odczyt jednego słowa/cykl zarówno dla 0 waitstate, jak i 1 waitstate w przypadku sekwencyjnego odczytu. Dzięki temu CPU nigdy nie musi czekać na dane z pamięci Flash, poza przypadkiem rozgałęzienia programu (obsługa wyjątków). Pamięć SRAM we wszystkich układach UC3 charakteryzuje się jednocyklowym zapisem/odczytem i jest bezpośrednio połączona z trzystopniowym pipeline. Opisywany układ ma 64kB pamięci SRAM.AT32UC3A0512 zawiera również zewnętrzną magistralę obsługującą pamięci SRAM, SDRAM, ROM, Flash oraz inne urządzenia o organizacji pamięci (LCD, FPGA).
Ważnym elementem architektury UC3 jest Hmatrix. Jest to wielopoziomowa wewnętrzna magistrala komunikacyjna, która zapewnia szybki transfer pomiędzy modułami wewnętrznymi mikrokontrolera. Na przykład w układach UC3A do HMatrix jako układy Master podłączone są kontroler DMA, rdzeń z interfejsem danych i rozkazów i szybkie interfejsy komunikacyjne Ethernet i USB. Pamięć SRAM, Flash, dwa mostki magistral peryferyjnych, zewnętrzna magistrala pamięci oraz USB są widziane jako układy Slave podłączone do Hmatrix. Sposoby komunikacji pomiędzy peryferiami układu UC3A obrazuje rys. 2.
W mikrokontrolerach UC3 zaimplementowano czteropoziomowy priorytetowy system przerwań. Kontroler przerwań zawiera 64 grupy, z których każda może zawierać 32 przerwania. Umożliwia to np. zgromadzenie przerwań istotnego dla aplikacji timera i USART-a w jednej grupie. Warto dodać, że instrukcje wielocyklowe są przerywane po odebraniu sygnału przerwania lub wystąpieniu wyjątku, po zakończeniu obsługi przerwania następuje ponowne rozpoczęcie przerwanej instrukcji.
Interfejsy i układy peryferyjne
Mocnym punktem mikrokontrolerów UC3A są ich peryferia komunikacyjne. Konfigurowalny Ethernet MAC 10/100 wspiera zarówno tryb pracy MII, jak i absorbujący mniej portów RMII. Ethernet MAC ma dedykowany kanał DMA. W porównaniu do większości mikrokontrolerów z ARM7 nowością jest też kontroler USB 2.0 FS 12Mbps z funkcją hosta OTG.W AT32UC3A0512 zaimplementowano szereg standardowych interfejsów, jak np. TWI (I2C), 2xSPI, SSC i aż cztery USART-y ze sprzętową kontrolą transmisji. Dodatkowo jeden z USART-ów ma wsparcie dla IrDA, modemu i ISO7816.
Układy UC3 mają powielone funkcje specjalne na pinach I/O. Pozwala to na elastyczną konfigurację układu oraz maksymalne wykorzystanie układów peryferyjnych. Z reguły do jednego pinu przypisanych jest kilka alternatywnych funkcji np. USART i SPI, użycie jednego z nich uniemożliwia korzystanie z drugiego. W UC3 funkcje alternatywne powielono na kilku pinach, a każdy z nich ma do trzech multipleksowanych funkcji. Kontroler portów I/O zawiera osobne rejestry do ustawiania stanów wysokich, niskich oraz osobny do zmiany stanu na przeciwny.
Mikrokontrolery UC3A i UC3B wyposażono w standardowe peryferia takie jak timery, przetwornik A/C, watchdog oraz układy nadzorujące zasilanie. Układy dysponują kilkoma opcjami taktowania, do których zalicza się wewnętrzny oscylator RC, dwa oscylatory zewnętrzne, dwie niezależne pętle PLL i jeden oscylator 32kHz.
Rodzina UC3 charakteryzuje się bardzo małym poborem prądu. W trybie uśpienia AT32UC3A0512 pobiera tylko 40μA, a w trybie aktywnym z włączonymi wszystkimi peryferiami 40mA@66MHz. Seria UC3B w trybie aktywnym pobiera tylko 23mA, a w uśpieniu 30μA przy zasilaniu 3,3V. Z kolei w przypadku zasilania dwoma napięciami 1,8V/3,3V prąd w uśpieniu spada poniżej 15μA.
Tabela 2. Charakterystyka układów rodziny UC3 | ||||
---|---|---|---|---|
UC3A | UC3B | |||
FMAX | 66MHz | 66MHz | ||
VCC | 3,3 V | 3,3 V | ||
Flash [kB] | 512/256/128 | 256/128/64 | ||
RAM [kB] | 64/64/32 | 32/16/16 | ||
EBI | Tak | Nie | Nie | |
HMatrix/PDC | 6/15 | 5/9 | ||
Ethernet | Tak | Nie | ||
USB | Device + Host OTG | Device + Host OTG | ||
PWM | 6+1 | 6+1 | ||
UART | 4 | 3 | 2 | |
ADC | 8x10bit | 8x10bit | 6x10bit | |
I/O | 109 | 69 | 44 | 28 |
Obudowa | QFP144 | QFP100 | QFP/QFN64 | QFP/QFN48 |
Programowanie i narzędzia
W celu ułatwienia programowania układów UC3A i UC3B dostarczane są z bootloaderem USB zaprogramowanym w początkowej części Flasha (8kB). Kolejnym sposobem jest programowanie przez interfejs JTAG, do którego można użyć JTAG ICE mkII, czyli narzędzie znane z 8-bitowych AVR.
Dla układów z rdzeniem AVR32 powstało środowisko programowe AVR32 Studio oraz kompilator GNU GCC oraz FreeRTOS, wymienione programy są darmowe. Jest też szereg narzędzi komercyjnych sygnowanych przez np. IAR, Express Logic czy Micrium.
Marcin Korus (FAE)
JM Elektronik