POLITECHNIKA BIAŁOSTOCKA
WYDZIAŁ INFORMATYKI
KATEDRA Systemów Czasu Rzeczywistego
PRACA DYPLOMOWA MAGISTERSKA
TEMAT: Zestaw ćwiczeń laboratoryjnych na bazie modułów MSP430
WYKONAWCA: Antoni Perkowski
Imię i nazwisko
PODPIS: .................................
PROMOTOR: dr inż. Mirosław Omieljanowicz
Imię i nazwisko
BIAŁYSTOK 2007 r.
Karta dyplomowa
POLITECHNIKA BIAŁOSTOCKA |
|
Nr albumu studenta 61750
|
|||||
Wydział Informatyki
|
Studia niestacjonarne stacjonarne/niestacjonarne
Magisterskie uzupełniające. magisterskie jednolite/ magisterskie uzupełniające/ studia I stopnia/ studia II stopnia
|
Rok akademicki 2005/2006 |
|||||
|
|
Kierunek studiów Informatyka
|
|||||
Katedra Systemów Czasu Rzeczywistego |
|
Specjalność Inżynieria Oprogramowania |
|||||
Antoni Perkowski Imię i nazwisko studenta
TEMAT PRACY DYPLOMOWEJ:
Zestaw ćwiczeń laboratoryjnych na bazie modułów MSP430
.................................................................................................................................................. Zakres pracy:
|
|||||||
Dr inż. Mirosław Omieljanowicz Imię i nazwisko promotora - podpis |
Dr hab. inż. Waldemar Rakowski, prof. nzw. Imię i nazwisko kierownika katedry - podpis |
||||||
.....................................................Data wydania tematu pracy dyplomowej - podpis promotora |
................................................... Regulaminowy termin złożenia pracy dyplomowej |
........................................................ Data złożenia pracy dyplomowej - potwierdzenie dziekanatu |
|||||
|
..................................... Ocena promotora |
.................................. Podpis promotora |
|
||||
................................................... Imię i nazwisko recenzenta |
........................................... Ocena recenzenta |
................................................ Podpis recenzenta |
SPIS TREŚCI
1. Wstęp
W ramach przedmiotu Architektura komputerów studenci zapoznają się z koncepcją struktury systemu komputerowego, która określa jego składniki, ich budowę i połączenia, tak, aby całość spełniała określone wymagania użytkowe. Zdobytą wiedzę teoretyczną potwierdzają w praktyce wykonując eksperymenty na układach dydaktycznych w ramach zajęć laboratoryjnych. Trafny wybór przykładu dydaktycznego jest bardzo ważny, wbrew pozorom zastosowanie w tej roli komputera typu IBM PC z najnowszym procesorem Pentium nie jest rozwiązaniem trafnym, ze względu na zbyt złożoną architekturę tego ostatniego. Jako przykłady dydaktyczne najbardziej nadają się procesory „przyjazne” tzn. o prostej budowie, dużych możliwościach i znacznej popularności. Obecnie zajęcia laboratoryjne prowadzone są w oparciu o mikrokontroler typu 8051. Układ ten jest swego rodzaju fenomenem, pomimo, że architektura jego powstała ponad 20-lat temu nadal jest chętnie stosowany w nieskomplikowanych układach przemysłowych ze względu na swą niską cenę i prostą budowę. Jednak w nowoczesnych bardziej złożonych projektach jego możliwości są niewystarczające, dlatego przemysł sięga coraz częściej po mikrokontrolery nowe, 16-bitowe. Oczywiście jako przykład dydaktyczny wyczerpał on również swoją formułę. Dlatego na potrzeby laboratorium zostały zakupione płyty rozwojowe MSP430-easyWeb2 produkowane przez firmę OLIMEX na bazie mikrokontrolera MSP430F149 Texas Instruments.
Celem pracy jest przedstawienie zestawu ćwiczeń laboratoryjnych na bazie w/w modułu, które umożliwią zrozumienie architektury i budowy podstawowych elementów systemu mikroprocesorowego. Przybliżą również tajniki ich projektowania i oprogramowania. Praca zawiera opis architektury modułu MSP430, dający niezbędną wiedzę teoretyczną do wykonania ćwiczeń. Do pracy dołączony został konspekt zajęć w formie multimedialnej w celu usprawnienia przeprowadzania laboratoriów.
Zakres ćwiczeń obejmuje praktyczne wykorzystanie elementów zawartych w mikrokontrolerze oraz sterowanie elementami zewnętrznymi znajdującymi się na płycie. Materiał ćwiczeń został przedstawiony w postaci laboratoriów. Każde z nich umożliwia poznanie kolejnego zasobu systemu. Składa się z dwóch zasadniczych części, teoretycznej przedstawiającej architekturę, właściwości oraz wybrane dane techniczne badanego elementu i części praktycznej zawierającej ćwiczenie główne i zadania rozszerzające dane zagadnienie, polegające zazwyczaj na modyfikacji ćwiczenia zasadniczego, są one ułożone wg narastającego stopnia trudności.
W pracy mikrokontroler nie jest prezentowany metoda klasyczną polegającą na zapoznaniu się z pracą procesora poprzez język asembler. Pomimo, że język wewnętrzny umożliwia dokładne zrozumienie działania procesora oraz współdziałających z nim układów to niestety nie ułatwia pierwszych prób programowania mikrokontrolera ze względu na:
swą złożoność, przez co programowanie jest żmudne i zajmuje więcej czasu,
konieczność starannego planowania i kontrolowania danych w pamięci,
trudności w modyfikacji programów zwłaszcza w ich fazie końcowej,
podatność programów na błędy i małą ich czytelność.
Wszystkich tych niedogodności pozbawione jest programowanie z poziomu zbliżonego do sprzętu, w języku C. Język ten przy zapisywaniu algorytmu pracy systemu, wymaga równie dobrej znajomości architektury mikrokontrolera jak w przypadku programowania w asemblerze. Potrzeba programowania w języku wysokiego poziomu wynika z faktu, że przy ogromnej podaży nowych mikrokontrolerów i mikroprocesorów, uczenie się coraz to nowych języków wewnętrznych staje się niemożliwe.
Układ pracy jest następujący:
Rozdział 2, jest opisem płyty ewaluacyjnej EasyWeb2, zapoznaje z jej budową i możliwościami oraz krótko opisuje główne jej elementy.
Rozdział 3, zawiera zwięzły opis architektury głównego układu płyty, mikrokontrolera MSP430F149.
W rozdziale 4, dokonuję opisu głównych narzędzi programistycznych dla rodziny MSP430.
Rozdział 5 i 6, stanowią zasadniczą część pracy. Przedstawiają w postaci kolejnych laboratoriów, ćwiczenia i zadania do praktycznego wykonania. W rozdziale 5 zebrane są ćwiczenia dotyczące zasobów mikrokontrolera natomiast rozdział następny przedstawia przykłady wykorzystania modułu jako Web serwera. Laboratoria poprzedzane są niezbędną częścią teoretyczną.
2. Zestaw uruchomieniowy MSP430-easyWeb2
2.1. Wprowadzenie
Dużym powodzeniem w roli przykładów dydaktycznych cieszą się różnego rodzaju płyty rozwojowe. Umożliwiają one studentowi zajęcie się funkcjonalną stroną działania badanego elementu, zwalniając z obowiązku łączenia zwykle licznych wejść i wyjść poszczególnych elementów układu. Płyty te stanowią doskonałą bazę do:
Poznania budowy systemu mikroprocesorowego.
Nauki programowania mikrokontrolerów.
Poznania metod sterowania układami będącymi otoczeniem mikrokontrolerów.
Opracowywania różnych projektów, które można przetestować zanim zostanie zaprojektowana płytka drukowana.
Fotografia 1. Płyta uruchomieniowa EasyWeb2.
Z pośród wielu ofert w tej kategorii, Politechnika Białostocka do realizacji programu nauczania Architektura Komputerów wybrała produkt firmy Olimex, MSP430-easyWeb2. Płyta ta spełnia w/w oczekiwania a poza tym dostarcza sprzętowe i programowe rozwiązanie dostępu do sieci Ethernet/Internet. Umożliwia to zademonstrowanie różnych aspektów współpracy urządzeń elektronicznych z siecią. Widok modułu przedstawia fotografia 1.
2.2. Wyposażenie systemu
Zestaw uruchomieniowy MSP430-easyWeb2 został opracowany i wykonany przez firmę Olimex z myślą o użytkownikach mikrokontrolerów serii MSP430F14x
firmy Texas Instruments. Płyta posiada następujące elementy podstawowe:
mikrokontroler MSP430F149
Rezonator kwarcowy 8Mhz
kontroler LAN CS8900, transformator separujący, złącze RJ45
dwie diody statusu LAN
pamięć EEPROM 24LC515 (64kB)
Wyświetlacz LCD 2x16 znaków ze sterownikiem HD44780
Interfejs RS232 ze złączem DB9
Interfejs 1-wire (Dallas iButton)
Wejście częstotliwościowe (Frequency)
Łączówka szpilkowa wejść analogowych dla przetwornika ADC (AEXT)
Łączówka szpilkowa EXT
Złącze JTAG
Cztery optoizolowane wejścia
Cztery przyciski
Brzęczyk
Dwa przekaźniki 10A/240V AC
Diodę LED do dowolnego wykorzystania
6 diod sygnalizujących stan wysoki na wyprowadzonych wejściach i wyjściach portu P1.
diodę sygnalizującą zasilanie
gniazdo zasilające 5,5mm/2,1mm (power jack)
Elementy zostały rozmieszczone na płycie laminowanej o wymiarach 138 x 83mm wg rysunku nr 1.
Rysunek 1. Rozmieszczenie elementów na płycie.
2.3. Opis modułu
Schemat elektryczny modułu EasyWeb2 oraz rozkład wyprowadzeń mikrokontrolera MSP430F149 został zamieszczony na płycie w katalogu „schematy”. Płyta zasilana jest napięciem stałym 12 V przez gniazdo power jack. Potrzebne napięcia (3.3V, 3.8V i 5.0V) do zasilenia poszczególnych układów scalonych otrzymywane są ze stabilizatorów wlutowanych na płycie.
„Sercem” modułu jest nowoczesny mikrokontroler MSP430F149, wyposażony w 16-bitowy rdzeń o architekturze RISC i zewnętrzny szybki rezonator kwarcowy 8MHz zapewniają mu dużą szybkość działania (do 8 MIPS). Posiada 12 rejestrów ogólnego przeznaczenia (12 akumulatorów!) i siedem trybów adresowania z których każdego można użyć do operacji na dowolnym obszarze adresowym. Układ dysponuje największą w swojej rodzinie pamięcią flesz (60 kB). Współpracę układu z otoczeniem zapewniają liczne bloki peryferyjne: sześć zespołów linii wejść/wyjść cyfrowych, dwa układy licznikowo/czasowe, dwa bloki do szeregowej transmisji danych, przetwornik analogowo-cyfrowy i komparator. Oczywiście są to tylko najważniejsze jego zalety, szerszy opis architektury mikrokontrolera dostarczający niezbędną wiedzę do wykonania ćwiczeń zostanie przedstawiony w rozdziale trzecim.
EasyWeb2 zaprojektowano jako moduł sieciowy wyposażając go w kontroler sieci Ethernet 10Mb/s, CS 8900A. Realizuje on sprzętowo wszystkie zadania związane z transmisją danych w sieci, łącznie z sygnalizacją błędów odbioru i powtórnego wysyłania ramek w wypadku kolizji. Rezonator kwarcowy 20MHz ustala wewnętrzną częstotliwość pracy części analogowej układu. Układ zawiera wiele współpracujących ze sobą bloków funkcjonalnych między innymi: dynamicznie przydzielaną pamięć RAM o pojemności 4,5kB, blok kodera/dekodera ramek Ethernet i porównywania adresów MAC, generator zegarowy z pętlą sprzężenia fazowego PLL oraz filtry na analogowych wejściach i wyjściach. Układ Cs 8900A pracuje w trybie 8 bitowym i jest dołączony do mikrokontrolera za pośrednictwem magistrali danych (port P5) i cztero bitowej magistrali adresowej (młodsze linie portu P3). Do przesyłania sygnałów zezwalających na zapis lub odczyt do/z układu kontrolera wykorzystywane są linie 6 i 7 portu P3. Układ dołącza się do sieci Ethernet 10Base-T przez podwójny transformator separujący i gniazdo RJ45. Stan kontrolera sygnalizują diody LED3 i LED4, informują one odpowiednio o właściwym podłączeniu układu do działającej sieci oraz transmisji danych w sieci. Mikrokontroler ma możliwość współpracy z pamięcią szeregową w standardzie I2C typu 24LC515 o pojemności 64kB przeznaczoną na dane strony Web.
2.4. Komunikacja z użytkownikiem
Moduł MSP430-easyWeb ma wiele możliwości komunikacji z użytkownikiem, najprostsza z nich, to za pośrednictwem sygnalizatorów. Na płytce wlutowane są następujące diody świecące typu LED:
DI1-DI4 sygnalizują niski stan na liniach wejściowych 1-4 portu P1
LR1, LR2 sygnalizują załączenie przekaźników
STATUS (dowolnego wykorzystania) podłączona jest do linii P2.0
LAN i LINK informują o stanie kontrolera sieci
POWER sygnalizuje obecność napięcia zasilającego.
Moduł posiada również sygnalizator dźwiękowy w postaci BUZZER'a zbudowanego na przetworniku piezoelektrycznym. Sterowany liniami P4.2 i P4.3.
Kolejną możliwość komunikacji z użytkownikiem daje wyświetlacz LCD współpracujący ze sterownikiem HD 44780 firmy Hitachi. Pracuje on w trybie cztero bitowym, do przesyłania danych i rozkazów mikrokontroler wykorzystuje starsze linie portu P2.
Do komunikacji z użytkownikiem można też wykorzystać interfejs szeregowy w standardzie RS232 sterowany sprzętowo przez układ transmisji szeregowej UART0. W skład interfejsu wchodzi konwerter poziomów logicznych MAX 3232 i złącze DB9. Podłączony przez to złącze komputer klasy PC, korzystający z programu terminalowego, można używać jako urządzenie wej/wyj.
Komunikacja z modułem może odbywać się również w sposób zdalny przy wykorzystaniu sieci Internet (Ethernet). W mikrokontrolerze można zaimplementować stos protokołów TCP/IP i usługi sieciowe takie jak: serwer WWW czy FTP. Zapewnią one transfer danych pomiędzy modułem a dowolnym komputerem w sieci oraz zdalne sterowanie i monitoring pracy systemu, korzystając ze standardowej przeglądarki internetowej.
W fazie uruchamiania i testowania oprogramowania komunikację zapewnia zintegrowany z mikrokontrolerem interfejs JTAG (Joint Test Action Group), który ułatwia programowanie i umożliwia debagowanie programu w działającym urządzeniu (debugging in-system).
Moduł wyposażony jest w cztery przyciski B1-B4, których stan można odczytać ze starszych linii portu P4.
2.5. Porty urządzeń zewnętrznych
Moduł MSP430-easyWeb2 wyposażony jest w następujące złącza umożliwiające współpracę z urządzeniami zewnętrznymi:
Cztery izolowane galwanicznie wejścia cyfrowe połączone z systemem za pośrednictwem transoptorów.
Wyprowadzenia styków roboczych dwóch przekaźników sterowanych liniami P1.5 i P1.6.
Wejście częstotliwościowe (FREQ) umożliwia zliczanie impulsów generowanych przez źródła zewnętrzne (TIMER_A).
Interfejs 1-wire (Dallas) przeznaczony do komunikacji z niewielkimi urządzeniami peryferyjnymi typu iButton, transmisja jest realizowana programowo.
Interfejs transmisji szeregowej w standardzie RS 232.
Łącze szpilkowe AEXT umożliwia skorzystanie z 8-kanałowego przetwornika analogowo/cyfrowego (ADC), poszczególne wejścia analogowe wyprowadzone są jako funkcje alternatywne portu P6
Łączówka szpilkowa EXT daje dostęp do realizowanej programowo komunikacji szeregowej w standardzie I2C, transmisji szeregowej z wykorzystaniem modułu mikrokontrolera USART0 i bezpośrednich wyprowadzeń mikrokontrolera: RST/NMI i P2.0/ACLK.
3. Architektura mikrokontrolera MSP430F149
Przeprowadzanie doświadczeń czy tym bardziej projektowanie nowych systemów w oparciu o moduł MSP430-easyWeb2 wymaga od użytkownika dobrej znajomości najważniejszego jego elementu tj. mikrokontrolera. W rozdziale przedstawiono opis funkcjonalny mikrokontrolera i najważniejsze dane potrzebne przy programowaniu.
3.1. Właściwości mikrokontrolera MSP430F149
Najważniejsze dane techniczne mkrokontrolera:
napięcie zasilania w przedziale 1,8V…3,6V
bardzo mały pobór mocy np. w trybie aktywnym 280µA na 1MHz przy napięciu 2,2V
pięć trybów pracy energooszczędnej, umożliwiające obniżenie poboru prądu nawet do 0,1µA (tryb „off-mode”)
szybkie przejście z trybu oczekiwania (standby) do trybu aktywnego (poniżej 6µs)
nowoczesna,16 bitowa architektura CPU typu RISC zapewnia wysoką wydajność przetwarzania (cykl rozkazowy 125ns@8MHz)
pamięć stała typu FLASH o pojemności 60kB i 2kB pamięci RAM
12 bitowy przetwornik A/C typu SAR
dwa 16-bitowe liczniki, licznik „A” z trzema rejestrami i licznik „B” z siedmioma rejestrami pracującymi w trybie Capture/Compare
komparator analogowy
układ watchdog
dwa układy komunikacji szeregowej USART
sprzętowy układ mnożący
sześć portów 8-bitowych
programowanie w układzie (ISP) przy pomocy mechanizmu Bootstrap-Loader (BSL) lub interfejsu JTAG
obudowa 64-pinowa
3.2. Schemat blokowy
Uproszczoną strukturę blokową mikrokontrolera MSP430F149 przedstawia rysunek 2.
Rysunek 2. Schemat blokowy mikrokontrolerów MSP430F14x.
Układ posiada 16-bitową jednostkę centralną, pamięć ROM (typu FLASH) i RAM, elastyczny system taktowania, sprzętowy układ mnożący i liczne układy peryferyjne. Wewnętrzna struktura logiczna opiera się na architekturze von Neumanna, ze wspólną przestrzenią adresową danych i programu. Zarówno dane, program, i układy peryferyjne są umieszczone w jednolitej przestrzeni o rozmiarze 64kB. Komunikacja CPU z poszczególnymi modułami oparta jest na magistrali adresowej (MAB), danych (MDB) i sterującej (MCB). Dwie pierwsze są dwustopniowe. Moduły operujące na słowach dwu-bajtowych dołączone są do magistral 16-bitowych, natomiast pozostałe wykorzystują zawężoną ich część (MAB - 4b, ADB-8b).
3.3. Układ zegara
Mikrokontroler został wyposażony w bardzo elastyczny moduł zegara. Umożliwia on użytkownikowi ustalenie optymalnej zależności między szybkością projektowanego układu a niskim poborem mocy. Zegar może być skonfigurowany do pracy bez jakiegokolwiek zewnętrznego elementu, z jednym zewnętrznym rezystorem, z jednym lub dwoma zewnętrznymi rezonatorami lub zewnętrznym sygnałem zegarowym. Konfiguracja modułu odbywa się na drodze programowej.
Rysunek 3. Schemat blokowy modułu zegara.
Układ zegara (rysunek 3) opiera się na trzech oscylatorach.
Oscylator niskiej/wysokiej częstotliwości (LFXT1), może on pracować w dwóch trybach: HF (high frequency) lub LF (low frequency). Wymaga podłączenia do pinów XIN i XOUT kwarca niskiej częstotliwości - 32768Hz, kwarca standardowego (8MHz) lub dowolnego rezonatora z przedziału 450kHz -8MHz. Oscylator LFXT1 można również używać z zewnętrznym sygnałem zegarowym doprowadzonym do pinu XIN.
Oscylator wysokiej częstotliwości (XT2), do stabilizacji wytwarzanych impulsów wykorzystuje jeden z wymienionych wyżej elementów, który należy podłączyć do wyprowadzeń XT2IN i XT2OUT.
Wewnętrzny oscylator cyfrowy (DCO) z charakterystyką typu RC - nie wymaga on zewnętrznych elementów, istnieje jednak możliwość włączania w jego obwód rezystora poprzez wyprowadzenie P2.5/R osc.
Moduł zegara wytwarza trzy przebiegi czasowe.
Zegar pomocniczy (ACLK) - sygnał pochodzi z oscylatora LFXT1 po ewentualnym poprzednim podzieleniu przez 2, 4, lub 8. Może on być źródłem taktowania dla pojedynczych układów peryferyjnych.
Zegar główny (MCLK) - źródłem tego przebiegu jest wybrany programowo jeden z oscylatorów, którego sygnał może być podzielony przez 2, 4 lub 8.
Zegar zastępczy (SMCLK) - ten przebieg może być używany przez wybrane moduły peryferyjne pochodzi on z oscylatora XT2 lub DCO z możliwością uprzedniego podziału.
3.4. Jednostka centralna
Mikrokontroler MCS430F149 został wyposażony w nowoczesną 16 bitową jednostkę centralną o architekturze RISC. Dysponuje ona możliwościami specjalnie utworzonymi dla wsparcia nowoczesnych technik programowania takich jak: przewidywanie rozgałęzień (calculated branching), tablica procesów, używanie języków wysokiego poziomu (np. C). CPU adresuje całą przestrzeń adresową bez potrzeby posługiwania się mechanizmem stronicowania. Wszystkie operacje poza instrukcjami sterującymi są wykonywane jako rejestrowe i trwają jeden cykl zegara. Schemat blokowy części wykonawczej CPU przedstawia rysunek 3. Poza tym jednostka centralna posiada następujące ważniejsze właściwości:
Dysponuje 27 instrukcjami wykorzystującymi dowolny z siedmiu trybów adresowania.
Posiada ortogonalny zbiór instrukcji, co oznacza, że każda instrukcja użyta z dowolnym trybem adresowania może być wykonana na dowolnym rejestrze roboczym.
Programista ma pełny dostęp do wszystkich rejestrów
16-bitowa szyna adresowa pozwala na bezpośredni i pośredni (branching troughout) dostęp do wszystkich obszarów pamięci.
16-bitowa szyna danych umożliwia dokonywanie bezpośrednich operacji na słowach.
Bezpośrednia wymiana danych między komórkami pamięci nie wymaga pośrednich zapisów do rejestrów.
Rozkazy i adresy przedstawiane są w formacie bajtu lub słowa.
Rysunek 4. Blokowa struktura CPU.
Zgodnie ze schematem (rys. 4) CPU zawiera 16 rejestrów, cztery z nich (R0-R3) są dedykowane dla: licznika programu (PC/R0), wskaźnika stosu (R1/SP), rejestru znaczników (R2) i stałych generatora ( R2 i R3). Pozostałe są rejestrami ogólnego przeznaczenia (12 akumulatorów!) i mogą być używane jako rejestry danych, wskaźników i indeksowe. W zależności od użytych instrukcji operacje wykonywane są na całych akumulatorach lub ich młodszych bajtach.
Licznik programu (R0/PC) ma długość 16 bitów i przechowuje adres rozkazu przeznaczonego do wykonania jako następny. Licznik jest inkrementowany odpowiednio do rozkazu, które mogą używać tylko parzystej liczby bajtów (2, 4, lub 6).
Wskaźnik stosu (R1/SP) przechowuje adres wierzchołka stosu. Może być używany ze wszystkimi rozkazami we wszystkich trybach adresowania. Jest używany wg schematu postinkrementacji i predekrementacji. Obszar stosu jest rozbudowywany w stronę malejących adresów.
Rejestr flagowy (R2/SR) oprócz typowych znaczników odzwierciedlających stan arytmometru, zawiera również pola informujące o ustawieniach modułu zegara
Generator stałych (R3/CG1,CG2) - w rejestrach R2 oraz R3 generowane są stałe, z których korzysta Interpreter kodu asemblerowego, co pozwala rozszerzyć zbiór instrukcji o 24 dodatkowe - emulujące instrukcje.
Zbiór instrukcji spełnia warunki ortogonalności i zawiera 51 instrukcji w tym 27 instrukcji rdzenia i 24 instrukcje emulatora. Występują one w trzech formatach: z jednym operandem, dwoma i dla instrukcji skoku. Każda instrukcja może operować na danych długości słowa lub bajtu i używać dowolnego trybu adresowania. CPU dysponuje siedmioma trybami adresowania dla operandu źródłowego i czteroma dla operandu przeznaczenia. Instrukcja trwa jeden cykl zegara plus po jednym cyklu na każdy dostęp do pamięci, przykładowo instrukcji z dwoma operandami trwa trzy takty.
3.5. Systemy resetu i przerwań
System reset w zależności od źródła zdarzenia może wygenerować dwa rodzaje sygnałów POR (power-on reset) lub PUC (power-up clear). Sygnał POR powoduje reset układu i jest wytwarzany w wyniku:
- podania napięcia na układ
- wystąpienia niskiego stanu na pinie RST/NMI, jeśli został on skonfigurowany w funkcji RESET.
Sygnał PUC jest generowany zawsze z sygnałem POR a dodatkowo wywołują go następujące zdarzenia:
- przepełnienie licznika WDT pracującego w trybie watchdog
- naruszenie klucza ochrony WDT
- naruszenie klucza ochrony pamięci FLASH.
W zależności od tego, który z powyższych sygnałów został wytworzony zawartość niektórych rejestrów mikrokontrolera może być ustawiana, może nie ulegać zmianie, może również przyjmować wartość przypadkową. Po wyzerowaniu układu sygnałem POR dokonywane są następujące ustawienia:
- konfigurowany jest pin RST/NIM (w tryb RESET)
- resetowany jest rejestr flagowy
- aktywowany jest tryb watchdog
- moduły peryferyjne przyjmują ustawienia zgodne z opisem rejestrów
-licznik programu jest ładowany adresem zawartym w wektorze resetu, który umieszczony jest pod adresem 0FFFEh.
System przerwań mikrokontrolera MCS430F149 obsługuje trzy typy przerwań: systemu RESET, niemaskowalne i maskowane.
Przerwania są obsługiwane w trybie wektorowym z ustawionymi na stałe priorytetami. Stopień priorytetu uzależniony jest od miejsca układu w łańcuchu i maleje wraz z oddalaniem się od CPU. Poziom priorytetu decyduje o tym, które z równocześnie zgłoszonych przerwań zostaje wybrane do obsługi. Tablica wektorów przerwań zawiera 16 pozycji i jest usytuowana na końcu przestrzeni adresowej (adresy od 0FFE0 do 0FFFF).
Przerwanie typu reset ma najwyższy priorytet i wywoływane jest sygnałem POR. we wyniku jego zajścia praca układu zostaje wznowiona od adresu przechowywanego we wektorze resetu.
Przerwania niemaskowalne (NMI) mogą wywołać następujące zdarzenia:
Pojawienie się aktywnego zbocza na pinie RST/NMI skonfigurowanego za pośrednictwem rejestru WDTCTL w tryb NMI.
Błąd oscylatora.
Naruszenie dostępu do pamięci FLASH.
Każde z tych źródeł może być indywidualnie uaktywnione przez ustawienie odpowiednich bitów (MINIE, ACCVIE, OFIE) rejestru „Interrupt enable1”. W przypadku przyjęcia przerwania, realizowana jest funkcja obsługi, zaczynająca się od adresu umieszczonego w przedostatnim wektorze (0FFFCh) i wszystkie bity włączeń źródeł przerwania są automatycznie resetowane.
Przyczyną przerwań maskowanych są układy peryferyjne i moduł Watchdog pracujący w trybie „interval-timer”. Każdemu z nich dedykowany jest jeden z 14 wektorów przerwań. Poszczególne źródła mogą być maskowane indywidualnie lub wyłączone zbiorowo przez bit GIE w rejestrze statusu (SR).
3.6. Organizacja pamięci
MSP430 wykorzystuje architekturę Von-Neumanna, w związku z tym ma jednolitą przestrzeń adresową o rozmiarze 64kB.
Adres |
Przeznaczenie |
Typ pamięci |
dostęp |
0FFFF 0FFE0 |
Tablica wektorów przerwań |
Flesz (60KB) |
Word/bajt |
0FFDF 01100 |
Pamięć główna
|
|
|
010FF 01000 |
Pamięć informacyjna |
Flesz 256 B
|
|
0FFF 0C00 |
Boot menory (1KB) |
Masked ROM |
Word/bajt |
09FF 0200 |
RAM (2KB) |
SRAM |
|
01FF 0100 |
Moduły peryferyjne |
Rejestrowa |
Word |
00FF 0010 |
Moduły peryferyjne
|
|
Bajt |
000F 0000 |
Rejestry specjalne SFR |
|
|
Tabela 1. Mapa pamięci MSP430F149
Najniższą część przestrzeni adresowej (16 bajtów) zajmują rejestry specjalne (SFR). Umożliwiają one dokonanie: włączeń wybranych modułów, uaktywnień przerwań i operacji na znacznikach (flagach).
Moduły peryferyjne są z mapowane w dwa obszary przestrzeni adresowej o dostępie bajtowym lub słownym. W przypadku użycia instrukcji nieodpowiadającej formatowi bloku, starszy bajt jest ignorowany lub uzupełniany zerami.
Nie wymazywalna stała pamięć ROM zawiera specjalną procedurę umożliwiającą wykorzystanie mechanizmu Bootstrap-Loader (BSL). Jest to metoda programowania pamięci Flesh mikrokontrolera, przy użyciu asynchronicznego portu szeregowego.
Mikrokontroler MSP430F149 został wyposażony w pamięć Flash o niskim poborze mocy, typu ISP (in-system programmable). Operacje programowania i wymazywania nadzoruje zintegrowany kontroler. Zawiera on trzy rejestry sterujące, generator czasowy i przetwornicę napięcia wytwarzającą napięcia programowania i wymazywania. Pamięć została podzielona na sekcję główną (60 KB) i informacyjną (256 B). Nie ma różnic w posługiwaniu się nimi. Jedna i druga może być wykorzystywana do przechowywania programu i danych. Sektor informacyjny składa się z dwóch segmentów ( A i B) o wielkości 128B każdy. Natomiast pamięć główna została podzielona na segmenty 512 bajtowe, które z kolei podzielone są na 64 bajtowe bloki. Domyślnym trybem pracy pamięci Flash jest odczyt. W trybie tym generatory czasu i napięcia są wyłączone a operacje na niej wykonywane są typowe dla pamięci typu ROM. Wybór odpowiedniego trybu write/erase, w którym CPU może programować Flash, realizowany jest za pośrednictwem następujących bitów: BLKWRT, WRT, MERAS i ERASE umieszczonych w rejestrach sterujących sterownika. Operacje zapis/kasowanie mogą odbywać się w następujących trybach:
- zapisywanie bajtu lub słowa
- zapisywanie bloku
- kasowanie segmentu
- kasowanie wszystkich segmentów pamięci głównej
- kasowanie wszystkich segmentów pamięci (łącznie z częścią informacyjną).
Czytanie pamięci podczas jej programowania jest zabronione. Dlatego aby uniknąć przestojów CPU, kod dla niego powinien być umieszczony w pamięci RAM. Uaktualnianie fleszu może być inicjalizowane z jego wnętrza lub z pamięci RAM.
3.7 Układy peryferyjne.
Przedstawione dotychczas bloki funkcjonalne zapewniają autonomiczną pracę CPU. Współpracę z otoczeniem umożliwiają natomiast układy peryferyjne. Mikrokontroler MCS430F149 wyposażono w następujące peryferia :
- sprzętowy układ mnożący
- watchdog
- zespoły cyfrowych wejść/wyjść
- przetworniki analogowo-cyfrowe i cyfrowo-analogowy
- układy czasowe
- bloki szeregowej transmisji danych.
W rozdziale tym zostaną omówione najważniejsze właściwości tych układów. Bardziej szczegółowy opis podany będzie jako wprowadzenie do odpowiednich ćwiczeń.
Sprzętowy układ mnożący pracuje niezależnie w stosunku do CPU i wykonuje 16 x 16, 16 x 8, 8 x 16 i 8 x 8 bitowe operacje. Mogą one być wykonywane na liczbach ze znakiem lub bez. Istnieje również możliwość wyboru trybów z akumulacją (sumowaniem) wyników. Rezultat operacji dostępny jest natychmiast po umieszczeniu drugiego operanda. Rejestry układu znajdują się w obszarze peryferiów przestrzeni adresowej.
Wotchdog timer (WDT) ma za zadanie wywołanie zerowania procesora, gdy wystąpi nieprzewidziany problem w wykonywaniu programu. W przypadku, gdy aplikacja nie potrzebuje tego rodzaju zabezpieczenia, moduł WDT może być wyłączony (wstrzymana zostaje praca licznika) lub przełączony w tryb „interval timer”, w którym generuje cykliczne przerwania. Wektor przerwań dla każdego z trybów jest inny. Trybowi wotchdog przyporządkowano wektor resetu, natomiast przerwanie wygenerowane w trybie , „interval” wywoła procedurę z pod adresu przechowywanego we wektorze „watchdog” (nr 10). Moduł opiera się na 16-bitowym liczniku, zliczającym w górę do którego dostęp jest możliwy wyłącznie za pośrednictwem chronionego hasłem rejestru WDTCTL. Jego młodszy bajt umożliwia konfigurację modułu do pracy i zerowanie licznika, natomiast starszy przeznaczony jest na wspomniane hasło. Niezgodność hasła podczas zapisu do rejestru sterującego lub przepełnienie licznika powoduje ustawienie flagi WDTIFG i wygenerowanie sygnału PUC (tryb wotchdog) lub przerwania (tryb interval timer).
Zespoły linii wejścia/wyjścia zwane również portami równoległymi służą do równoległej transmisji danych cyfrowych. Układ MSP430F149 ma zaimplementowane sześć ośmio-bitowych portów (P1-P6). Piny portów są wielofunkcyjne i obsługują również inne moduły peryferyjne. Wszystkie linie są indywidualnie konfigurowane przez użytkownika jako wejście lub wyjście. Z każdym portem związane są cztery rejestry:
rejestr wejściowy (PxIN) - odzwierciedla stany poszczególnych pinów pełniących funkcję I/O
rejestr wyjściowy (PxOUT) - bity tego rejestru ustawiają stan odpowiadających im linii, skonfigurowanych jako wyjście
Rejestr kierunku (PxDIR) - umożliwia ustawienie kierunku (wejście/wyjście) wybranej linii
Rejestr funkcji (PxSEL) - umożliwia wybranie funkcji alternatywnej dla żądanego pinu.
Porty P1 i P2 mają możliwość wywoływania przerwań, każdemu z nich przyporządkowano po jednym wektorze. Włączenie przerwania i wybór aktywnego zbocza sygnału wejściowego dokonywane są indywidualnie dla poszczególnych linii. Każda linii przyporządkowana jest flaga, która umożliwia zidentyfikowanie źródła przerwania.
Uniwersalny moduł USART (universal synchronous/asynchronous receive/transmit) obsługuje sprzętowo oba rodzaje transmisji szeregowej, asynchroniczną (UATR) i synchroniczną (SPI) w trybie full-duplex. Rodzaj interfejsu wybierany jest bitem SYNC.
Rysunek 5. Schemat blokowy portu USART mikrokontrolera MSP430F149.
Mikrokontroler MCS430F149 posiada dwa identyczne takie moduły USART0 i USART1. Schemat blokowy układu przedstawia rys.4. Składa się on z trzech podstawowych bloków: odbiornika, nadajnika i wspólnego generatora taktującego. Moduł USART może być zerowany na dwa sposoby, sygnałem PUC lub programowo poprzez ustawienie bitu SWRST w rejestrze sterującym układu. Wspólną prędkość transmisji dla nadawania i odbioru określa programowany generator. Zbudowany on jest z 16-bitowego licznika, dwu 8-bitowych rejestrów restytucyjnych (UxBR1, UxBR0), których zadaniem jest odtwarzanie po każdym pół cyklu zegara, zaprogramowanej zawartości licznika. W trybie asynchronicznym modulator umożliwia kompensację części ułamkowej podzielnika w przypadkach, gdy wyliczona wartość nastawu nie jest liczbą całkowitą. Taka kombinacja jest w stanie wytworzyć standardową prędkość transmisji z niestandardowego sygnału źródłowego, którym mogą być: ACLK, SMCLK, UCLKI (zegar zewnętrzny).
W trybie UART moduł ma następujące właściwości:
Programowana długość słowa danych 7 lub 8 bitów z bitem lub bez do kontroli parzystości/nieparzystości.
Komunikacja w standardzie NRZ (ang. not return to zero).
Sekwencje są nadawane i odbierane w kolejności od najmłodszego do najstarszego bitu.
Programowalna szybkość transmisji.
Niezależne rejestry przesuwne odbiornika i nadajnika.
Oddzielne rejestry buforowe.
Niezależne przerwania dla odbioru i nadawania.
Odbiornik jest przystosowany do pracy wieloprocesorowej wg wbudowanych protokołów idle-line lub address-bit.
Automatycznie są wykrywane i sygnalizowane odpowiednimi flagami błędy: ramki, równości, przepełnienia i sekwencja przerwy.
Właściwości modułu w trybie SPI:
Długość danych 7 lub 8 bitów
Komunikacja w trybie master lub slave przy użyciu 3 lub 4 linii
Niezależne rejestry przesuwne odbiornika i nadajnika
Oddzielne rejestry buforowe
Możliwość ustawienia polaryzacji i fazy zegara taktującego transmisję
Programowana szybkość transmisji (bez modulatora)
Niezależne przerwania dla odbiornika i nadajnika.
Moduł licznika Timer_A składa się z bloku licznika i trzech identycznych zespołów rejestrów capture/compare (CCR0-CCR2).
Blok licznika opiera się na 16-bitowym asynchronicznym liczniku rewersyjnym (TAR) dostępnym programowo. Spełnia on funkcję czasomierza, zliczając impulsy wewnętrznego generatora (wej. ACLK, SMCLK) lub funkcję licznika, zliczając impulsy doprowadzone z zewnątrz (TACLK, INCLK). Częstotliwość sygnału taktującego licznik może być podzielona przez 2,4 lub 8.
Rysunek 6. Schemat blokowy zespołu licznika Timer_A.
Licznik może pracować w jednym z poniższych trybów:
„Stop” - licznik zatrzymany.
„Up” - licznik zlicza wielokrotnie od zera do wartości zawartej w rejestrze TACCR0.
„Continuous” - licznik wielokrotnie zlicza od zera do wartości 0FFFFh.
„Up/down” - licznik wielokrotnie zlicza od zera do wartości zawartej w rejestrze TACCE0 i z powrotem do zera.
Przepełnienie licznika tzn. jego przejście ze stanu 0FFFFh do 0h lub ze stanu zawartego w rejestrze TACCR0 do zera, sygnalizowane jest przez ustawienie flagi TAIFG.
Każdy z bloków capture/compare można zaprogramować w tryb przechwytywania lub porównywania, co umożliwia realizację poniższych funkcji:
rejestrację zdarzeń
odmierzanie czasu
generowanie sygnałów impulsowych o określonym czasie trwania lub przebiegów okresowych o zadanym współczynniku wypełnienia (PWM).
W trybie rejestracji zdarzeń następuje przepisanie zawartości licznika do rejestru TACCRx, przy zmianie stanu wybranej linii wejściowej, przy czym można wskazać aktywne zbocze (narastające, opadające lub jedno i drugie). Tryb ten służy do pomiaru odstępów czasu między impulsami zewnętrznymi doprowadzonymi do wejść przechwytujących (CCIxA i CCIxB), przechwycenie można wywołać programowo. Zajście zdarzenie sygnalizowane jest ustawieniem flagi CCIFG w rejestrze TACCRx, skojarzonym z danym blokiem.
Tryb „porównaj” polega na porównywaniu zawartości rejestru TACCRx ze stanem licznika i wygenerowaniu sygnału wewnętrznego EQUx w chwili zrównania się ich zawartości. Równocześnie ustawiana jest flaga CCIFG skojarzonego rejestru.
Każdy blok CCRx zawiera układ wyjścia „Output Unit”, który generuje zewnętrzny przebieg na podstawie sygnałów EQU0 i EQUx. Może on pracować w jednym z ośmiu trybów, zdefiniowanych przez bity OUTMODx rejestru TACCTLx.
Timer_A dysponuje dwoma wektorami przerwań. Przerwanie o wyższym priorytecie dedykowane jest modułowi CCR0 i wywoływane jest przez flagę CCIFG. Drugi wektor ma trzy źródła: CCR1,CCR2 i przepełnienie licznika, które z nich wygenerowało przerwanie wskazuje odpowiednia flaga i rejestr TAIV (generator wektora przerwań). Zawarty w nim numer źródła przerwania może być wykorzystany do automatycznego wywołania procedury obsługi przerwania.
Timer_B7 jest drugim modułem rejestratora/generatora (układu czasowego), w który wyposażono mikrokontroler. Jego architektura jest rozbudowaną wersją Timer_A, wzbogaconą o następujące elementy:
posiada zwiększoną do siedmiu liczbę bloków capture/compare (CCR0-CCR6),
ma możliwość wyboru długości licznika (8,10,12, lub 16 bitów),
rejestry TBCLx są buforowane i mogą być grupowane,
wszystkie wyjścia mogą być ustawione w stan wysokiej impedancji.
Sposób obsługi układu jest analogiczny do obsługi modułu Timer_A.
Moduł konwersji analogowo-cyfrowej ADC12 (rys. 7), przetwarza napięcie na odpowiadającą mu miarę liczbową w oparciu o metodę sukcesywnej aproksymacji SAR (ang. Successive approximation). 12-bitowy rdzeń ma monotoniczną charakterystykę, pozbawiony jest efektu „brakujących kodów” i umożliwia konwersję z szybkością do 200 ksps. Konwersji mogą podlegać sygnały z ośmiu wejść analogowych (A0-A7) multipleksowanych z portem P6 lub z czterech wewnętrznych kanałów dedykowanych: przetwornikowi temperatury, napięciu zasilającemu przetwornik (AVcc/2), zewnętrznym napięciom odniesienia (VeREF+ i VeREF-). Kanał do próbkowania wybierany jest programowo za pośrednictwem analogowego multipleksera redukującego zakłócenia powstałe we wyniku przełączania kanałów. Źródło napięcia odniesienia dla przetwarzanej próbki również wybierane jest programowo i mogą nim być następujące napięcia: zasilania, zewnętrzne lub wewnętrzne (1,5 lub 2,5V). Algorytm przetwarzania taktowany jest sygnałem ADC12CLK, otrzymanym po ewentualnym podzieleniu z jednego z podstawowych zegarów mikrokontrolera (ACLK, MCLK, SMCLK) lub przebiegiem o częstotliwości ok. 5 MHz wytworzonym we wewnętrznym oscylatorze.
Okres próbkowania ustalany jest na podstawie wspomnianego sygnału ADC12CLK lub bezpośrednio przez sygnał SHI, który inicjalizuje proces próbkowania a następnie konwersji. Przebieg SHI wytwarzany jest przez jeden z modułów czasowych lub programowo za pośrednictwem bitu ADC12SC.
Przetwornik ADC12 może pracować w jednym z czterech trybów:
Jednokrotna konwersja w pojedynczym kanale.
Wielokrotna konwersja w pojedynczym kanale.
Jednokrotna konwersja w sekwencji kanałów.
Wielokrotna konwersja w powtarzającej się sekwencji kanałów.
Rysunek 7. Schemat blokowy przetwornika analogowo-cyfrowego ADC12.
Wyniki konwersji zapisywane są w buforze utworzonym z szesnastu rejestrów 16-bitowych, przy czym cztery najstarsze bity są tylko do odczytu. Każdy z rejestrów ma odpowiadający mu rejestr sterujący, który określa kanał przetwarzania, napięcie odniesienia i ewentualnie koniec sekwencji.
Przetwornik ADC12 ma przydzielony jeden wektor przerwania wspólny dla osiemnastu źródeł, które mogą je wywołać. Żądanie przerwania może być generowane przez:
Dowolną z flag ADC12IFG0-ADC12IFG15 ustawianą ze wpisem rezultatu konwersji do korespondującego z nią rejestru w buforze wyników.
Zdarzenie polegającego na nadpisaniu któregokolwiek z rejestrów w pamięci wyników.
Zdarzenie polegające na przekroczeniu czasu konwersji.
Identyfikację źródła przerwania umożliwia rejestr ADC12IV. Zawarta w nim liczba jest jego kodem i może być dodana do licznika programu w celu automatycznego przejścia do procedury obsługi przerwania.
Blok komparatora analogowego Comparator_A (rys. 8) umożliwia precyzyjne porównywanie napięć doprowadzonych do terminali wejściowych wzmacniacza operacyjnego. Innymi słowy zamienia on przebieg analogowy na dwustanowy przebieg cyfrowy.
Rysunek 8. Schemat blokowy komparatora analogowego Comparator_A
Poziom napięcia wyjściowego jest wysoki, jeżeli napięcie podane na terminal (końcówkę) odwracający jest mniejsze od napięcia odniesienia podanego na terminal nieodwracający. Wyjście komparatora może zostać wykorzystane do wyzwolenia przechwytywania wartości licznika/czasomierza Timer_B. Wybrana zmiana poziomu sygnału wyjściowego ustawia flagę CAIFG i ewentualnie generuje przerwanie. Moduł posiada własny generator napięcia odniesienia, które może być podane na programowo wybrany terminal.
3.8 Stany obniżonego poboru mocy
Od nowoczesnych układów cyfrowych wymaga się pracy przy zasilaniu bateryjnym, przez okres wielu miesięcy a nawet lat. Aby to było możliwe, zastosowany mikrokontroler powinien spełniać wyśrubowane normy zużycia energii. Warunek ten osiągany jest głównie poprzez możliwość wprowadzania mikrokontrolera w stan charakteryzujący się obniżonym poborem mocy. Rodzina MSP430 należy do najbardziej energooszczędnych, dlatego jej modele są chętnie stosowane w układach pomiarowych i przenośnych. Bardzo dobre wyniki w tej kategorii zapewnia im elastyczny blok zegara, dobrze zaprojektowany system przerwań i bogaty zestaw trybów pracy o obniżonym poborze energii.
Mikrokontroler MSP430F149 może znajdować się w stanie aktywnym lub w jednym z pięciu trybów oszczędnych. Wyboru dokonujemy poprzez odpowiednie ustawienia bitów: CPUOFF, OSCOFF, SCG0 i SCG1 w rejestrze statusu (SR). Tabela (nr 2) przedstawia charakterystykę poszczególnych stanów i odpowiadające im ustawienia w rejestrze stanu.
tryb |
stan bitów w rej. SR |
właściwości |
|||
|
SCG1 |
SCG0 |
OSCOFF |
CPUOFF |
|
Active |
0 |
0 |
0 |
0 |
CPU i wszystkie uaktywnione przebiegi są aktywne |
LPM0 |
0 |
0 |
0 |
1 |
CPU-wyłączony, przebieg MCLK dezaktywowany, zegary ACLK i SMCLK są aktywne |
LPM1 |
0 |
1 |
0 |
1 |
CPU, MCLK i oscylator DCO są wyłączone, również generator DC jest wyłączony jeśli zegar DCO nie jest wykorzystywany w stanie aktywnym, SMCLK i ACLK są aktywne. |
LPM2 |
1 |
0 |
0 |
1 |
CPU, zegary MCLK i SMCLK, oraz oscylator DCO są wyłączone, generator DC i zegar ACLK są aktywne |
LPM3 |
1 |
1 |
0 |
1 |
Jak w trybie LPM2 tylko generator DC jest również wyłączony |
LPM4 |
1 |
1 |
1 |
1 |
CPU i wszystkie zegary są dezaktywowane. |
Tabela 2. Oszczędne tryby pracy MSP430F149.
Analizując poszczególne tryby dochodzimy do wniosku, że oszczędzanie energii polega na dezaktywowaniu odpowiednich przebiegów zegarowych i ewentualnie wyłączaniu generatora DC. Oczywiście pociąga to za sobą zatrzymanie pracy układów przezeń taktowanymi. Mądre posługiwanie się poszczególnymi trybami umożliwia znalezienie optymalnego rozwiązania między energooszczędnością a funkcjonalnością projektowanej aplikacji. Dowodem na to, że warto wprowadzać mikrokontroler w rozważnie wybrane stany oszczędne niech będzie poniższy wykres.
Rysunek 9. Pobór prądu w stanach oszczędnych.
Wykres został wykonany na podstawie danych zawartych w dokumentacji mikrokontrolera MSP430F149, które „zdjęte” były w następujących warunkach: fMCLK = fSMCLK = 1MHz, fACLK = 32,768 Hz, przy konfiguracji modułu zegara: XT = 0, SELM = 0, 1.
4. Środowisko programistyczne
4.1 Przegląd oprogramowania
Na rynku istnieje wiele firm oferujących oprogramowanie wspomagające projektowanie systemów opartych na mikrokontrolerach serii MSP430. Dostarczają one kompletnego wyposażenia warsztatu programisty, obejmuje ono programator-emulator i środowisko programistyczne w skład, którego zazwyczaj wchodzi: edytor, kompilator C lub C++, asembler, linker, symulator i debager. Narzędzia te na ogół przygotowane są do współpracy ze sobą, tworząc tzw. zintegrowane środowisko rozwojowe IDE (ang. Integrated Development Environment). Bardzo często wyposażane są one w moduły współpracujące z interfejsem JTAG, który jest integralną częścią mikrokontrolerów MSP430. Umożliwia on skanowanie i programowanie, każdej komórki pamięci mikrokontrolera i posiada możliwość zdefiniowania pułapek, co ułatwia kontrolę nad wykonywanym programem podczas prac konstruktorskich. Szerokie możliwości tego interfejsu spowodowały ewaluację środowisk programistycznych, w szczególności odnotowano ogromny postęp w rozwoju debagera in - circuit, który pozwala na debagowanie programu w działającym urządzeniu (debugging in - system).
Koszt oprogramowania jest również zróżnicowany, od całkowicie darmowych poprzez wersje demonstracyjne, trialowe aż po kosztowne, ale za to bogato wyposażone. Oto kilka przykładowych pakietów:
Pakiet MSPGCC - darmowy zestaw narzędzi programistycznych na licencji GNU, zawiera kompilator GCC, asembler i linker (Binutils), debager (GDB) i kilka innych narzędzi, które są niezbędne do tworzenia i uruchomiania aplikacji dla mikrokontrolerów MSP 430.
IAR Embedded Workbench IDE - najbardziej popularne środowisko szwedzkiej firmy IAR słynie z bardzo wydajnego kompilatora, dostępne jest również w wersji demonstracyjnej o nazwie „Kickstart”
CrossWorks - produkt firmy Rowley Associates Limited, dobrze udokumentowany, równie popularny jak produkt IAR.
TI Code Composer Essentials Evaluation v2.0 - firmy Teksas Instruments jest kompletnym środowiskiem IDE, wersja z ograniczeniem kodu do 8KB jest bezpłatna.
Project_430 - środowisko oferowane przez firmę Phyton, ze względu na brak własnego kompilatora języka C, przystosowane jest do współpracy z dowolnym kompilatorem, w ofercie firmowej jest to IAR EW430
ICC V7 for MSP430 - pakiet Image Craft, darmowy i bez ograniczeń, ale tylko przez pierwsze 45 dni, później z ograniczeniem wielkości kodu do 4kB
HI-TECH C - kompilator firmy HI-TECH oferowany ze środowiskiem rozwojowym HI-TIDE2.
AQ430 Development Tools firmy Qudravox/Archelon
Z pełną listą narzędzi programistycznych rekomendowanych przez producenta układów serii MSP430 można zapoznać się na stronie Texas Instruments.
W niniejszym rozdziale zostaną przybliżone tylko dwa pierwsze z powyższej listy, a o to krótkie uzasadnienie wyboru. Za IAR Embedded Workbench IDE, przemawia chęć przedstawienia środowiska najlepszego na rynku, a za takie uważany jest produkt przodującej firmy IAR, poza tym środowisko to jest rekomendowane przez producenta mikrokontrolerów serii MSP430 jak też przez firmę OLIMEX. Wymaga ono również dokładniejszego omówienia ze względu na to, że przedstawione ćwiczenia zostały opracowane i prawdopodobnie będą wykonywane w tym środowisku.
Natomiast pakiet MSPGCC jest najlepszym przedstawicielem w kategorii pakietów darmowych i na pewno będzie bardzo chętnie używany przez użytkowników kompilatora GCC, i fanów środowisk tekstowych.
4.2 MSP430 IAR Embedded Workbench IDE
IAR Systems jest czołowym światowym producentem kompilatorów języka C/C++ na procesory 8/16/32 bitowe. Stanowią one zintegrowane pakiety narzędziowe dedykowane szerokiej gamie mikrokontrolerów. Dla rodziny MSP430 producent oferuje środowisko w dwóch wersjach, pełnej - komercyjnej oraz demonstracyjnej - bezpłatnej, nazwanej KickStart (v.3.42A), której głównym ograniczeniem jest rozmiar generowanego kodu do 4KB. Wersję pełną można testować nieodpłatnie przez okres 30 dni. Oprogramowanie to współpracuje z systemami Microsoft Windows a ich proces instalacji jest standardowy i z tego względu nie będzie tu omawiany.
IAR Embedded Workbench IDE jest kompletnym środowiskiem wspomagającym pracę programisty na etapie pisania, testowania, i uruchamiania programów. Współpracuje z emulatorem sprzętowym MSP430-JTAG, a w przypadku jego braku ma możliwość programowej symulacji pracy mikrokontrolera. IAR Embedded Workbench tworzą zintegrowane ze sobą następujące moduły:
Edytor tekstu, który na bieżąco rozpoznaje słowa kluczowe języka C/C++ i zaznacza je odpowiednimi kolorami, oczywiście dysponuje również typowymi funkcjami edytorów (np. znajdź, wstaw szablon)
Program zarządzania plikami projektów (ang. projekt manager).
Translator asemblera - MSP430 IAR Asembler
Wysoko wydajny kompilator języka C/C++ - MSP430 IAR C/C++
Narzędzia biblioteczne: IAR XAR Library Builder i IAR XLIB Librarian
Wszechstronny program konsolidujący - IAR XLINK
Program śledzący - IAR C-SPY, mogący pracować w trybie symulacji lub emulacji OCD (ang. On-Chip Debug).
Proces tworzenia kodu programu jest nadzorowany przez inteligentną funkcję MAKE, która wykrywa rodzaj modyfikacji w programie i automatycznie wywołuje niezbędne elementy kompilacyjne.
Rysunek 10. Główne okno aplikacji.
Po uruchomieniu środowiska i otwarciu istniejącego lub utworzeniu nowego projektu, ukazuje się główne okno aplikacji, którego wygląd przedstawia rys.10 Jego centralną część zajmuje edytor programu, natomiast z lewej strony ekranu znajduje się okno Workspace. Przedstawia ono na zakładkach, drzewa plików (źródłowych i wynikowych), które tworzą założone projekty. Dodawanie plików (nowo utworzonych, istniejących, bibliotecznych) lub ich usuwanie umożliwia menu kontekstowe lub rozwijalne Project. Wybór pliku wyświetlanego w oknie Workspace powoduje jego otwarcie na zakładce okna edycyjnego. W dole ekranu umieszczane są w formie zakładek wspólnego okna lub osobno, okna informacyjne takie jak Build, Debug log, Find in Files. Po kompilacji i konsolidacji w zakładce Build wyświetlane są informacje o przebiegu (również błędach) tworzenia plików wynikowych wykorzystywanych do symulacji bądź programowania mikrokontrolera. Rezultaty przeszukiwania plików (funkcja menu Edit), przedstawiane są w oknie Find in Files. Okno Debug log jest wyjściem informacyjnym debugera, i uaktywnia się podczas jego pracy. Przedstawiony układ okien jest domyślny i oczywiście może być dowolnie zmieniany. Tradycyjnie w górnej części widoku programu umieszczone są: pasek menu głównego i pasek narzędziowy, umożliwiający szybki dostęp do najczęściej używanych funkcji. Większość z nich to funkcje popularne w programach tego typu i nie wymagają dodatkowego opisu.
Przed przystąpieniem do wykonania projektu, konieczne jest określenie warunków jego realizacji, tzn. wybrania układu docelowego (typu mikrokontrolera), oraz ustawienia parametrów pracy (opcji) poszczególnych modułów środowiska IAR Embedded Workbench. Ustawień tych dokonuje się wybierając Project>Options z menu głównego lub posługując się menu kontekstowym podwiązanym do nazwy projektu (w oknie Workspace).
Po bezbłędnej translacji (Projekt>Make lub F7) napisanego programu, można sprawdzić jego działanie posługując się debugerem (Project>Debug) w trybie symulacji lub emulacji. Wyboru należy dokonać, przed uruchomieniem modułu, na zakładce Setup w kategorii Debugger w opcjach projektu.
C_SPY Debuger jest inteligentnym weryfikatorem systemowym umożliwiającym śledzenie utworzonego kodu i ewentualną weryfikację błędów programowych. Dostępny jest w następujących konfiguracjach:
Symulator programowy, możliwość analizy kodu jedynie na komputerze.
Debuger z ROM monitorem, pozwala na weryfikację kodu bezpośrednio w układzie docelowym, poprzez interfejs szeregowy danego procesora.
Debuger z interfejsem do emulatorów, pozwala na bezpośrednią komunikację z określonymi typami emulatorów oraz pracę w czasie rzeczywistym.
Rysunek 11. Struktura programu C-SPY debugger.
Rysunek 11 przedstawia strukturę C-SPY Debugger'a i sposób komunikowania się z układem docelowym. Sterowniki oprócz zabezpieczenia komunikacji i sterowania układem przeznaczenia, dostarczają specyficznego dla siebie interfejsu użytkownika (specjalne pozycje menu, okna, komunikaty).
Po przejściu do trybu symulacji, jak widać na rysunku 12 ogólny układ dotychczasowych okien IDE pozostał bez zmian. Pojawiły się natomiast dwie nowe kategorie menu (Debug, Simulator), a w pozostałych przybyło wiele nowych pozycji. Interfejs użytkownika wzbogacił się również o nowy pasek narzędziowy ułatwiający nawigację symulacją, która może odbywać się w sposób ciągły lub krokowo, rozkazy te dostępne są również poprzez menu główne „Debug”. Śledzenie przebiegu symulacji umożliwia szeroka gama okien informacyjnych (menu View), analiza ich zawartości pozwala na wykrycie nieprawidłowości w pracy programu. A oto krótka charakterystyka niektórych z nich:
Disassembler - alternatywa dla okna edycyjnego, umożliwia śledzenie programu napisanego w języku C/C++ na poziomie asemblera.
Memory - umożliwia podgląd zawartości pamięci mikrokontrolera (SFR, RAM, INFO, Flash), dodatkowo można zmieniać zawartość komórek, a zmiany są natychmiast uwzględniane w symulacji programu. Wartości, które uległy zmianie w ostatnim kroku symulacyjnym wyróżniane są kolorem czerwonym.
Register - przedstawia zawartość rejestrów procesora, oraz stan liczników: cykli, Timer_A, Timer_B.
Terminal I/O - umożliwia wprowadzanie i wyprowadzanie danych z aplikacji, po ustawieniu odpowiedniej opcji w kategorii Linker jest traktowane jako standardowe wejście/wyjście.
Watch - umożliwia podgląd zmiennych używanych w programie.
Rysunek 12. Okno debugera w trybie symulacji.
Możliwość zatrzymywania wykonywania programu w miejscach szczególnie interesujących, dostarcza system C-SPY breakpoint. Oferuje on trzy rodzaje punktów zatrzymań. W celu sprawdzenia poprawności logicznej debugowanego programu lub zrzutu jego śladu, najwygodniej jest posłużyć się „code breakpoint”, który ustawiany jest na wybranej instrukcji (rozkazie). Punkt zatrzymania typu „Data” pozwala na badanie jak i kiedy ulega zmianie zawartość określonej komórki pamięci. Trzeci rodzaj punktu zatrzymań zwany natychmiastowym (ang. immediate breakpoint), ustawiany jest również na komórkach pamięci, a powoduje zatrzymanie symulacji programu, wykonanie skojarzonej z nim akcji, poczym następuje automatyczne wznowienie wykonywania programu. Narzędzie to w połączeniu z systemem makr umożliwia symulację zachowania się sprzętu. Wszystkim typom zatrzymań można przyporządkować akcję (makro) do wykonania, a dla pierwszych dwóch również sprecyzować warunki zatrzymania specyfikując odpowiednie wyrażenie.
Ustawione punkty zatrzymań wylistowane są w oknie „Breakpoint”, tam też można je monitorować, uaktywniać, dezaktywować, usuwać lub dodawać nowe.
Innym ważnym i użytecznym narzędziem pozwalającym na zautomatyzowanie procesu debugowania i symulację układów peryferyjnych mikrokontrolera jest system makr. Ich składnia jest bardzo podobna do języka C, co daje programiście możliwość natychmiastowego z nich korzystania. C-SPY makra, mogą być użyte samodzielnie lub wspólnie z punktami zatrzymań i symulacją przerwań, do wykonania różnorodnych zadań. Przede wszystkim makra używa się do: zautomatyzowania sesji debugowania, konfigurowania sprzętu, symulowania urządzeń peryferyjnych.
C-SPY Simulator dostarcza również mechanizmu symulacji przerwań, dzięki czemu poprawność struktury logicznej programu można zbadać bez konieczności posiadania układu rzeczywistego. Zdefiniowanie pojedynczego lub cyklicznego zdarzenia wywołania przerwania, opiera się na liczniku cykli. Konfiguracja przerwania umożliwia określenie: prawdopodobieństwo jego wystąpienia oraz wariancję okresu. Dokonać jej można za pośrednictwem, okien dialogowych lub makr.
Programowanie i debugowanie aplikacji w układzie rzeczywistym odbywa się za pośrednictwem sondy emulacyjnej (MSP430-JTAG) i modułu oprogramowania IAR C-SPY FET (ang. Flash Emulation Tool)) debugger. Nie jest to emulacja w znaczeniu dosłownym - sterowany mikrokontroler pracuje samodzielnie, a sterownik emulator jedynie sprawuje nad nim kontrolę. Wyboru trybu pracy dokonujemy w polu „driver” zakładki „Setup” w kategori „Debugger” w opcjach projektu. Okno debugera w trybie emulacji dysponuje bardzo podobnymi zasobami w porównaniu z symulacją, ale programista ma dostęp do rzeczywistego mikrokontrolera. Ważniejsze różnice w interfejsie użytkownika to: w menu głównym kategorię symulacja zastąpiła emulacja, dostępne są tylko trzy sprzętowe punkty zatrzymań, przy czym nie jest dostępny typ Immediate.
4.3 MSPGCC
Pakiet MSPGCC jest zestawem narzędzi programistycznych GNU przystosowanym do obsługi mikrokontrolerów rodziny MSP430. Narzędzia te mogą pracować w systemach rodziny Windows, UNIX, BSD. Środowisko kompilatora można przygotować na dwa sposoby. Samodzielnie zbudować dystrybucję, pobierając źródła (standardowy kod źródłowy GNU i specyficzny kod źródłowy MSP430) z Internetu, kompilując je a następnie instalując lub posłużyć się dystrybucją gotową. Druga metoda jest szczególnie polecana dla praktyków, którzy chcą narzędzia wykorzystywać a nie tworzyć. Gotową wersję Windows w postaci pliku instalacyjnego można pobrać z http://sourceforge.net lub http://www.mikrocontroller.net. Podczas instalacji należy tylko wybrać składniki i wskazać katalog docelowy.
Pakiet MSPGCC tworzą następujące programy:
msp430gcc - kompilator C/C++
msp430as - asembler
msp430ls - linker
msp430objcopy - konwerter formatów binarnych
msp430gdb - debugger
make - program do automatyzacji kompilacji
programy służące do obsługi sondy JTAG: msp430gdbproxy, msp430jtag i msp430downloader
giveio - program wymagany dla Windows NT, 2000 lub XP.
Uzupełnieniem pakietu jest graficzna wersją gdb - Insight.
Pełna dokumentacja pakietu autorstwa S. Underwood'a i przykładowe ćwiczenie ilustrujące sposób posługiwania się poszczególnymi programami można znaleźć na w/w stronach.
5. Programowanie zasobów mikrokontrolera
5.1 Wprowadzenie
Niniejszy rozdział prezentuje serię prostych ćwiczeń, których zadaniem jest, ułatwienie zapoznania się z architekturą i sposobem programowania mikrokontrolerów serii MSP430 firmy Texas Instruments. Przedstawione przykłady nie wyczerpują oczywiście wszystkich możliwości programowania, starają się jedynie stopniowo wprowadzić w zagadnienie i dać studentom solidne podstawy do pogłębiania swojej wiedzy.
Na poszczególnych laboratoriach należy stworzyć programy obsługujące podstawowe elementy mikrokontrolera i układy znajdujące się na płycie. Przykładowe rozwiązania postawionych zadań przedstawione są na płycie CD. Do realizacji ćwiczeń wykorzystane zostaną moduły rozwojowe EasyWeb2. Natomiast do tworzenia i uruchamiania programów zalecane jest środowisko IAR Embedded Workbench, można użyć wersji demonstracyjnej, ponieważ programy są krótkie i nie przekraczają wyznaczonego limitu. Oczywiście można posłużyć się dowolnym pakietem, ale opis, wskazówki i rozwiązania zamieszczonych ćwiczeń dotyczą tego środowiska, musiałyby być zmodyfikowane przez prowadzącego. Stworzone i zazwyczaj przetestowane w symulatorze oprogramowanie jest ładowane a następnie uruchamiane w układzie docelowym za pośrednictwem sondy emulacyjnej MSP-JTAG (schemat urządzenia znajduje się na CD).
Zgodnie z zapowiedzią, zamieszczoną we wstępie pracy, mikrokontroler programowany będzie w języku C.
5.2 Lab 1: Sprzęt i oprogramowanie
Cel zajęć
Celem ćwiczeń jest wstępne zapoznanie studenta z modułem EasyWeb2 i środowiskiem programistycznym IAR Embedded Workbench. (Kompilacja, konsolidacja, uruchamianie programu w trybie symulacji).
Zestaw przyrządów
Wszystkie przedstawione ćwiczenia oparte są na płycie ewaluacyjnej EasyWeb2 i wymagają komputera PC z zainstalowanym oprogramowaniem IAR Embedded Workbench, dlatego w następnych ćwiczeniach wymieniane będą tylko przyrządy dodatkowe, na tych zajęciach są to:
karta sieciowa zainstalowana w komputerze PC
kabel sieciowy zakończony wtykami RJ-45 (skrośny w przypaku bezpośredniego połączenia modułu z kartą sieciową)
przewód do komunikacji szeregowej w standardzie RS232C (zakończony wtykami DB9, męskim i żeńskim).
Zasilacz prądu stałego stałego12V/ O,3A
Regulowane źródło napięcia
Generator sygnału prostokątnego (test złącza Freq)
Termometr z interfejsem 1-wire (test złącza Dallas)
(Uwaga: test złącz Dallas i Freq można przeprowadzić również poprzez wymuszenie odpowiednio stanu niskiego i wysokiego na wymienionych wejściach.)
Wiadomości teoretyczne
Przed przystąpieniem do wykonania ćwiczenia studenci powinni zapoznać się z rozdziałami drugim (opis płyty) i czwartym (opis oprogramowania) niniejszej pracy. Streszczenie zawartych tam informacji, przedstawione w formie slajdów znajduje się na płycie w katalogu slajdy.
Przebieg ćwiczeń
Laboratorium składa się z dwóch ćwiczeń A i B. Pierwsze (A) polega na wykonaniu niezbędnych połączeń i uruchomieniu załadowanego przez producenta oprogramowania testowego. W wyniku jego działania sprawdzane są poszczególne elementy modułu i wykrywane podłączone do niego układy. Wyniki testu przedstawiane są na wyświetlaczu LCD i terminalu łączności szeregowej. Do emulacji, którego można wykorzystać Windows'owy program HyperTerminal.
W ćwiczeniu „B” studenci zapoznają się ze środowiskiem IAR Embedded Workbench po przez stworzenie w nim prostego programu i uruchomieniu go w trybie symulacji. Zadaniem programu jest wygenerowanie n liczb Fibonacciego, dla wczytanej wartości n. Do wczytywania danych i wypisywania wyników należy wykorzystać okno terminal I/O.
Oto przykładowy sposób realizacji postawionych zadań.
W ćwiczeniu A:
Dokonać wymaganych połączeń używając odpowiedniego okablowania.
Dostosować konfigurację oprogramowania sieciowego do zaprogramowanych następujących ustawień mikroserwera: adres IP - 192.168.0.30, maska podsieci - 255.255.255.0, brama domyślna - 192.168.0.200.
Uruchomić program HyperTerminal (Akcesoria > Komunikacja > HyperTerminal) i ustawić następujące parametry łączności: prędkość transmisji sygnału - 9600 bodów, ilość bitów danych - 8, kontrola parzystości - brak, ilośc bitów stopu - 1, sterowanie przepływem - brak.
Zasilić moduł EasyWeb i analizować informacje ukazujące się na wyświetlaczu LCD i terminalu.
Zapoznać się ze skutkami użycia przycisków B1 - B4.
Sprawdzić poprawność działania komunikacji szeregowej. Realizowana ona jest wg następującego algorytmu: wprowadzany z klawiatury znak przesyłany jest do mikrokontrolera i wyświetlany na wyświetlaczu LCD, następnie jego kod ASCII zwiększany jest o jeden i odsyłany do komputera PC, gdzie na terminalu wyświetlany jest znak odpowiadający temu kodowi.
Zaobserwować wyniki pracy mikroserwera. Udostępniana przezeń dynamiczna strona HTML powinna przedstawiać podstawowe parametry mikrokontrolera MSP430F149, oraz informować w formie graficznej o aktualnej temperaturze układu oraz wartość napięcia podawanego na siódmą linię portu P6 ( końcówka AI7 złącza szpilkowego AEXT).
Sprawdzić poprawność działania interfejsu Freq i Dallas, poprzez dołączenie odpowiednich przyrządów lub wymuszenie odpowiednio stanu niskiego i wysokiego na wymienionych wejściach.
W ćwiczeniu B.
Uruchomić program IAR Embedded Workbench.
Utworzyć nową przestrzeń: File > New > Workspace.
Utworzyć nowy projekt: Project > Create > New Projekt, wybrać „Empty projet”, a następnie zapisać w wybranym katalogu.
Plik projektu z rozszerzeniem .ewp pojawi się w uprzednio wybranym katalogu po zapisaniu przestrzeni (File > Save Workspace)
Przeanalizować powstałe pliki i katalogi.
Utworzyć plik(i) źródłowe i nagłówkowe wybierając File > New > Source/Test.
Dodać utworzone plik(i) do projektu: w oknie „workspace” zaznacz cel gdzie będą dodawane pliki a następnie wybrać, Project > add Fills.
Ustawić opcje projektu (Projekt > Options), zalecane są następujące ustawienia:
Kategoria |
Zakładka |
Pole |
Ustawienia |
General option |
Target Output Library conf. |
Devis Output file Library |
MSP430F149 Executable CLIB |
C/C++ compiler |
Code Output List |
Optimizations bez nazwy bez nazwy |
Size, None(best debug support) Generate debug info Output list file, assembler mnemonics |
Linker |
Output |
Format |
Debug information for C-SPY With runtime control modules With I/O emulation modules |
Debugger |
Setup |
Driver |
With I/O emulation modules Simulator, Run to main |
Przeprowadzić kompilację, konsolidacje i uruchomić debuger.
Zapoznać się z działaniem przycisków w nowo powstałym pasku narzędziowym, poprzez kilkukrotne wykonanie programu.
Ćwiczenie C
Dla utrwalenia umiejętności zmodyfikować powyższy program tak, aby wprowadzanie danych i wyprowadzanie wyników odbywało się przy pomocy funkcji gets() i putc(). Porównać rozmiar kodu wynikowego dla obu przykładów.
Propozycje kodów źródłowych dla zaproponowanych ćwiczeń znajdują się w katalogu Laboratoria > Lab1. W analogiczny sposób będą przedstawiane rozwiązania następnych ćwiczeń.
5.2 Lab 2: Obsługa portów we/wy
Cel zajęć
Zapoznanie się z podstawowymi sposobami sterowania urządzeniami podłączonymi bezpośrednio do portów mikrokontrolera. Opanowanie sposobu programowania pamięci mikrokontrolera wykorzystując emulator MSP430-JTAG. Zdobycie umiejętność pisania programu, którego działanie zależy od użycia przycisku mechanicznego, nabycie podstawowych umiejętności pisania programów dla mikrokontrolerów.
Zestaw przyrządów
Oprócz wymienionych w rozdziale poprzednim narzędzi podstawowych, w zajęciach tych wykorzystywany będzie emulator MSP430-JTAG produkowany przez firmę: OLIMEX.
Wiadomości teoretyczne
Do równoległej transmisji danych cyfrowych służą w mikrokontrolerach zespoły linii wejścia-wyjścia, zwane portami równoległymi (ang. parallel ports lub I/O ports). Mikrokontroler MSP430F149 zawiera sześć takich portów, każdy po osiem linni. Wszystkie porty są dwukierunkowe i mogą być wykorzystane jako wejścia lub wyjścia bezpośrednie, przy czym dopuszczalne jest mieszanie w jednym porcie linii wejściowych i wyjściowych. Linie funkcjonujące jako we/wy cyfrowe zawierają bramki z przerzutnikiem Schmitta, co pozwala na pracę z sygnałami wejściowymi o wolno narastających lub opadających zboczach. Piny portów są multipleksowane z wyprowadzeniami innych modułów peryferyjnych, dlatego struktury poszczególnych linii są różne, ich schematy zamieszczone są w dokumentacji technicznej mikrokontrolera MSP430F149. Porty I/O w strukturze wewnętrznej układu umieszczone są w obszarze rejestrów specjalnych. Dla każdego z nich przypisane są cztery zasadnicze rejestry, a porty P1 i P2 posiadają jeszcze po trzy dodatkowe, umożliwiające konfigurację przerwań. Dzięki temu można dowolnie konfigurować każdą końcówkę układu związaną z portami.
Obsługa linii we/wy sprowadza się do:
Wyboru funkcji dla danego wyprowadzenia (pinu), poprzez dokonanie odpowiedniego wpisu do rejestru PxSEL wg zasady: zero konfiguruje odpowiadającą bitowi linię jako we/wy cyfrowe, natomiast jedynka przydziela jej funkcję alternatywną. Po wyzerowaniu mikrokontrolera wszystkie porty są skonfigurowane jako we/wy cyfrowe.
Ustalenia kierunku poszczególnych linii za pośrednictwem rejestru PxDIR. Ustawienie bitu konfiguruje odpowiadającą mu linię jako wyjście, natomiast wyzerowanie jako wejście. Po starcie wszystkie bity w rejestrach kierunku są wyzerowane, czyli porty są ustawione jako wejścia.
Odczytu zawartości rejestru PxIN, który odzwierciedla fizyczny stan końcówek portu x (oczywiście skonfigurowanych uprzednio jako wejścia) wg zasady: stan linii niski - odpowiadający jej bit jest wyzerowany, stan linii wysoki - bit jest ustawiony.
Wpisu do rejestru PxOUT, co skutkuje wprowadzeniem linii odpowiadającej danemu bitowi w stan niski lub wysoki (0- niski, 1- wysoki).
W przypadku, gdy obsługa portów będzie wykorzystywała przerwania, co umożliwiają porty P1 i P2, należy dodatkowo zaprogramować odpowiednie z następujących rejestrów: flag przerwania (P1IFG, P2IFG), wyboru zbocza aktywnego (P1IES, P2IES) i uaktywnienia przerwania od poszczególnych flag (P1IE, P2IE).
Narzędzia przeznaczone do ładowania programu do mikrokontrolera, można podzielić na trzy grupy. Grupa pierwsza to emulatory - przyrządy przeznaczone do pracy ze środowiskiem programistycznym, bardzo przydatne przy tworzeniu i uruchamianiu oprogramowania. Grupę drugą tworzą urządzenia służące tylko do programowania, wykorzystywane głównie w produkcji tzw. programatory. Grupę ostatnią tworzą urządzenia uniwersalne, łączące właściwości grup poprzednich.
Najprostszym emulatorem jest tzw. Flash Emulation Tool, wykorzystujący interfejs diagnostyczny JTAG. Występuje on w dwóch odmianach, różniących się w zasadzie, tylko sposobem podłączenia do komputera PC. Może być ono zrealizowane przez port równoległy lub USB. Texas Instruments oferuje jedną i drugą o symbolach odpowiednio MSP-FET430PIF i MSP430-FET430UIF. Oczywiście na rynku istnieje wiele odpowiedników tych narzędzi, a że struktura ich jest prosta można pokusić się na samodzielne jego wykonanie. Układy te zasilane są z portu komputera lub programowanego układu i nie wymagają własnego zasilacza.
Przykładem narzędzia o przeznaczeniu produkcyjnym jest programator PRGS430, umożliwia on ładowanie i zabezpieczanie programu nawet w mikrokontrolerach MSP430 pozbawionych pamięci flash (wersje z pamięcią OTP). Rynek oferuje również szereg narzędzi do programowania metodą BSL (Boot Strap Loader) np. Universal BSL Interface firmy Gessier ElectronicGmbh.
Reprezentantem trzeciej grupy przyrządów jest uniwersalny programator FlashPro430.
Przebieg zajęć
Na drugich zajęciach studenci są zobowiązani do stworzenia trzech (oznaczonych jako A,B,C) prostych (klasy „Hello Word”) programów i uruchomienia ich na module EasyWeb2.
Uwaga: Przed przystąpieniem do ćwiczenia należy zapoznać się z modułem zegara.
Ćwiczenie A.
Stworzyć i uruchomić program powodujący miganie diody „status” (dołączonej do portu P2.1.) z dowolną, ale widoczną częstotliwością
Wskazówki:
Tworzenie programu należy rozpocząć od dołączenia pliku nagłówkowego „msp430x14x.h” - zawiera on definicje, które są sformalizowanym zapisem zawartości pamięci w obszarze „SFR”.
Dla cyklicznej zmiany stanu linii najwygodniejsze jest zastosowanie funkcji XOR (eXclusive OR).
Należy zmniejszyć częstotliwość migania diody, korzystając z metody zgrubnego odmierzania czasu. Polega ona na uwikłaniu CPU w wykonywanie pętli, w której znajdują się jakieś mniej lub więcej czasochłonne zadania. W celu określenia czasu wykonywania takiej pętli należy posłużyć się listą rozkazów procesora w języku asembler, która zawiera informacje o ilości cykli potrzebnych na jej wykonanie. Innym, praktycznym sposobem wyliczenia ilości cykli, jest uruchomienie programu w trybie symulacji i analiza zawartości okien „Disassembly” i „Register”. Po starcie procesor jest taktowany przebiegiem pochodzącym z wewnętrznego oscylatora DCO (MCLK=SMCLK) o częstotliwości ~800 kHz.
Podczas programowania mikrokontrolerów obowiązuje zasada, że nie istnieje pojęcie braku rozkazu, dlatego należy zadbać o to, aby mikroprocesor pobierając kolejne rozkazy nie dostał się w obszar pamięci zapisanej losowo (zastosować pętlę nieskończoną).
Algorytm ładowania programu do pamięci flesz:
Urządzenie MSP 430-JTAG należy podłączyć do wolnego portu LPT komputera i złącza 2x7pin modułu EasyWeb2, przy wyłączonym zasilaniu. Jeśli gniazdo nie jest wyposażone w klucz należy zwrócić szczególną uwagę na prawidłowość tego połączenia (błąd grozi nawet zniszczeniem sprzętu).
Uruchomić komputer PC a następnie włączyć zasilanie w uruchamianym układzie.
Skonfigurować opcje projektu. W zasadzie są one takie same, jakie były używane, podczas realizacji projektu w trybie symulacji, przy czym obowiązkowo należy zmienić: tryb debugowania na sprzętowy (Debugger > Setup > Driver > FET Debugger) i w kategorii FET debugger wybrać numer portu LPT, do którego został podłączony emulator.
Wybrać: Projekt > Debug w celu uruchomienia C-SPY, który przejmie kontrolę nad mikrokontrolerem, wymaże a następnie zaprogramuje jego pamięć flesz.
Wybrać: Debug > Go w celu uruchomienia aplikacji.
Ćwiczenie B.
Zmodyfikować poprzedni program tak, aby dioda „status” świeciła na przemian z buczeniem brzęczyka.
Wskazówka
Zamontowany na płycie brzęczyk oparty jest na przetworniku piezoelektrycznym. Wbudowany weń piezoelektryk pod wpływem napięcia zmienia swoją objętość generując dźwięk, aby był on dobrze odbierany przez człowieka (a nie np. pojedyncze trzaski) należy zmieniać napięcie na wyprowadzeniach przetwornika z częstotliwością np. 2kHz.
Ćwiczenie C
Zmodyfikować program pierwszy tak, aby dioda zapalała się i gasła po kolejnych naciśnięciach przycisku B1. Założyć, że okres drgań styków wynosi 50ms.
Wskazówka
Przyciśnięcie przycisku wywołuje na jego wyjściu nie jeden impuls, lecz ich serię, dzieje się tak w wyniku drgań styków. Przy czym zanim ulegną one wygaszeniu procesor może wykonać nawet parę tysięcy rozkazów, a to może prowadzić do błędnego działania programu. Dlatego zjawisko to należy eliminować programowo. Aby wyeliminować wibrację styków przełącznika stan linii, do której jest on dołączony należy sprawdzać rzadziej niż wynosi okres drgań styków.
5.3 Lab 3: Obsługa modułów alfanumerycznych LCD.
Cel zajęć
Zapoznanie studentów ze sposobem sterowania standardowym, alfanumerycznym wyświetlaczem LCD z wbudowanym sterownikiem zgodnym ze specyfikacją układu HD44780 firmy Hitachi. Poszerzenie i utrwalenie umiejętności obsługi interfejsów równoległych.
Wiadomości teoretyczne
Wyświetlacze LCD (ang. Liquid Crystal Display) są tanim i prostymi w obsłudze urządzeniem służącym do wyprowadzania informacji alfanumerycznych. Stanowią one najczęściej kompletne moduły wyposażone w matrycę LCD oraz sterownik, działający zwykle zgodnie ze specyfikacją układu HD44780, który uważany jest za standard wśród modułów wyświetlających.
Rysunek nr.13 przedstawia strukturę modułu wyświetlacza LCD wraz z wyprowadzeniami. Znaczenia zastosowanych symboli są następujące: VSS - masa, VDD - zasilanie, V0 - regulacja kontrastu, RS (ang. Register Select) - wybór rejestru, R/W (ang. Read/Write) - rodzaj operacji, E (Enable) - uaktywnie wyświetlacza, D0-D7 - linie danych.
Rysunek 13. Struktura modułu wyświetlacza LCD.
Sterownik wyświetlacza posiada następujące rejestry:
Data WR - rejestr danych przeznaczony do zapisu informacji
Data RD - rejestr danych przeznaczony do odczytu informacji
Control RD - rejestr stanu wyświetlacza przeznaczony do odczytu.
Control WR - rejestr stanu wyświetlacza przeznaczony do zapisu.
Wyboru rejestru dokonuje się przez ustawienie odpowiedniej kombinacji poziomów na liniach RS i R/W. Rejestry te umożliwiają również dostęp do pamięci modułu. W zasadzie sterownik wyposażono w dwa rodzaje pamięci: DDRAM (ang. Display Data RAM) i CGRAM (ang. Caracter Generator RAM). W DDRAM (o pojemności 80B) przechowywane są kody znaków aktualnie wyświetlanych. Sposób kodowania w zakresie 0x20 - 0x7F jest zgodny z kodami ASCII. Każdej komórce tej pamięci odpowiada osobna pozycja wyświetlacza. Bez względu na to, z jaką matrycą sterownik współpracuje, pamiętanych jest 80 znaków (1 linia x 80 znaków lub 2 linie x 40 znaków). Jeśli wyświetlacz jest krótszy to pewnym pozycjom w pamięci nie odpowiadają pozycje na wyświetlaczu, co skutkuje brakiem wizualizacji przesłanych znaków.
Drugim rodzajem wbudowanej w sterownik pamięci jest generator znaków, zawiera ona szablony znaków na podstawie, których zachodzi automatyczna konwersja kodów z pamięci DDRAM na odpowiednie kształty znakowe. Większa część pamięci może być tylko odczytywana, jednak początkowe 64 komórki mogą być również zapisywane, co umożliwia użytkownikowi stworzenie ośmiu szablonów znakowych o dowolnym kształcie. Wyświetlacz jest przystosowany do wyświetlania znaków alfabetu rosyjskiego i japońskiego.
Wymiana danych pomiędzy układem HD 44780 a mikrokontrolerem może odbywać się za pośrednictwem ośmio lub czterobitowej magistrali danych. Jednak bez względu na wybraną szerokość interfejsu przesłane do modułu wyświetlającego wartości muszą mieć postać 8-bitową. W związku z tym w trybie 4-bitowym transmisja jednej instrukcji lub danej musi dokonać się w dwóch cyklach - w pierwszym przesyłany jest półbajt starszy a w drugim młodszy.
Programowanie sterownika polega na podawaniu (przesyłaniu) odpowiednich sekwencji sterujących na linie RS, RW i E. Sekwencje przesyłu pojedynczego bajtu do modułu LCD przedstawia rys. 14. Obsługę interfejsu należy przeprowadzić z zachowaniem wymaganych zależności czasowych, które zostały przedstawione na rysunku. Dodatkowo uwzględnić należy min. 37µs przerwy pomiędzy kolejnymi pełnymi sekwencjami.
Rysunek 14. Cykl zapisu pojedynczego bajtu
Podczas cyklu transmisyjnego stan linii RS określa znaczenie aktualnie przesyłanej wartości. Gdy wejście jest w stanie niskim wpisywane dane są interpretowane jako komendy (np. Clear Display, ustalanie adresu CGRAM i DDRAM), natomiast ustawienie stanu wysokiego powoduje interpretowanie wpisywanych danych jako znaki, które są podstawiane w miejsce kursora. Wejście R/W ustawione w stan wysoki umożliwia odczyt danych z wyświetlacza (pamięci DDRAM, licznika adresu, flagi zajętości) natomiast stan niski - zapis. Start transmisji wymaga przejścia linii E ze stanu niskiego do wysokiego i utrzymania jego do końca transmisji. Ważność danych wystawionych na liniach DB7…DB0 potwierdza się opadającym zboczem na linii E, które sygnalizuje również koniec transmisji.
instrukcja |
Linia danych DBx |
opis |
Czas wykonania |
|||||||
|
7 |
6 |
5 |
4 |
3 |
2 |
1 |
0 |
|
|
Czyść wyświetlacz |
|
|
|
|
|
|
|
1 |
Wypełnia pamięć DDRAM znakami spacji i przesuwa kursor oraz okno do pozycji początkowej (adres DDRAM równy zero) |
1,64ms |
Powrót kursora |
|
|
|
|
|
|
1 |
* |
Przesuwa kursor i okno do pozycji początkowej (adres DDRAM równy zero) |
1,64ms |
Ustaw tryb wprowa-dzania |
|
|
|
|
|
1 |
D |
S |
Określa działanie podejmowane po zapisie komórki DDRAM lub CGRAM, D=1: inkrementacja adresu (kursor przesuwa się w prawo), D=0: dekrementacja adresu, S=1: zamiast kursora przesuwa się okno |
40µs |
Steruj wyświetlaczem |
|
|
|
|
1 |
D |
C |
B |
Włącza lub wyłącza niektóre funkcje wyświetlacza, D=1: wyświetlanie włączone, C=1: kursor włączony, B=1: miganie kursora włączone |
40µs |
Przesuń okno lub kursor |
|
|
|
1 |
S |
R |
* |
* |
Przesuwa kursor lub wyświetlane okno o jedną pozycję w wybranym kierunku, S=0: przesuwanie kursora, S=1: przesuwanie okna, R=0: przesuwanie w lewo, R=1: w prawo |
40µs |
Zmień ustawie-nia wyświet-lacza |
|
|
1 |
D |
N |
F |
* |
* |
Określa interfejs i konfiguruje sterownik względem matrycy LCD, D=0: interfejs 4-bitowy, D=1: interfejs 8-bitowy, N=0: wyświetlacz 1-liniowy, N=1: wyświetlacz 2-liniowy, F=0: matryca znakowa 5x8 punktów, F=1: matryca znakowa 5x10 punktów |
40µs |
Zmień dresu CGRAM |
|
1 |
Nowy adres CGRAM |
Ustala aktualny adres pamięci CGRAM, kolejne dane będą zapisywane do pamięci CG |
40µs |
|||||
Zmień adres DDRAM |
1 |
Nowy adres DDRAM |
Ustala aktualny adres pamięci DDRAM, kolejne dane będą zapisywane do pamięci DD (oczywiście przy RS=1) |
40µs |
Tabela 3. Instrukcje sterownika HD44780
Zamontowany na płycie EasyWeb2 wyświetlacz korzysta z jednokierunkowego interfejsu 4-bitowego, utworzonego przez linie LCD (D7…D4), E i RS. Wymusza to oczywiście rezygnację z możliwości odczytu stanu wyświetlacza i jego pamięci, ale zaoszczędza jedno wyprowadzenie mikrokontrolera. Dlatego powyższa część teoretyczna, zawarte w tabeli 3 instrukcje sterownika jak i przedstawione ćwiczenia dotyczą takiego rozwiązania (dlatego instrukcje i opis procesu odczytu rejestrów sterownika zostały pominięte). Informacje o innych trybach pracy można znaleźć w dokumentacji układu HD44780
Po włączeniu zasilania sterownik HD44780 inicjalizuje się samoczynnie - włączany jest 8-bitowy tryb pracy interfejsu, obsługa panelu LCD o jednej linii i matrycy 5x8 punktów, a ekran i kursor pozostają wygaszone.
Opis ćwiczeń
Przed przystąpieniem do wykonania ćwiczeń, na podstawie schematu modułu EasyWeb2, studenci zobowiązani są do ustalenia sposobu podłączenia i trybu pracy modułu wyświetlacza.
Każdy program obsługujący wyświetlacz powinien zawierać procedurę jego inicjalizacji. Użycie jej ma na celu zabezpieczenie się przed niepoprawną inicjalizacją automatyczną po włączeniu zasilania. Dobrym zwyczajem jest również wykorzystywanie jej do czyszczenia zawartości modułu. Inicjalizacja programowa polega na trzykrotnym przesłaniu instrukcji konfigurującej wyświetlacz do pracy z interfejsem 8-bitowym, a następnie wysłaniu komendy ustawiającej tryb 4-bitowy (komenda ustalająca tryb interfejsu została tak zaimplementowana, że jest dostępna w obu trybach pracy tego interfejsu). Na zakończenie, już w trybie 4-bitowym należy ustalić: ile linii ma wyświetlacz, jak ma działać kursor i wyczyścić ekran.
Algorytm procedury inicjalizującej sterownik jest następujący:
Odczekaj minimum 40 ms od chwili włączenia zasilania
Prześlij instrukcję o wartości 0x3* i odczekaj minimum 4,1 ms
Dwukrotnie prześlij instrukcję 0x3*, każdorazowo odczekując minimum 100 µs
Prześlij instrukcję o wartości 0x2* (włącza interfejs 4-bitowy)
Prześlij ponownie instrukcję konfigurującą (oba półbajty)
Prześlij pozostałe wymagane instrukcje.
Zastosowany jednokierunkowy interfejs modułu uniemożliwia odczyt bitu zajętości (BF - Busy Flag) z rejestru, ControlRD, dlatego należy pamiętać o stosowaniu wymaganych opóźnień.
Ćwiczenie A
Stworzyć a następnie uruchomić w module EasyWeb2 program wyświetlający na panelu LCD napis: „Hello Word” w jednej linii o rozdzielczości 5x10 punktów.
Ćwiczenie B
Stworzyć program, który po każdorazowym naciśnięciu przycisku B1wyprowadza kolejne znaki, jakie mogą być prezentowane przez wyświetlacz poczynając od znaku spacji (0x20). Pokaz odbywać ma się w trybie dwu liniowym, o rozdzielczości znaków 5x8 punktów.
Ćwiczenie C
Napisać program, który po wprowadzeniu tekstu „poniedziałek 27 maja imieniny: Jana, Iwony”, będzie go automatycznie obracał tak, aby można było go w całości odczytać. Tekst ma być wyświetlany w jednej linii.
5.4 Lab 4: Transmisja szeregowa poprzez UART.
Cel zajęć
Zapoznanie się z możliwościami komunikacji mikrokontrolera ze środowiskiem zewnętrznym za pośrednictwem interfejsu szeregowego. Pisanie i modyfikowanie programów dla mikrokontrolera MSP430, umożliwiających komunikowanie się z komputerem PC. Zdobycie umiejętności stosowania przerwań w tworzonych programach. Dodatkowo studenci poznają budowę modułu zegara oraz sposoby obniżania mocy pobieranej przez mikrokontroler.
Wiadomości teoretyczne
Są dwa rodzaje transmisji szeregowej: synchroniczna i asynchroniczna. Przy transmisji synchronicznej równolegle z bitami informacji przesyłany jest sygnał synchronizujący w takt, którego odbiornik odczytuje stan linii danych w momentach odpowiadających ważnym wartościom kolejnych bitów. Bity danych mogą być dodatkowo uzupełnione bitem kontroli poprawności. Synchronizację pracy odbiornika uzyskuje się jednym ze sposobów:
przebieg zegarowy jest wysyłany dodatkową linią, rozwiązanie to zapewnia łatwość synchronizacji ale wymaga dodatkowego przewodu.
Przebieg zegarowy jest zakodowany w samym przebiegu danych (np.: kodem Menchester.), wadą tego sposobu jest skomplikowany układ sterowania.
Asynchroniczny sposób przesyłania danych nie wymaga przesyłania przebiegu synchronizującego. Zakłada się, że zegary odbiornika i nadajnika mają taką samą częstotliwość. Ponieważ w rzeczywistości częstotliwości te nieznacznie się różnią, transmisja możliwa jest tylko w krótkich odcinkach czasu. Dlatego przesyłane są ciągi małych porcji danych tzw. ramki (ang. frame) lub SDU (ang. Serial Data Unit). Stosowane są sekwencje bitów o różnej długości, jednak każda musi zawierać bit startu, bity danych i przynajmniej jeden bit stopu. Najbardziej popularnym formatem transmisji szeregowej typu NRZ jest transmisja ramkami 10-bitowymi składającymi się z jednego bitu startu, ośmiu bitów danych i jednego bitu stopu. Dla poprawienia odporności transmisji na zakłócenia, do danych często dodawany jest bit parzystości lub nieparzystości w wyniku, czego otrzymujemy równie popularny format 11-bitowy. Zasadę działania transmisji szeregowej asynchronicznej przedstawia rysunek 15.
Nadajnik i odbiornik mają własne zegary nastrojone na tę samą częstotliwość. Zegar odbiornika jest uruchamiany w chwili wykrycia bitu startu i zatrzymywany przez bit stopu. Kolejne bity ramki wysyłane są w chwilach pojawiania się narastających zboczy zegara nadajnika, natomiast odczytywane są wraz z opadającymi zboczami przebiegu zegarowego odbiornika. Celem podwyższenia dokładności synchronizacji generatora odbiornika jest on często projektowany na częstotliwości większe niż częstotliwość transmisji. Pomiędzy kolejnymi transmisjami wyjście nadajnika jest utrzymywane w stanie wysokim.
Mikrokontroler MSP430F149 wyposażony został w dwa identyczne porty USART obsługujące sprzętowo transmisję synchroniczną i asynchroniczną. Właściwości modułów i ich schemat blokowy z krótkim opisem znajduje się w rozdziale trzecim niniejszej pracy. Zgodnie z tematem laboratorium dalsze wiadomości dotyczyć będą sposobu konfiguracji i pracy modułu w trybie asynchronicznym. Wykaz rejestrów związanych z obsługą interfejsu znajduje się w firmowej dokumentacji technicznej.
USART resetowany jest sygnałem PUC lub przez ustawienie bitu SWRST w rejestrze sterującym UxCTL. Bit ten jest również ustawiany automatycznie przez sygnał PUC i utrzymuje moduł w stanie RESET, w którym bity: URXIEx, UTXIEx, URXIFGx, RXWAKE, TXWAKE, EXERR, BRK, PE, OE i FE zostały wyzerowane, natomiast bity UTXIFGx i TXEPT ustawione. Aktywacja odbiornika i nadajnika (URXEx, UTXEx) nie jest zmieniana przez SWRST.
Przygotowanie interfejsu do transmisji polega na dokonaniu odpowiednich wpisów w rejestrach sterujących i powinna przebiegać wg następującego schematu:
Ustawić bit SWRST
Inicjalizować rejestry USART (ustalić format ramki i prędkość transmisji)
Odblokować żądany układ odbiornik/nadajnik po przez ustawienie odpowiednich bitów w rejestrze MEx
Wyprowadzić USART ze stanu RESET poprzez wyczyszczenie bitu SWRST
Uaktywnić przerwania w rejestrze IEx (opcjonalnie)
Szybkość transmisji ustalamy programując generator BRG (ang. Baud Rate Generator) poprzez wpisanie do rejestrów UxBR1, UxBR0 wyliczonej części całkowitej współczynnika N a w przypadku otrzymania wartości niecałkowitej (wpisana) również bitów kompensujących (mi) do rejestru modulatora UxMCTL. Liczba N jest podzielnikiem częstotliwości wybranego zegara źródłowego (BRCLK) w wyniku podziału, której otrzymuje się żądaną prędkość transmisji (ang. baud rate).
Jednak rzeczywista wartość podzielnika możliwa do wpisania w rejestry generatora jest następująca:
gdzie: UxBR - 16-bitowa zawartość rejestrów UxBR0 i UxBR1
i - pozycja bitu w ramce;
n - całkowita liczba bitów w ramce
mi - wartość bitu modulacji (0,1)
Powoduje to, że możliwa do zaprogramowania szybkość transmisji we większości przypadków jest bardzo zbliżona do oczekiwanej i wyraża się wzorem:
Sekwencja zer i jedynek wpisywana do rejestru modulatora ustalana jest na podstawie minimalizacji błędów czasowych wyliczanych dla poszczególnych bitów transmitowanej ramki.
Moduł USART przeprowadza transmisję posługując się nadajnikiem i odbiornikiem, które sterują liniami UTXDx i URXDx. Wpis danych do rejestru bufora UxTXBUF rozpoczyna proces nadawania. Następnie ładowane są one do rejestru przesuwnego, w kolejnym cyklu po ewentualnym jego opróżnieniu. Gotowość przyjęcia następnej ramki do wysłania jest sygnalizowana ustawieniem flagi UTXIFGx i generowane jest przerwanie (oczywiście, jeśli bity UTXEx i GIE są ustawione). Flaga gotowości jest czyszczona automatycznie w wyniku obsłużenia żądania przerwania lub dokonania wpisu do rejestru.
Odebrane szeregowo dane najpierw są kompletowane w rejestrze przesuwnym, a następnie przekazywane do rejestru UxRXBUF. Flaga przerwania URXIFGx jest ustawiana za każdym razem, gdy skompletowana ramka jest ładowana do bufora, a w przypadku ustawienia bitów URXIEx i GIE, wywoływane jest również przerwanie. Obsłużenie przerwania lub odczyt bufora automatycznie resetuje flagę. Moduł USART automatycznie wykrywa i sygnalizuje odpowiednimi flagami błędy: ramki, równości, przepełnienia i sekwencję przerwy.
Opis ćwiczeń
Poniższe ćwiczenia demonstrują obsługę układu USART w trybie asynchronicznym (UART) dwoma metodami, bez wykorzystywania przerwań i z ich wykorzystaniem. Zegarem źródłowym dla generatora prędkości będzie przebieg wytwarzany przez oscylator LFXT1 pracujący w trybie XT z rezonatorem kwarcowym 8 MHz. W ćwiczeniu drugim oprócz sposobu wykorzystania przerwań, pokazany jest sposób obniżania poboru mocy pobieranego przez mikrokontroler, poprzez wprowadzanie go w jeden ze stanów oszczędnych podczas przerw w transmisji. Dlatego do wykonania ćwiczeń niezbędne są wiadomości dotyczące modułu zegara i trybów oszczędnej pracy mikrokontrolera. Dostępne są one w rozdziale trzecim niniejszej pracy.
Ćwiczenie A
Stworzyć program ilustrujący transmisję szeregową asynchroniczną, za pośrednictwem łącza RS232, między modułem USART0 mikrokontrolera MSP430 a emulatorem terminala pracującym na komputerze PC. Program ma wysłać wiadomość o treści „Hello!!! >> wyślij tekst”. Następnie odebrane małe litery tekstu zamieniać na wielkie i odsyłać do terminala. Należy ustalić następujące parametry transmisji: szybkość transmisji - 115200 bodów, format ramki - 8N1, przy konfiguracji modułu zegara MCLK=ACLK=LFXT1=8MHz.
Wskazówka.
Po sygnale PUC moduł zegara używa generatora DCOCLK dla wytworzenia przebiegu MCLK, oscylator LFXT1 pracuje w trybie LF, a XT2 jest wyłączony. Oczywiście w razie potrzeby CPU może być taktowane również ze źródła LFXT1 lub XT2. Procedura przełączania oscylatora kwarcowego w tryb wysokiej częstotliwości (HF) lub uruchamiania XT2, jest następująca:
Włącz żądany oscylator lub tryb
Wyczyść flagę OFIFG
Odczekaj minimum 50 µs
Testuj flagę OFIFG, jeśli jest ustawiona powtarzaj powyższe kroki.
Ćwiczenie B
Zmodyfikować poprzedni program tak, aby odbiór ramki odbywał się przy wykorzystaniu przerwania od odbiornika, a w przerwach transmisji mikrokontroler znajdował się w stanie obniżonego poboru mocy LPM3. Zmienić parametry transmisji i format ramki zgodnie z poleceniami prowadzącego.
Wskazówka
Energooszczędne tryby pracy mikrokontrolera (LPM0…LPM4) konfigurowane są za pośrednictwem rejestru statusu (SR). W pliku nagłówkowym „msp430x14x” są zdefiniowane wymagane sekwencje wartości bitów dla poszczególnych stanów. Wprowadzanie mikrokontrolera w obniżony pobór prądu ułatwia funkcja _BIS_SR(LPMn_bits). „Wyrwanie” mikrokontrolera z trybu oszczędnego odbywa się w wyniku wygenerowania dowolnego przerwania, przy obsłudze, którego możliwe jest przywrócenie trybu aktywnego poprzez wywołanie funkcji _BIC_SR_IRQ(LPMn_bits), gdzie n - numer trybu.
5.5 Lab 5: Programowanie układów czasowo / licznikowych.
Cel zajęć
Zapoznanie się z możliwościami modułu Timer_A mikrokontrolera MSP430F149. Zdobycie umiejętności posługiwania się blokiem skonfigurowanym w funkcji: licznika, czasomierza, porównywania i przechwytywania oraz korzystania z mechanizmu przerwań przydzielonego modułowi. Zajęcia również podsumowują i utrwalają wiedzę zdobytą na poprzednich ćwiczeniach.
Wiadomości teoretyczne
Podczas współpracy mikrokontrolera z otoczeniem w czasie rzeczywistym często zachodzi potrzeba wykonania postawionych zadań w ściśle określonych momentach, wymaga to używania mechanizmu dokładnego odmierzania czasu. Najprostsza metoda polegająca na wykonaniu przez procesor określonej liczby rozkazów realizuje poprawnie postawione zadanie, ale ma podstawową wadę. Uwikłanie procesora w pętle opóźniające uniemożliwia realizowanie w tym czasie innych procedur, co skutkuje stratą czasu i energii. Znacznie lepszym rozwiązaniem jest powierzenie tego zadania specjalizowanym blokom nazywanymi licznikami lub układami czasowymi (ang. timers). W najprostszej wersji są to 16-bitowe liczniki mogące zliczać wewnętrzne impulsy zegarowe, spełniając funkcję czasomierza (ang. timer). Mogą też zliczać impulsy zewnętrzne doprowadzone do dedykowanych wejść, w tym przypadku spełniają funkcję licznika (ang. counter).
Moduł czasowy bardzo często wyposażany jest w zespoły rejestrów CAP/COM (ang.capture/compare) współpracujące z licznikiem, umożliwiają one pracę modułu w trybie porównywania (generatora) i przechwytywania (rejestracji). Funkcja rejestracji ma za zadanie określić względny czas wystąpienia zdarzenia zewnętrznego, sygnalizowanego przez wybrane zbocze impulsu zewnętrznego. Po wystąpieniu, którego zawartość licznika jest przepisywana do rejestru zatrzaskowego. Równocześnie układ ustawia flagę zajścia zdarzenia i ewentualnie generuje przerwanie. Odczyt rejestru przez CPU musi wystąpić przed wystąpieniem kolejnego zdarzenia, ponieważ jego zawartość zostanie nadpisana.
Rysunek 16. Konfiguracja licznika w funkcji rejestratora zdarzeń.
Idee pracy prostego rejestratora przedstawia rys. 16. Funkcja rejestracji jest bardzo pomocna przy określaniu częstotliwości przebiegu okresowego lub szerokości impulsów. W pierwszym przypadku rejestruje się dwa następujące po sobie zbocza o tej samej polaryzacji, natomiast w drugim - o różnej.
Rysunek 17 przedstawia zasadę pracy modułu licznika w konfiguracji programowanego generatora impulsów, opierającego się na funkcji porównywania. CPU wpisuje do rejestru komparatora liczbę określającą chwilę wygenerowania impulsu. W momencie wykrycia przez komparator zrównania się zawartości licznika i rejestru, generowany jest sygnał wyjściowy, ustawiany bit statusu i ewentualnie generowane jest przerwanie, jeśli zostało zdjęte jego maskowanie.
Większość modułów licznikowych wykorzystując funkcję „compare” może pracować jako generator fali prostokątnej o programowanym współczynniku wypełnienia - PWM (ang. Pulse Width Modulation). W tej konfiguracji są wykorzystywane dwa rejestry, których zawartość opisuje format sygnału, tj. jego okres i szerokość impulsu.
Rysunek 17. Licznik w układzie programowanego generatora inpulsów
Mikrokontroler MSP430F149 posiada dwa układy licznikowe, oznaczone jako Timer_A3 i Timer_B7. Wyposażono je w 16-bitowe liczniki/czasomierze i odpowiednio, trzy i siedem bloków capture/compare, każdy z nich dysponuje programowalnym układem wyjściowym. Więcej informacji na temat ich organizacji i właściwości znajduje się w rozdziale trzecim.
Opis ćwiczeń
Poniższe ćwiczenia demonstrują użycie układu Timer_A w trybie czasomierza, porównywania i przechwytywania. Pokazują również sposób korzystania z dedykowanych modułowi przerwań.
Ćwiczenie A
Stworzyć program powodujący miganie diody status w ten sposób, aby LED świeciła dokładnie przez jedną sekundę i była zgaszona również przez jedną sekundę. W ćwiczeniu wykorzystać licznik Timer_A w funkcji porównywania i wektor przerwania dedykowany modułowi CCR0. Wykorzystać stan energooszczędny LPM3.
Ćwiczenie B
Problem przedstawiony w ćwiczeniu poprzednim zrealizować w oparciu o licznik pracujący trybie „Up Mode”, wykorzystując przerwanie generowane w wyniku przepełnienia licznika (flaga TAIFG).
Ćwiczenie C
Stworzyć program symulujący „maszynę” dokonującą losowania numerów w zakładach „TOTO LOTKA”. Losowanie kolejnych liczb odbywa się we wyniku naciśnięcia przycisku (żółtego), a jego wynik przedstawiany jest na wyświetlaczu LCD.
Wskazówki
Zadanie C zrealizować w oparciu o funkcję „przechwytywania”, wyzwalanego programowo.
Wykorzystać przydatne funkcje stworzone na poprzednich laboratoriach.
5.5 Lab 6: Przetwarzanie A/C
Cel zajęć
Zapoznanie się z budową, zasadą działania i obsługą bloku przetwornika analogowo-cyfrowego wbudowanego w mikrokontroler. Wykonanie zaproponowanych ćwiczeń ma ułatwić nabycie podstawowych umiejętności w programowaniu przetworników A/C.
Wiadomości teoretyczne
W zastosowaniach praktycznych mikrokontroler często steruje przebiegiem procesu technologicznego w zależności od wielkości analogowych (nie zawsze elektrycznych). Zamiana ich na postać cyfrową sprowadza się do przetworzenia odpowiadającego im napięcia, uzyskanego z różnego rodzaju czujników na odpowiadającą mu miarę liczbową. W celu zintegrowania przetwarzania sygnałów w jednym układzie mikrokontrolery wyposażane są w przetworniki A/C.
Wbudowany w MSP430F149 moduł przetwornika A/C dokonuje konwersji w oparciu o metodę sukcesywnej aproksymacji (SAR). Jej idee przedstawia rys. 18. Polega ona na kompensowaniu napięcia przetwarzanego za pomocą odpowiednio generowanego sygnału kompensującego tak, aby ich różnicę doprowadzić do zera.
Rysunek 18. Schemat blokowy przetwornika A/C opartego o metodę SAR
Proces przetwarzania zaczyna się od „zapamiętania” w kondensatorze pobranej próbki przetwarzanego napięcia. Później wartość ta będzie porównywana z napięciami wystawianymi w n krokach przez przetwornik cyfrowo-analogowy, gdzie n jest liczbą bitów cyfrowej wartości przetwarzanego napięcia. W pierwszym kroku układ sterujący ustawia najstarszy bit rejestru aproksymacyjnego a pozostałe bity pozostają wyzerowane. Powoduje to powstanie na wyjściu przetwornika C/A napięcia równego połowie pełnego zakresu napięcia odniesienia. Jeżeli napięcie z C/A jest mniejsze niż napięcie przetwarzane, na najbardziej znaczącej pozycji zostaje zapamiętana jedynka, jeżeli jest większe - zapamiętywane jest zero. W następnym kroku układ sterujący generuje jedynkę na kolejnej pozycji i powtarza opisaną powyżej procedurę w celu ustalenia wartości bitu. W ten sposób wykonywane są wszystkie kroki aż do najmniej znaczącej pozycji.
Budowa i opis bloku przetwornika A/C, wbudowanego w mikrokontroler MSP430F149 przedstawiony została w rozdziale trzecim niniejszej pracy.
Opis ćwiczeń
Ćwiczenie A
Stworzyć program umożliwiający cyfrowy pomiar wewnętrznej temperatury mikrokontrolera. Pomiar powinien odbywać się, co 5 sekund a jego wynik z dokładnością jednego miejsca po przecinku wyświetlać się na panelu LCD.
Ćwiczenie B
Napisać aplikację woltomierza, mierzącego napięcie występujące na linię portu P6.0. Wynik pomiaru powinien być średnią czterech kolejnych próbek i uaktualniać się, co 1 sekundę. Wynik wyświetlić z dokładnością 0.1V na panelu LCD.
Wskazówki
Rdzeń ADC konwertuje analogową wartość napięcia do 12-bitowej reprezentacji cyfrowej wg zależności:
gdzie: Vin - napięcie kanału wejściowego, natomiast VR+ i VR- - górne i dolne napięcie odniesienia.
Wbudowany w mikrokontroler przetwornik w zakresie -50 … 100°C ma charakterystykę liniową, opisaną zależnością:
gdzie: VTEMP - napięcie wytwarzane przez czujnik w temperaturze TC stopni Celsjusza. Podłączony jest do kanału 10, a jgo czas próbkowania nie może być mniejszy niż 30µs.
Do ustalenia częstotliwości pomiarów należy wykorzystać Tmer_A, natomiast start konwersji wywoływać na drodze programowej (bit ADC12SC).
6. Mikroserwer TCP/IP
6.1 Wprowadzenie
Łączność Internetowa otwiera wiele nowych możliwości, również dla systemów wbudowanych. Przede wszystkim w przypadku systemów pomiarowych i monitorujących daje zdalny dostęp do informacji wytwarzanych przez urządzenia. Natomiast w systemach sterujących można dokonywać nastaw, odległych urządzeń, nie mówiąc o tak trywialnych operacjach, jak ich włączanie lub wyłączanie. Dołączenie urządzenia do sieci komputerowej umożliwia jego serwisowanie na odległość tzn. pracujące u klienta urządzenie jest zdalnie nadzorowane przez serwis producenta a jego oprogramowanie systemowe (ang. firmware) może być systematycznie uaktualniane.
Obecnej tendencji budowania urządzeń z interfejsem sieciowym i obsługą stosu TCP/IP sprzyja wyposażanie nawet najtańszych a więc najpopularniejszych mikrokontrolerów w coraz większe zasoby. Układy te posiadają teraz znaczne ilości pamięci i są coraz szybsze. Umożliwia to implementację stosu protokołów Internetowych bez ryzyka znacznego ograniczenia zasobów dla właściwej aplikacji.
Rdzeń modułu EasyWeb2 stanowi opracowany przez firmę Texas Instruments mikroserwer TCP/IP. Dzięki temu płyta może ilustrować aspekty współpracy urządzeń elektronicznych z siecią Ethernet/Internet. Trudno by było pominąć i odpowiednio nie przetestować tak ważnej właściwości w proponowanym zestawie ćwiczeń. Dlatego ostatnie laboratorium realizowane w wymiarze dwóch zajęć, poświęcone zostało temu zagadnieniu. Ze względu na to, że temat ćwiczeń obejmuje głównie przedmiot „Sieci komputerowe”, a zakres wiadomości niezbędnych do wykonania ćwiczeń jest szeroki, zagadnieniu temu został poświęcony oddzielny rozdział.
6.2 Struktura oprogramowania systemu sieciowego
„Międzynarodowa Organizacja Normalizacji” (ang. International Organization for Standardization - ISO) opracowała wzorcowy „Model łączenia systemów otwartych” (ang. Open System Interconnetion). Według niego proces transmisji danych został podzielony na siedem etapów zwanych warstwami. Wyodrębniają one ze złożonego zagadnienia komunikacji pewne niezależne zadania, które mogą być rozwiązane przez wydzielone układy sprzętowe lub pakiety oprogramowania. Pojęcie warstwy nie jest tożsame z pojęciem protokołu, ponieważ zadania danej warstwy mogą być realizowane przez kilka różnych protokołów. Oprogramowanie protokołów zrealizowane zgodnie z modelem warstwowym ma również strukturę warstwową, podzielone jest na moduły, z których każdy odpowiada jednej warstwie. Tak skonstruowane oprogramowanie zwane jest stosem.
Przeznaczenie poszczególnych warstw modelu OSI jest następujące:
Warstwa 1: fizyczna - odpowiada za przesyłanie strumieni bitów, określa parametry amplitudowe i czasowe przesyłanego sygnału a także fizyczny kształt i rozmiar łączy.
Warstwa 2: łącza danych - określa sposób organizowania ramek i transmitowania ich przez sieć wg adresu fizycznego, odpowiada również za wykrywanie i korygowanie błędów powstałych podczas fizycznej transmisji danych.
Warstwa 3: sieci - definiuje sposób adresowania i przesyłania pakietów w sieci, ustala fizyczną drogę przepływu danych pomiędzy węzłami.
Warstwa 4: transportu - przesyła pakiety kanałem stworzonym przez warstwę sieci, odpowiedzialna jest za końcową integralność transmisji.
Warstwa 5: sesji - określa parametry sprzężenia użytkowników, zapewnia aplikacjom realizację wymiany danych.
Warstwa 6: prezentacji - odpowiedzialna jest za poprawną reprezentację danych.
Warstwa 7: aplikacji - zapewnia programom użytkowym usługi komunikacyjne (metody dostępu do środowiska OSI).
Rysunek 19 ilustruje idee działania oprogramowania warstwowego. Opiera się ona na świadczeniu usług warstwie wyższej przez niższą. Dane przekazywane są od wierzchołka stosu przez kolejne warstwy, do warstwy fizycznej, która przesyła je przez sieć w postaci ciągu bitów do odległego hosta. Na każdym etapie modelu OSI dane są „opakowywane” w kolejne informacje kontrolne związane z operacjami wykonywanymi w poszczególnych warstwach, przy czym informacje z poprzednich warstw pozostają nienaruszone, a jedynie doposażone są w nagłówek zawierający dodatkowe dane kontrolne, jest to tzw. enkapsulacja. Przy odbieraniu danych zachodzi proces odwrotny tzn. w miarę przesuwania się informacji w górę stosu następuje stopniowe jej „rozpakowywanie” (dekapsulacja). W tak zorganizowanym przepływie danych każda kolejna warstwa musi jedynie znać format danych akceptowany przez warstwę niższą, opisany w tzw. protokole wymiany danych. Oprócz komunikacji rzeczywistej, która odbywa się na poziomie tylko warstwy fizycznej, między pozostałymi odpowiadającymi sobie warstwami, a dokładnie ich protokołami zachodzi komunikacja wirtualna (linia przerywana na rysunku).
Rysunek 19. Transmisja danych między warstwami modelu OSI.
6.3 Stos protokołów TCP/IP
Protokół TCP/IP jest programowym protokołem komunikacji sieciowej, umożliwiającym realizację zadań komunikacji niezależnie od sprzętu. Termin TCP/IP określa cały zestaw (ze względu na ułożenie zwany stosem) protokołów udostępniających różnorodne usługi sieciowe i oparty jest na wymienionych w nazwie protokołach. Zbiór ten po raz pierwszy umożliwił realizację intersieci. Jest używany w wielu prywatnych intersieciach, ale przede wszystkim stanowi podstawę Internetu.
Struktura zestawu protokołów TCP/IP najczęściej opisywana jest za pomocą cztero-warstwowego modelu DoD (ang. Departament of Defense). Jego założenia pod względem organizacji warstw są zbliżone do modelu OSI, jednak ilość warstw jest mniejsza i lepiej odzwierciedla prawdziwą strukturę Internetu. Porównanie obu modeli wraz z niektórymi protokołami Internetu przedstawia rysunek 20.
Rysunek 20. Warstwowy model TCP/IP.
Podobnie jak w modelu OSI, dane wysyłane przez programy aplikacyjne są przekazywane w dół stosu, kiedy mają być wysyłane przez sieć i w górę stosu przy odbiorze. W miarę pokonywania kolejnych warstw, w zależności od kierunku następuje enkapsulacja lub dekapsulacja. Każda warstwa ma swoją terminologię do określania danych przez nią przetwarzanych, którą z uwzględnieniem protokołu warstwy transportu przedstawia tabela 4.
Warstwa |
TCP |
UDP |
Aplikacji |
Strumień |
Wiadomość |
Transportowa |
Segment |
Pakiet |
Internet |
Datagram |
|
Dostępu do sieci |
Ramka |
Tabela 4. Nazewnictwo jednostek danych dla warstw modelu TCP.
Zadania poszczególnych warstw modelu TCP są następujące:
Warstwa dostępu do sieci - przekazuje dane poprzez fizyczne połączenie między węzłami sieci lokalnej, jest odpowiednikiem złączenia warstwy fizycznej z warstwą łącza danych w modelu OSI.
Warstwa Internet - organizuje ruch datagramów między poszczególnymi sieciami fizycznymi połączonymi w intersieć, odpowiada za dostarczenie pakietu do dowolnego węzła intersieci, umożliwia również przesyłanie komunikatów sterujących pracą sieci.
Warstwa transportowa - określa sposób realizacji usług niezawodnego przesyłania danych, zapewnia komunikację między jednym programem użytkownika a drugim, reguluje przepływ informacji.
Warstwa aplikacji - protokoły tej warstwy dostarczają użytkownikom różnych usług sieciowych. Warstwa ta łączy w sobie zadania warstwy 5, 6 i 7 modelu OSI.
6.4 Podstawowe standardy i protokoły
Ethernet
W oparciu o ideę działania sieci radiowej ALOHANET w 1970 roku firma Xerox opracowała technologię Ethernet, która od 1985 funkcjonuje jako standard IEEE 802.3. Obecnie stanowi podstawę budowy wszelkich sieci lokalnych. Obejmuje on specyfikację kabli oraz przesyłanych nimi sygnałów. Opisuje również format ramek i protokoły drugiej warstwy modelu OSI. Opiera się na idee węzłów wymieniających między sobą komunikaty (ramki) poprzez wspólne medium. Podstawowe cechy technologii Ethernet to:
Adresowanie - każde urządzenie nadające/odbierające ma, przyznany przez producenta jednoznaczny adres, zwany sprzętowym lub adresem MAC (ang. Medium Access Control). Jest to liczba 48 bitowa przedstawiona w postaci sześciu dwucyfrowych liczb, zapisanych w systemie heksadecymalnym, rozdzielonych dwukropkami lub myślnikami. Pierwsze trzy bajty identyfikują producenta, pozostałe egzemplarz urządzenia np. 00:AA:00:67:EA:5D. Adres składający się z 48 jedynek (FF:FF:FF:FF:FF:FF) jest zdefiniowany jako rozgłoszeniowy.
Topologia - klasyczna sieć ma topologię magistrali, ale z czasem dla poprawienia niezawodności dopuszczono topologię gwiazdy.
Media - można stosować różne rodzaje mediów transmisyjnych, do najczęściej stosowanych należą: 10Base2 (sieć cienka), 10Base5 (sieć gruba), 10BaseT (skrętka).
Metoda dostępu do medium - CSMA/CD (ang. Carrier Sense, Multiple Access with Collision Detection). Polega ona na prowadzeniu ciągłego nasłuchu stanu łącza, jeżeli jest wolne nadawca może rozpocząć nadawanie. W przypadku wystąpienia kolizji, nadawca posługując się algorytmem opóźnienia czasowego próbuje retransmisji.
Struktura pakietu - pakiet IDEE 802.3 składa się z ramki poprzedzonej preambułą, która umożliwia synchronizowanie odbiornika z odbieranym sygnałem i sygnalizuje początek ramki. Rozpoczyna się ona adresami MAC odbiorcy i nadawcy, następne jest pole „Długość/Typ”. W zależności od wartości określa ono długość bloku danych (<1500) lub kod typu protokołu warstwy wyższej. Pole danych nie może być krótsze niż 46 oktetów, jeśli ilość danych jest mniejsza dodaje się uzupełnienie tzw. pole PAD (ang. padding). Rysunek 11 przedstawia strukturę pakietu, rozmiar poszczególnych pól podany jest w oktetach.
Rysunek 21. Format ramki sieci Ethernet.
Protokół IP
Podstawowym protokołem warstwy Internet jest protokół IP (ang. Internet Protocol). Zapewnia transport bloków danych w datagramie między oddalonymi urządzeniami (węzłami) w Internecie. Jest protokołem bezpołączeniowym tzn. nie ustanawia połączenia i nie sprawdza gotowości drugiego urządzenia do odbioru danych. Nie posiada również mechanizmów wykrywania i naprawy błędów transmisji, co czyni go protokołem niepewnym.
Protokół IP realizuje następujące zadania:
Definiuje schemat adresowania, który umożliwia wyższym warstwom protokołów i programom użytkowym komunikację poprzez różnego rodzaju sieci bez względu na różnice w adresach sprzętowych.
Określa format i znaczenie poszczególnych pól datagramu.
Wyznacza trasy poruszania się datagramów w sieci Internet (ang. routing).
Zapewnia fragmentację tzn. podział wysyłanych datagramów na mniejsze części zwane fragmentami, jeżeli przekraczają one maksymalną ilość danych, jaka mieści się w ramce sieci (ang. Maximal Transfer Unit - MTU), do której mają trafić, a po dotarciu do celu umożliwia ich połączenie (defragmentację).
Protokół IP wymaga, aby każdy węzeł miał przypisany 32-bitowy jednoznaczny numer zwany adresem IP lub adresem internetowym. Podzielony on jest na dwie części: prefiks i sufiks. Pierwsza część adresu identyfikuje sieć fizyczną, do której należy węzeł, natomiast druga, konkretny węzeł tej sieci. Ze względu na czytelność przyjęto podawać adres IP w tzw. notacji dziesiętnej z kropkami (ang. dotted quad notation). W zapisie tym każda 8-bitowa część 32-bitowej liczby jest wyrażona jako wartość dziesiętna, zaś kropka separuje poszczególne części np. 124.55.4.6. Początkowo granicę między prefiksem a sufiksem określano za pomocą tzw. klas adresów IP, które dzieliły przestrzeń adresową na pięć klas oznaczonych jako A, B, C, D i E, z których na adresowanie węzłów przeznaczono pierwsze trzy (A, B, C) zwane klasami pierwotnymi. Klasę adresu, a tym samym granicy między prefiksem a sufiksem, ustalano na podstawie kilku pierwszych bitów. W miarę zwiększania się liczby użytkowników podłączonych do Internetu wprowadzono nowy system adresowania zwany bezklasowym routowaniem międzydomenowym. Wprowadził on pojęcie maski sieci. Jest to również liczba 32-bitowa i określa ilość bitów, które są interpretowane jako numer podsieci. Podsieć odpowiada za dostarczanie datagramów do pewnego zakresu adresów IP. Funkcjonalnie jest rozszerzeniem pojęcia podziału pól bitowych zastosowanych w podziale na klasy. Jednak część sieciowa jest teraz rozszerzona na bity hosta.
Protokół komunikatów sterujących Internetu - ICMP
Protokół ICMP (Internet Control Message Protocol) należy do warstwy Internetu i jest zintegrowany z protokołem IP. Definiuje on komunikaty powiadamiające o błędach w pracy protokołu IP i komunikaty informacyjne. Przesyłane są one w polu danych datagramu.
Do podstawowych zadań protokołu ICMP należy:
Sterowanie przepływem datagramów.
Raportowanie o braku możliwości dostarczenia datagramu.
Przekierowywanie tras.
Testowanie osiągalności odległego hosta.
Powiadamianie o usunięciu datagramu z powodu wyczerpania limitu „czasu życia”.
Informowanie zainteresowanych hostów o masce obowiązującej w danej podsieci.
Kontrolny protokół ICMP oprócz obsługi sytuacji awaryjnych umożliwia również uzyskiwanie informacji o strukturze sieci. Bardzo często pomocny jest przy rozwiązywaniu problemów sieciowych, zwłaszcza mechanizmy dostępne po przez polecenia „ping” i „tracerout” zaimplementowane w większości sieciowych systemów operacyjnych są chętnie wykorzystywane.
Protokół odwzorowywania adresów - ARP
Adresy IP funkcjonują na poziomie oprogramowania. Sprzęt sieciowy nie interpretuje tego sposobu adresowania, a więc nie jest wstanie, na jego podstawie zlokalizować adresowane urządzenie. Ramki w sieciach lokalnych podróżują w oparciu o adresy sprzętowe i muszą zostać w nie zaopatrzone przed wysłaniem. Zachodzi, więc konieczność przekształcenia adresów wirtualnych (IP) na adresy fizyczne (MAC). Operację tę umożliwia protokół ARP (ang. Address Resolution Protocol), który niemal zawsze służy do odwzorowywania 32-bitowych adresów IP na 48-bitowe adresy Ethernetu. Definiuje on dwa podstawowe rodzaje komunikatów: pytanie i odpowiedz. Umieszczone w ramce i wysłane na adres rozgłoszeniowy pytanie jest prośbą kierowaną do węzłów sieci fizycznej o porównanie zawartego w nim adresu z własnymi, a w przypadku wykrycia zgodności, odesłania odpowiedzi zawierającej poszukiwany adres fizyczny (MAC). Każdorazowe odwzorowywanie adresu metodą zapytań zwiększa ruch w sieci i jest bardzo nieefektywne. Dlatego uzyskane informacje z zapytań są gromadzone w pamięci podręcznej i wykorzystywane przy przesyłaniu kolejnych pakietów. Protokół ARP specyfikuje format komunikatów, ale nie określa szczegółów adresowania, podając tylko sposób ich ustalania w zależności od konkretnej techniki sieciowej. Dzięki temu ARP może być użyty do odwzorowywania dowolnych adresów protokołowych na dowolne adresy sprzętowe.
Protokół kontroli transmisji - TCP
Protokół TCP (ang. Transmission Control Protocol) zapewnia programom użytkowym niezawodną (bez utraty danych i duplikatów), połączeniową i w pełni dwukierunkową usługę transportu strumieniami. Umożliwia ona dwu procesom warstwy aplikacji utworzenie wirtualnego połączenia, wysyłanie danych oraz jego zakończenie. Do transportu segmentów może wykorzystywać dowolny protokół, ale najczęściej jest to IP.
Protokół TCP realizuje następujące zadania:
Specyfikuje format segmentów.
Opisuje procedury pozwalające upewnić się komunikującym stronom, że przesyłane dane dotarły bez zakłóceń.
Umożliwia identyfikację przynależności danej transmisji do konkretnego procesu pracującego w warstwie aplikacji.
Opisuje sposoby reakcji na ewentualne błędy transmisji (utrata, zduplikowanie segmentu).
Określa sposób otwierania i zamykania połączenia.
Udostępnia mechanizm „okien” do kontroli przepływu danych.
Oferuje mechanizm kontroli przeciążenia.
TCP dzieli napływający od programu użytkowego strumień danych na segmenty, które podróżują w datagramach. Dla zapewnienia utrzymania kolejności, oktety w strumieniu są numerowane, przy czym nie jest istotne od jakiej liczby system rozpocznie numerowanie, wartość jej ustalana jest losowo i nosi nazwę „początkowy numer sekwencji” lub „inicjujący numer kolejny” (ang. Initial Sequence Numer - ISN). Niezawodność transmisji osiąga się korzystając z metody zwanej jako pozytywne potwierdzanie z retransmisją. Opiera się ona na potwierdzaniu przez odbiorcę otrzymanych segmentów, jeżeli potwierdzenie nie nadejdzie w zaplanowanym czasie następuj retransmisja niepotwierdzonego segmentu. W celu poprawienia przesyłania i kontroli przepływu TCP korzysta z mechanizmu przesuwającego się okna z możliwością dynamicznej zmiany jego rozmiaru. Proces nawiązywanie i kończenie połączenia odbywa się na drodze trójetapowej wymiany komunikatów (ang. 3-way handshake) i przebiega on wg następującego schematu:
Inicjator (Host A) wysyła do hosta B segment z ustawioną flagą SYN (synchronizujący) i wygenerowanym numerem ISN = x, od którego rozpocznie numerowanie danych.
Host B potwierdza otrzymanie segmentu, odpowiadając segmentem z ustawionymi bitami: ACK dla x+1 i SYN. Podaje również numer ISN = y, od którego rozpocznie numerowanie wysyłanych przez siebie danych.
Host A wysyła segment potwierdzający odbiór segmentu od B (ustawiony bit ACK dla y+1) i zawierający pierwsze przesyłane dane.
Zakończenie połączenia powinno polegać na wymianie segmentów potwierdzania z ustawionym bitem FIN (ang. finisz). Jednak w sytuacjach wyjątkowych, w celu natychmiastowego zamknięcia połączenia można skorzystać z segmentu RST. Standard TCP nie wymaga potwierdzania każdego odebranego segmentu danych. Segment z ustawionym bitem ACK potwierdza odebranie wszystkich danych od początku transmisji o numerach nie mniejszych od podanego w polu „ nr potwierdzenia”.
Protokół TCP może obsługiwać wielu programów użytkowych działających na jednej maszynie. Identyfikację przynależności danej transmisji do konkretnego procesu umożliwia liczba 16-bitowa zwana portem, przydzielana poszczególnym procesom pracującym w warstwie aplikacji. Tak, więc transmisja w sieci Internet jest identyfikowana za pomocą dwu liczb: adresu IP oraz numeru portu. Połączenie ich nazywamy gniazdem (ang. socket).
Protokół HTTP
Protokół HTTP (ang. Hypertext Transfer Protocol) jest zorientowany tekstowo, tzn. wymiana informacji między klientem a serwerem odbywa się w formie linii tekstu zakończonych sekwencją CRLF (w języku C - „\r\n”). Jego podstawowym zastosowaniem jest pobieranie z serwera strony WWW, ale umożliwia również komunikację zwrotną, zazwyczaj związaną z formularzem HTML. Działanie protokołu opiera się na połączeniu TCP i przebiega wg schematu: klient nawiązuje połączenie a następnie wysyła żądanie - serwer odsyła stosowną odpowiedz i się rozłącza (wersja1.0). Zarówno pytanie jak i odpowiedz składa się z nagłówka zawierającego informacje sterujące, pustego wiersza i opcjonalnie bloku danych. Nagłówek HTTP zawiera wiersz żądania/statusu i wiersze pól nagłówkowych. Nazwy i znaczenie wszystkich pól mogących wystąpić w nagłówku określa specyfikacja protokołu HTTP. W wierszu żądania umieszczone są: identyfikator metody, identyfikator zasobu oraz numer wersji protokołu HTTP, np. GET /katalog/http/1.0.
W praktyce stosuje się następujące metody:
GET - jest standardową metodą służącą do pobierania dokumentów w sieci WWW, nie zawiera części zasadniczej.
HEAD - na tego typu żądanie serwer odpowiada samym nagłówkiem (bez części zasadniczej).
POST - służy do wysyłania informacji od klienta do serwera, jest stosowana najczęściej z formularzami HTML.
Identyfikator zasobu określa lokalizację i rodzaj zasobu o dostarczenie, którego prosi klient.
Wiersz statusu w nagłówku odpowiedzi składa się z numeru wersji protokołu i trzycyfrowego kodu odpowiedzi z krótkim jego opisem, np. http/1.0 404 Not Fund.
6.5 Architektura mikroserwera
Mikroserwerem TCP/IP może być dowolny system wbudowany, zrealizowany na bazie 8 lub 16-bitowego mikrokontrolera, który wyposażony jest w interfejs sieciowy i w obsługę stosu TCP/IP. Dodatkowo posiada zaimplementowane protokoły warstwy aplikacji np. serwer WWW, serwer FTP, klient SMTP, itp.
Schemat blokowy wbudowanego w moduł EasyWeb2 mkroserwera przedstawia rys. 22.
Mikrokontroler realizuje protokoły stosu TCP/IP i steruje pracą kontrolera Ethernet, po przez wpisy do jego rejestrów sterujących i odczyty rejestrów statusu. Magistralą danych przesyła on słowa sterujące, dane do wysłania w postaci ramki oraz odczytuje gotowy datagram.
Kontroler Ethernet w pełni sprzętowo realizuje obsługę transmisji w sieci Ethernet. Dokonuje upakowania i rozpakowania datagramów w ramki Ethernet, koduje/dekoduje dane kodem Manchester, zapewnia wymagane poziomy sygnałów dla standardu 10BaseT. Sygnalizuje również błędy odbioru, a w przypadkach kolizji dokonuje retransmisji. W układzie możliwe jest zaprogramowanie dowolnego adresu MAC.
Rysunek 22. Schemat blokowy mikroserwera TCP/IP
Transformator separujący odizolowuje galwanicznie mikroserwer od sieci, natomiast gniazdo RJ-45 (oczywiście) służy do podłączenia kabla standardu 10BaseT, który łączy mikroserwer z siecią Internet.
Mikroserwer dla celów demonstracyjnych ma zaimplementowany stos protokołów TCP/IP napisany przez A. Dannenberg'a na potrzeby firmy Texas Instruments. Jest on implementacją w wydaniu minimalnym, tzn. zawiera tylko protokoły niezbędne i z wieloma uproszczeniami, przez co jest prosty i doskonale nadaje się do ćwiczeń dydaktycznych przedstawionych w następnym rozdziale. Alternatywnie można użyć oprogramowania stosu TCP/IP autorstwa Adama Dunkels'a o większych możliwościach i świetnej dokumentacji, dostępnego na stronie http://www.rowley.co.uk .
Dla lepszego zrozumienia, oprogramowanie zostało podzielone przez autora na cztery moduły.
Ethernet - tworzy warstwa fizyczna, w której zachodzi transmisja danych i kontroler sieci Ethernet - umożliwiający do niej dostęp.
Moduł Ethernet - zawarty w pliku: cs8900.c, pełni funkcję sterownika kontrolera CS8900A, jest zbiorem funkcji umożliwiających łatwy dostęp do rejestrów układu oraz odbieranie i nadawanie ramek Ethernet. Inicjalizuje również potrzebne porty mikrokontrolera i konfiguruje CS8900A do pracy (Init8900(void)). W pliku nagłówkowym modułu można ustalić parametry interfejsu sieciowego, w tym dowolnie wybrany (poza rozgłoszeniowym) adres MAC (stałe MYMAC1…MYMAC6).
Moduł TCP/IP - zawiera implementację protokołów ARP, ICMP, IP i TCP. Używa funkcji modułu Etheret do wysyłania i odbierania danych i dostarcza prostego w użyciu interfejsu API (ang. Application Program Interface) dla programów użytkowych modułu aplikacji. Dla poprawnej pracy stosu konieczne jest periodyczne wywoływanie przez aplikację użytkownika funkcji DoNetworkStuff(), która w wyniku odpytywania rejestrów i zmiennych statusu ustala zaszłe zdarzenia i wywołuje odpowiednie funkcje obsługujące je. Uaktualnia również stan automatu TCP zgodnie z flagami globalnymi. Na potrzeby odbieranych i wysyłanych ramek przeznaczone są trzy bufory w pamięci SRAM mikrokontrolera:
TxFrame1Mem - buforuje dane do wysłania łącznie z potrzebnymi nagłówkami Ethernet, IP, TCP.
TxFrame2Mem - buforuje segmenty bezdanowe (puste) wraz z nagłówkami Ethernet i IP oraz ramki z komunikatami protokołów ARP i ICMP.
RxTCPBufferMem - przestrzeń zawierająca dane użytkownika z odebranego segmentu.
W pliku nagłówkowym tcpip.h należy wprowadzić adres IP, adres bramy oraz parametry dotyczące warunków retransmisji oraz rozmiar buforów.
Stos wykorzystuje Timer_A mikrokontrolera dla wygenerowania numeru ISN oraz ustalenia granicznego czasu retransmisji segmentu. Konfiguracji licznika dokonuje funkcja TCPLowLevelInit(), o jej wywołanie powinna zadbać aplikacja użytkownika.
Aplikacje - w module tym znajdują się programy użytkowe korzystające z interfejsu API do transmisji danych przez stos TCP/IP.
6.6 Lab 7: Protokół HTTP w mikroserwerze.
Cel zajęć
Zapoznanie z procesem komunikowania się programów użytkowych w intersieci, na przykładzie implementacji serwera HTTP. Praktyczne wykorzystanie interfejsu API w interakcji programu użytkowego z oprogramowaniem stosu TCP/IP.
Wiadomości teoretyczne
Przy realizacji poniższych ćwiczeń należy posłużyć się interfejsem API zaimplementowanego stosu demonstracyjnego. Oferuje on zestaw funkcji umożliwiających wymianę danych między programem użytkowym a protokołem transportowym. Udostępnia do odczytu również zmienną statusu „SocketStatus” zawierającą flagi odzwierciedlające aktualny stan stosu.
void TCPLowLevelInit(void) - dokonuje inicjalizacji kontrolera sieci, ustala początkowe wartości flag, konfiguruje porty i Timer_A mikrokontrolera. Obowiązkowo musi być wywołana, aby zainicjalizować mikroserwer.
void TCPPassiveOpen(void) i void TCPActiveOpen(void) - ustawiają stos odpowiednio w tryb serwera lub klienta. W pierwszym wypadku przechodzi on w stan nasłuchu, w celu wykrycia połączenia do niego skierowanego, natomiast w drugim, stos próbuje nawiązać łączność wedle wcześniej zadanych parametrów (adres IP, nr portu). W obu trybach nawiązanie łączności jest sygnalizowane ustawieniem flagi SOCK_CONNECTED, poczym może mieć miejsce transfer danych poprzez użycie stosownych funkcji API.
void TCPClose(void) - zamyka otwarte połączenie, funkcja daje pewność, że przed rozłączeniem znajdujący się w buforze wyjściowym segment zostanie wysłany i odpowiednio potwierdzony. Po zamknięciu aplikacja może rekonfigurować warunki połączenia i otworzyć nowe.
void TCPReleaseRxBuffer(void) - sygnalizuje, że zawartość bufora odbioru została odczytana i może być nadpisana, co umożliwia odbiór kolejnego segmentu z danymi. Algorytm odbioru danych przedstawia rys.23.
Rysunek 23. Algorytm odbioru danych.
void TCPTransmitTxBuffer(void) - służy do wysyłania danych przez już otwarte połączenie, jednak przed jej zastosowaniem należy upewnić się czy bufor jest wolny, jeśli tak (flaga SOCK_TX_BUF_RELEAED jest ustawiona) aplikacja może skopiować maksymalnie MAX_TCP_TX_DATA_SIZE danych do sekcji danych (wskazanej przez wskaźnik TCP_TX_BUF) bufora nadajnika TxFrame1Mem. Schemat procedury wysyłania danych przedstawia rys. 24.
Rysunek 24. Algorytm wysyłania danych.
SocketStatus - zmienna tylko do odczytu, udostępnia zestaw flag (tab. 5) określających aktualny stan stosu.
Bit 7 |
Bit 6 |
Bit 5 |
Bit 4 |
Bit 3 |
Bit 2 |
Bit 1 |
Bit 0 |
SOCK_ ERROR |
SOCK_ ERROR |
SOCK_ ERROR |
SOCK_ ERROR |
SOCK_TX_ BUF_RELASED |
SOCK_DATA_ AVAILABLE |
SOCK_ CONNECTED |
SOCK_ ACTIVE |
Tabela 5 Układ flag w zmiennej SocketStatus.
Znaczenie poszczególnych flag jest następujące:
SOCK_ACTIVE - jej ustawienie wskazuje, że stos jest zajęty nawiązywaniem lub realizacją połączenia, we wypadku zamknięcia połączenia lub wystąpienia błędu bit jest zerowany. Dopóki stos jest aktywny nie jest dozwolone wywoływanie funkcji otwierających kolejne połączenia.
SOCK_CONNECTED - oznajmia, że połączenie zostało nawiązane i aplikacja może dokonać transferu danych. Zamknięcie lub reset połączenia czyści flagę.
SOCK_DATA_AVAILABLE - informuje aplikację, że nadszedł nowy segment, a zawarte w nim dane można odczytać przy pomocy wskaźnika TCP_RX_BUF. Flagę czyści funkcja TCPReleaseRxBuffer().
SOCK_TX_BUF_RELEASED - zezwala aplikacji na zmianę zawartości bufora nadajnika, jest ustawiana przez stos, gdy wysłany segment został potwierdzony.
SOCK_ERROR (bity 4…7) - przechowują kod błędu powstałego podczas nawiązywania łączności lub w jej trakcie, ich wartości są zdefiniowane w pliku nagłówkowym tcpip.h.
Opis ćwiczeń
Ćwiczenie A.
W oparciu o zaimplementowany stos A. Dannenberg'a, zrealizować przykładowy serwer HTTP udostępniający statyczną stronę WWW.
Ćwiczenie B
Zmodyfikować serwer z ćwiczenia poprzedniego tak, aby udostępniał stronę dynamiczną, za pośrednictwem, której możliwa by była interakcja użytkownika z modułem EasyWeb2, poprzez przetwarzanie zawartego na niej formularza. Strona powinna zawierać pole typu „Input” dla wprowadzenia nazwy użytkownika oraz dwa przyciski typu „Submit” do sterowania (on/off) przekaźnikami (REL1, REL2) modułu. Wprowadzona nazwa użytkownika ma być wyświetlona na LCD, natomiast naciśnięcie przycisku, włączać lub wyłączać wybrany przekaźnik i uaktualnić jego opis (atrybut „value”) tak, aby wskazywał następną możliwą operację. Np. naciśnięcie przycisku z napisem „on”, przydzielonego przekaźnikowi REL1, spowoduje jego załączenie i zmianę napisu na „off”.
Wskazówki.
Przy realizacji ćwiczeń należy kierować się przedstawioną na rysunku 25 strukturą oprogramowania mikroserwera.
Rysunek 25. Algorytm pracy mikroserwera.
Funkcja SerwerHTTP w oparciu o protokół HTTP i przedstawiony powyżej interfejs API powinna:
Odczytać przychodzące dane i ewentualne przekazać programowi użytkowemu.
Wysłać kod strony, przestrzegając aby rozmiar danych w segmencie nie przekraczał limitu określonego przez identyfikator MAX_TCP_TX_DATA_SIZE w pliku nagłówkowym tcpip.h
Po spełnieniu żądania zamknąć połączenie.
3. Kod strony WWW powinien być przechowywany jako tablica w pamięci programu mikrokontrolera, a w przypadku strony dynamicznej zawierać parametry, które przed wysłaniem, już w buforze nadajnika, należy zamienić na konkretne wartości.
4. W ćwiczeniu B do wysłania danych z formularza należy zastosować metodę GET, która dołącza je do adresu URL po znaku „?”. W celu analizy nadchodzących danych (np. nagłówka żądania) można posłużyć się oknem „MEMORY” programu IAR Embedded Workbench w trybie debugowania w układzie.
7. Podsumowanie
Celem pracy było określenie przydatności modułu EasyWeb2 firmy Olimex dla potrzeb dydaktycznych, a następnie opracowanie na jego bazie zestawu ćwiczeń laboratoryjnych do przedmiotu Architektura komputerów.
Parametry techniczne, jak i testy przeprowadzone z wykorzystaniem oprogramowania demonstracyjnego oraz realizacja zaproponowanych w pracy ćwiczeń, potwierdziły wysoką przydatność w/w modułu do celów laboratoryjnych. Płyta wyposażona została w nowoczesne podzespoły, co zapewniło jej ogromne możliwości edukacyjne. Przede wszystkim architektura jej opiera się na nowoczesnym mikrokontrolerze MSP430F149, który zawiera: 16-bitowy procesor typu RISC, dużą ilością pamięci programu i danych oraz wiele bogato wyposażonych układów peryferyjnych. Zwłaszcza te ostatnie, przez to, że posiadają możliwość elastycznej konfiguracji mogą być przedmiotem nie tylko pojedynczych ćwiczeń, ale całych ich serii. Inną poważną zaletą modułu jest jego możliwość wielorakiego sposobu komunikowania się z użytkownikiem, od metod najprostszych takich jak LED czy brzęczyk, po przez tradycyjne typu LCD, RS232 aż po najbardziej nowoczesne - za pośrednictwem formularza strony WWW.
Reasumując moduł EasyWeb2 jest doskonałą bazą sprzętową dla przeprowadzania ćwiczeń i eksperymentów zapoznających studentów: z budową systemu mikroprocesorowego, sposobów programowania mikrokontrolerów oraz metod sterowania i obsługi urządzeń będących otoczeniem mikrokontrolera. Pomimo tak licznych zalet modułu, podczas opracowywania poszczególnych ćwiczeń „dokuczała” sztywno narzucona przez producenta możliwość korzystania z wyprowadzeń układów peryferyjnych mikrokontrolera lub całkowity brak dostępu do nich (np. komparatora). Rozwiązaniem tej niedogodności byłoby wprowadzenie do architektury płyty systemu zworek i gniazd, pozwalających na bardziej swobodne operowanie układami peryferyjnymi, np. moduł LCD mógłby być montowany w gnieździe.
Od dawien dawna wiadomo, że człowiek uczy się najefektywniej poprzez analizę przykładów i własną praktykę. Dlatego trafny wybór tematów a następnie opracowanie dla nich stosownych ćwiczeń jest sprawą zasadniczą w prawidłowo prowadzonym procesie dydaktycznym. Przedstawiona seria ćwiczeń spełnia te wymagania. Zapoznaje studentów z poszczególnymi zasobami mikrokontrolera i środowiskiem programistycznym, w uzasadnionej kolejności i stopniując trudność stawianych zadań. Początkowo proste, z szerokim opisem sposobu realizacji, dostarczają niezbędnej wiedzy i podstawowych umiejętności, kolejne zachęcają studentów do samodzielnego ich testowania, modyfikowania i rozbudowywania aż po realizację własnych projektów. Przedstawione ćwiczenia mają na celu dostarczenie wiedzy i wyrobienia umiejętności sprawnego posługiwania się zasobami mikrokontrolera ze szczególnym uwzględnieniem rozwiązywania problemów spotykanych w praktyce. Wyrabiają również umiejętność przeszukiwania i rozumienia anglojęzycznej dokumentacji (np. data sheet, user guide).
Znajdujący się na płycie kontroler sieci Ethernet, otwiera nowe, szerokie możliwości konstruowania ćwiczeń również do przedmiotu „Sieci komputerowe”. Przedstawione w rozdziale szóstym ćwiczenia dają jedynie próbkę możliwości modułu w tej dziedzinie. W oparciu o moduł EasyWeb2 można realizować nie tylko ćwiczenia przewidziane na pojedyncze zajęcia, ale także większe projekty np. oprogramowanie stosu TCP/IP.
Przedstawiony w pracy opis sprzętu i oprogramowania może być podstawą do opracowywania dalszych bardziej zawansowanych zestawów ćwiczeń lub projektów.
Literatura
Comer Douglas E.: Sieci komputerowe i intersieci.
Gałka P., Gałka P.: Podstawy programowania mikrokontrolera 8051
Majewski J., Kardach K.: Programowanie mikrokontrolerów z serii 8x51 w języku C.
Pełka R.: Mikrokontrolery, architektura, programowanie, zastosowania
Materiały firmowe:
MSP430x1xx Family User's Guide, (SLAU 049F), Texas Instruments
MSP430x14x Data Sheet, (SLAZ 017A), Texas Instruments
MSP430 Internet Connectivity (SLAA137A), Texas Instruments
MSP430 IAR Embedded Workbench IDE User's Guide, IAR System
Strony Internetowe
3
D7 D6 D5 D4 D3 D2 D1 D0 E R/W RS V0 VDD VSS
Control RD
Control WR
Data RD
Data WR
16 - charakter
2 - line LCD
DDRAM
CGRAM
10ns
80ns
max 20ns
max 20ns
500ns
10ns
230ns
40ns
DB7-DB4
E
RS
R/W=0
stan L - przesyłane są instrukcje, stan H - dane
Warstwa aplikacji
Warstwa prezentacji
Warstwa sesji
Warstwa transportowa
Warstwa sieciowa
Warstwa łącza danych danych
Warstwa łącza danych
Warstwa sieciowa
Warstwa transportowa
Warstwa sesji
Warstwa prezentacji
Warstwa aplikacji
Warstwa fizyczna
Warstwa łącza danych
Warstwa aplikacji
Warstwa sesji
Warstwa sprzętowa
Stos urządzenia 2
Stos urządzenia 1
Identyczny
komunikat
Identyczny
komunikat
Identyczny
komunikat
Identyczny
komunikat
Identyczny
komunikat
Identyczny
komunikat
Warstwa fizyczna
Warstwa sieciowa
Warstwa transportowa
Warstwa prezentacji
Warstwa transportowa
Warstwa Internet
Warstwa aplikacj
Warstwa dostępu do sieci
FTP
HTTP
SMTP
POP
Telnet
NFS
DNS
SNMP
RIP
Adres
źródła
Adres
celu
8
Preambuła
Przykładowe protokoły
TCP/IP
ISO/OSI
ICMP
PPP
SLIP
Inne
ARP
CSMA/CD
Ethernet
TCP
UDP
IP
Dane
Długość
/Typ
6
6
Pad
MSP430F149
Ładunek
Nagłówek
Ramka (ang. Frame)
Pakiet (ang. Packet)
4
46 - 1500
6
CRC
8 MHz
20 MHz
Transformator
separujący
LEDs
Gniazdo
RJ-45
D[7…9]
A[3…0]
Kontroler
Ethernet
CS8900A
IOR
TCPTransmitTxBuffer()
TCPTxDataCount=ilość bajtów do wysłania
Kopjuj dane do TCP_TX_BUF
TX_BUF_RELEASED
TCPReleaseRxBuffer()
Odczytaj buf. odb. od adresu TCP_RX_BUF
Ilosc bajtów do odczytu=TCPRxDataCount
DATA_AVAILABLE?
10BASE-T
IOW
Inicjalizacja bloku zegara
Konfiguracja portów I/O
TCPLowLevelInit()
Inicjalizacja flag serwera HTTP
TCPLocalPort=TCP_PORT_HTTP
SOCK_ACTIVE?
DoNetworkStuff()
Program użytkowy
Serwer HTTP
No
TCPPassiveOpen()
No
Zegar
Licznik n-bitow
Rejestr zatrzaskowy
rejestratora zdarzeń
Układ wyboru zbocza
Zdarzenie ee
Zerowanie
Zezwolenie
Szyna danych
Programowanie
aktywnego zbocza
Zegar
Licznik n-bitowy
Komparator
Rejestr komperatora
Zerowanie
Programowanie wartości
Zbocze w zaprogramowanej chwili
Rejestr
aproksymacyjny
Przetwornik
C/A
Sterowanie
algorytmem SAR
Wejście
analogowe
Zegar
Układ
próbkująco-
-pamiętający
+
-
Komparator
Wartość cyfrowa
przetworzonego napięcia
Rysunek 15. Transmisja asynchroniczna pojedynczej ramki.
Target system
IAR C-SPY debugger
C-SPY
Application software
Target
hardware
JTAG
emulator
Target hardware
ROM-monitor
Simulator
ROM-monitor
driver
Emulator
driver
driver
Symulator
driver
Embedded
Workbench
Gniazdo
RJ-45
Gniazdo
RS 232
Złącze
zasilania
Sygnalizacja
zasilania
Status
LED
LED'y kontrolera
sieci
Złącza szpilkowe
EXT AEXT
Przekaźniki
REL1 i REL2
LED'y
sygnalizujące
stan wejść
portów P1.1-P1.4
Buzzer
Złącze interfejsu
JTAG
Zespół przycisków
B1-B4
Panel LCD
Złącza DALLAS
i FREQ
Opto-
izplowane
wejścia
DI1-DI4
Wyprowadzenia
styków
przekaźników
Oscillator
System
Clack
60 KB
Flesh
2 KB
RAM
ADC12
I/O Port
P1, P2
I/O
Port
P3, P4
I/O
Port
P5, P6
Watch-
dog
Timer
Timer
B7
Timer
A3
POR
Comp-
arator
USART
0
USART
1
Hardware
Multiplier
CPU
TEST JTAG
Bus
Conv
MAB
MDB
16-b
MCB
4-b
8-b
16-b
MSP430F149
CS8900A