Mikrokontrolery AVR XMEGA w praktyce, część 14. System zdarzeń
W mikrokontrolerach XMEGA układów peryferyjnych jest bardzo dużo, ale rdzeń procesora jest tylko jeden. Mogłoby się okazać, że rdzeń nie jest w stanie przetwarzać danych wysyłanych przez peryferia. Projektanci układów XMEGA udostępnili narzędzia, pozwalające peryferiom komunikować się ze sobą zupełnie bez pośrednictwa rdzenia – są to DMA oraz system zdarzeń. W tym odcinku zajmiemy się zdarzeniami, a DMA zostanie omówione w kolejnych częściach.
Zdarzenie kontra przerwanie
Musimy dokładnie zrozumieć różnicę między przerwaniem, a zdarzeniem. Po zgłoszeniu przerwania, procesor przerywa dotychczas wykonywane operacje, przechodzi do procedury obsługi przerwania, po czym wraca do dotychczas wykonywanego programu.
Zdarzenie może zostać zrealizowane bez jakiejkolwiek reakcji ze strony rdzenia procesora. Służy do tego, aby jeden układ peryferyjny mógł sterować innym układem. Przykładem zdarzenia może być przepełnienie timera, które inicjuje pomiar przetwornikiem analogowo-cyfrowym. Innym zdarzeniem może być zmiana stanu komparatora analogowego, która jest rejestrowana przez timer.
Zdarzenie może wygenerować układ zwany nadajnikiem. Można zdarzenie generować również programowo. Do każdego nadajnika możemy podłączyć jeden lub kilka odbiorników. Większość peryferiów może być zarówno nadajnikami i odbiornikami. Nic nie stoi na przeszkodzie, by odbiornik jednego zdarzenia był nadajnikiem kolejnego. W ten sposób można łączyć timery w łańcuszek i można stworzyć timer 64-bitowy lub jeszcze dłuższy. Przykład nadajnika i odbiornika przedstawiono na rysunku 1.
Rys. 1. Timer i przetwornik ADC połączone systemem zdarzeń
Ważną zaletą zdarzenia nad przerwaniem jest duża szybkość reakcji. Wystarczą zaledwie dwa cykle zegarowe od wygenerowania zdarzenia do jego realizacji przez odbiornik. W przypadku przerwania – samo wejście do procedury zajmuje dużo więcej czasu. Zdarzenia mają w 100% przewidywalny czas realizacji i jak już wspomniano, nie angażują procesora, więc może zajmować się innymi zadaniami. Mało tego, rdzeń procesora można nawet wyłączyć, wprowadzając go w stan uśpienia! Tak więc zastosowanie systemu zdarzeń może radykalnie zmniejszyć zużycie energii.
Nadajniki i odbiorniki połączone są ze sobą przy pomocy sieci połączeń (rounting network) przedstawionej na rysunku 2. W przypadku mikrokontrolera ATxmega128A3U składa się ona z ośmiu kanałów, które doprowadzone są do wszystkich peryferiów, mogących funkcjonować jako odbiorniki zdarzeń. Na „początku” każdego kanału jest multiplekser, czyli elektroniczny przełącznik, którym można ustawić, jaki układ peryferyjny ma być nadajnikiem zdarzenia. W ten sposób możemy budować sieć połączeń według własnych potrzeb (jeszcze trochę i będzie jak w FPGA…). Choć może wydawać się to bardzo skomplikowane, w praktyce wykorzystanie systemu zdarzeń jest trywialnie proste.
System zdarzeń nie jest wyłącznie biernym pośrednikiem i siecią połączeń. Umożliwia także kilka ciekawych funkcji, takich jak filtr cyfrowy oraz dekoder kwadraturowy. Filtr umożliwia likwidację szumów, co przydatne jest w sytuacji, gdy nadajnikiem zdarzenia jest pin procesora połączony np. z przyciskiem. Dekoder kwadraturowy umożliwia bardzo proste podłączanie enkoderów obrotowych, takich jak w pokrętłach oscyloskopów. Dzięki całkowicie sprzętowej obsłudze, zastosowanie enkodera w programie staje się równie proste jak podłączenie klawiatury!
Dystrybutorem zestawu X3-DIL64 jest KAMAMI.pl. |
Dominik Leon Bieczyński