Zintegrowane systemy sterowania



Pobieranie 198.9 Kb.
Strona2/2
Data28.04.2016
Rozmiar198.9 Kb.
1   2


Rysunek



Odpowiedź


!AA(cr) polecenie prawidłowe

?AA(cr) wprowadzono nieprawidłowe parametry lub próbowano je zmienić, w czasie gdy końcówka INIT* nie była podłączona do masy układu.

Nie ma żadnej odpowiedzi jeżeli moduł wykryje błąd składni lub nastąpi błąd w komunikacji, lub gdy podany adres nie istnieje
! znak rozdzielający oznaczający prawidłowe polecenie

? znak rozdzielający oznaczający nieprawidłowe polecenie

AA (z przedziału 00-FF(hex)) określa 2-znakowy heksadecymalny adres modułu cyfrowych we/wy, który będzie konfigurowany

(cr) jest znakiem kończącym, powrót karetki(0Dh)



Przykład

Polecenie: %2324400600(cr)

Odpowiedź:!249cr0

Polecenie oznacza zmianę adresu modułu z 23h na 24h, ustawienie prędkości transmisji na 9600 b/s bez kontroli parzystości.

Po odpowiedzi widać, że polecenie zostało pomyślnie wykonane.




UWAGA: Wszystkie parametry konfiguracyjne mogą być zmieniane dynamicznie oprócz prędkości transmisji i stanu sumy kontrolnej. Mogą one być zmieniane wtedy gdy końcówka INIT* jest podłączona do masy.
Tabela Kody prędkości transmisji

Kod prędkości

transmisji

Prędkość Transmisji

03

1200 bps

07


19,2 Kbps



$AA6

Nazwa

Odczyt kanałów cyfrowych

Opis

Żądanie aby moduł o adresie AA podał stan swoich cyfrowych kanałów wejściowych i wyjściowych

Składnia

$AA6(cr)

$ - znak rozdzielający

AA - (z przedziału 00-FF(hex)) określa 2-znakowy heksadecymalny adres modułu cyfrowych we/wy

6 -jest poleceniem odczytania stanu cyfrowych kanałów we/wy

(cr) jest znakiem kończącym, powrót karetki(0Dh)



Przykład

Polecenie : $336(cr)

Odpowiedź: !112200(cr)

Pierwsze dwa znaki odpowiedzi, wartość 11h (00010001B), oznacza, że cyfrowe kanały wyjściowe nr 0 i 4 są włączone (ON), a pozostałe kanały 1,2,3,5,6,7 są wyłączone (OFF). Następne dwa znaki, wartość 22h (00100010B) mówią, że kanały wejściowe 1 i 5 są w stanie wysokim (HIGH) a pozostałe kanały 0,2,3,4,6,7 są w stanie niskim (LOW).



#AABB

Nazwa

Ustawienie wyjściowych kanałów cyfrowych

Opis

Polecenie ustawienia pojedynczego kanału wyjściowego lub jednoczesnego ustawienia wszystkich wyjść cyfrowych

Składnia

#AABB(data)(cr)

# - znak rozdzielający

AA - (z przedziału 00-FF(hex)) określa 2-znakowy heksadecymalny adres modułu cyfrowych we/wy

BB – określa, czy będą ustawiane wszystkie kanały naraz, czy pojedynczo. Dla zapisu wszystkich kanałów (zapis bajtu) obydwa znaki muszą być równe zero BB=00. Przy zapisie do oddzielnego kanału (ustawienie bitu) pierwszy znak ma wartość 1, a drugi określa nr kanału z przedziału 0 do 7

(data) jest heksadecymalną reprezentacją cyfrowych wartości wyjściowych.

Przy zapisie do pojedynczego kanału (bit) pierwszy znak jest zawsze 0. Drugi znak przyjmuje wartość 0 lub 1.

Przy zapisie do wszystkich kanałów jednocześnie (bajt) obydwa znaki są istotne ( z przedziału 00h-FFh), gdyż liczba ta określa stan kanałów wyjściowych.

(cr) jest znakiem kończącym, powrót karetki(0Dh)




Przykład

Polecenie : #140005(cr)

Odpowiedź: >(cr)

Bajt wysłany do modułu o adresie 14h, na wszystkie wyjścia naraz, ma wartość 05h (00000101B). Oznacza to, że kanały wyjściowe 0 i 2 tego modułu zostały włączone (ON), a pozostałe kanały są wyłączone (OFF).
Polecenie : #151201(cr)

Odpowiedź: >(cr)

Kanał drugi modułu cyfrowych we/wy o adresie 15h został włączony (ON).




#**

Nazwa

Synchroniczne próbkowanie

Opis

Ustawienie wszystkich modułów wejściowych na próbkowanie sygnałów wejściowych i przechowywanie ich w specjalnych rejestrach

Składnia

#**

# - znak rozdzielający

** polecenie synchronicznego próbkowania

Znak kończący, w postaci znaku powrotu karetki (0Dh), nie jest wymagany.



Odpowiedź

Moduły cyfrowych we/wy nie odpowiadają na to polecenie. Aby otrzymać zgromadzone dane należy, każdemu modułowi z osobna wydać polecenie Odczyt danych synchronicznych.


$AA4

Nazwa

Czytaj synchroniczne dane

Opis

Żądanie aby moduł o adresie AA zwrócił wartości, gromadzone w rejestrze podczas Synchronicznego próbkowania

Składnia

$AA4(cr)

$ - znak rozdzielający

AA - (z przedziału 00-FF(hex)) określa 2-znakowy heksadecymalny adres modułu cyfrowych we/wy, który ma zwrócić dane

4 -jest poleceniem odczytania synchronicznych danych

(cr) jest znakiem kończącym, powrót karetki(0Dh)



Przykład

Polecenie : $064(cr)

Odpowiedź: >1055100(cr)

Polecenie to żąda od modułu o adresie 06h przesłania zgromadzonych danych podczas ostatniego synchronicznego próbkowania. Moduł zwraca 1055100, co oznacza, że status=1 (dane nie były przesyłane wcześniej); dataOutput = 05h (00000101B) – kanały wyjściowe 0 i 2 są włączone, a pozostałe (1,3,4,5,6,7) wyłączone; dataInput =51h (01010001B); Kanały wejściowe 0,4,6 są w stanie wysokim, a pozostałe w stanie niskim.
Polecenie : $064(cr)

Odpowiedź: >0055100(cr)

Polecenie to żąda od modułu o adresie 06h przesłania wartości wejść cyfrowych. Moduł zwraca 0055100, więc status=0 co oznacza, że zostaną przesłane te same dane co poprzednim razem.

To może oznaczać, że ostatnia komenda synchronicznego próbkowania nie została przesłana!




$AA2

Nazwa

Stan konfiguracji

Opis

Zwraca ustawienia parametrów konfiguracyjnych adresowanego modułu we/wy.

Składnia

$AA2(cr)

$ - znak rozdzielający

AA - (z przedziału 00-FF(hex)) określa 2-znakowy heksadecymalny adres modułu cyfrowych we/wy

2 –jest poleceniem odczytania ustawienia parametrów konfiguracyjnych

(cr) jest znakiem kończącym, powrót karetki(0Dh)



Przykład

Polecenie : $452(cr)

Odpowiedź: !45400600(cr)

Polecenie to żąda od modułu o adresie 45h przesłania jego konfiguracji.

Moduł odpowiada, że ma ustawione parametry:

Prędkość transmisji 9600 bps, bez sumy kontrolnej i jest to moduł ADAM 4050



Rysunek Suma kontrolna i parametry określające typ modułu


Tabela Kody prędkości transmisji

Kod prędkości

transmisji

Prędkość Transmisji

03

1200 bps

07


19,2 Kbps



$AA5

Nazwa

Odczyt bitu kasowania

Opis

Żądanie aby moduł o adresie AA podał czy było wykonywane polecenie kasowania przed otrzymaniem ostatniego polecenia odczytu stanu kasowania

Składnia

$AA5(cr)

$ - znak rozdzielający

AA - (z przedziału 00-FF(hex)) określa 2-znakowy heksadecymalny adres modułu cyfrowych we/wy

5 -jest poleceniem odczytania stanu kasowania

(cr) jest znakiem kończącym, powrót karetki(0Dh)


Odpowiedź

!AAS(cr)jeżeli polecenie jest prawidłowe

?AA(cr) jeżeli wydano nieprawidłowe polecenie

Nie ma żadnej odpowiedzi jeżeli moduł wykryje błąd składni lub nastąpi błąd w komunikacji, lub gdy podany adres nie istnieje
! znak rozdzielający oznaczający prawidłowe polecenie

? znak rozdzielający oznaczający nieprawidłowe polecenie

AA (z przedziału 00-FF(hex)) określa 2-znakowy heksadecymalny adres modułu cyfrowych we/wy

S reprezentuje bit statusu zwracany przez moduł cyfrowych we/wy

Jeżeli S = 1 moduł był kasowany od ostatniego wykonania polecenia odczytu bitu kasowania, jeżeli S = 0 to moduł nie był resetowany.

(cr) jest znakiem kończącym, powrót karetki(0Dh)



Przykład

Polecenie : $395(cr)

Odpowiedź: !390(cr)

Komenda żąda od modułu we/wy cyfrowych o adresie 39h zwrotu stanu bitu kasowania. Moduł zwraca S = 0, co oznacza, że nie był kasowany lub włączany od ostatnio wykonanej komendy odczytu bitu kasowania.





  1. Łącze szeregowe


Transmisja synchroniczna

Oprócz linii przekazujących dane, łącze musi dysponować dodatkowymi połączeniami przesyłającymi przebieg synchronizujący. Zaletą tego systemu jest umożliwienie dowolnych zmian prędkości transmisji. Odbiornik dostosowuje się natychmiast do częstotliwości nadajnika, o ile oczywiście nie zostanie przekroczona pewna prędkość graniczna.


Transmisja asynchroniczna

Strumień danych musi nieść w sobie informację o częstotliwości synchronizującej. Naturalnie, nadajnik i odbiornik muszą pracować stale z tą samą, uzgodnioną wcześniej prędkością. Ceną, którą płacimy za zredukowaną w tym trybie pracy liczbę linii łączących korespondentów, jest komplikacja protokołu komunikacyjnego.


Asynchroniczna transmisja szeregowa i ramka danych
Łącza szeregowe, w które wyposażane są komputery klasy PC/XT i AT, przystosowane są do transmisji asynchronicznej. Przeznaczone do przesłania dane w formie szeregowej otrzymują pewien rodzaj "opakowania" - tzw. ramki (ang. frame), zwanej też SDU (ang. Serial Data Unit). Ramka właśnie, a nie pojedynczy bit danych jest najmniejszą porcją przekazywanej jednorazowo przez łącze informacji.

Jak widać na poniższym rysunku, na ramkę składają się, oprócz właściwych bitów danych, znacznik początku ramki (tzw. bit startu), bit kontroli parzystości i znacznik końca ramki (bit stopu). Czas trwania jednego bitu ramki, tj. okres wyimaginowanego przebiegu synchronizującego wynika ściśle z uzgodnionej prędkości transmisji.

W ogólności ramka może zawierać 5, 6, 7 lub 8 bitów danych. Bit startu jest obowiązkowy, a liczba bitów stopu może wynosić 1 lub 2.

Struktura ramki danych
Bit kontroli parzystości jest elementarnym i bardzo mało efektywnym sposobem zabezpieczenia danych przed przekłamaniami w trakcie przekazu. Może on oznaczać parzystą lub nieparzystą liczbę ustawionych bitów w polu danych, może być ustawiony na stałe lub na stałe wyzerowany, wreszcie może być w ogóle pominięty. Wszystkie te charakterystyczne cechy ramki, tj. czas trwania (odpowiadający prędkości transmisji), liczba bitów danych, liczba bitów stopu i tryb kontroli parzystości są uzgadniane między nadajnikiem i odbiornikiem jako format przekazywanych danych jeszcze przed nawiązaniem połączenia (ponieważ parametry transmisji nie są wówczas ustalone, uzgodnienia należy na ogół dokonać "ręcznie", za pomocą programów konfigurujących). Tylko w ten sposób możliwe jest prawidłowe odczytanie napływających do odbiornika informacji. Generator odbiornika pracuje więc z założenia z taką samą częstotliwością, z jaką pracował generator nadawczy, formujący dane do postaci szeregowej. Pozostaje jedynie synchronizacja fazy, tzn. uruchomienie układu dekodującego odbiornika precyzyjnie na początku ramki.

Bit startu przyjmuje zawsze wartość zero. Linia danych łącza w stanie spoczynku utrzymywana jest w stanie logicznej "1". Bit startu jest więc wyraźnie zaznaczonym początkiem transmisji. Bit stopu zamyka ramkę i łącze wraca do stanu początkowego lub realizuje transmisją następnej porcji danych.

W warunkach rzeczywistych nie występują oczywiście tak wyidealizowane przebiegi prostokątne jak przedstawione na powyższym rysunku. Przy dużych prędkościach transmisji zaczynają odgrywać rolę pojemności przewodów łączących Odległość dzieląca nadajnik i odbiornik może dochodzić do 200 metrów, i to w warunkach przemysłowych. Wszystko to powoduje zniekształcenia zboczy sygnałów oraz nakładanie się na nie dodatkowych przebiegów zakłócających.

Przetwarzanie szeregowego strumienia danych napływających do odbiornika musi więc odbywać się w sposób bardziej skomplikowany. Odbiornik pracuje z częstotliwością 16-to krotnie większą, niż wynikałoby to z ustalonej szybkości pracy łącza, a każdy bit ramki jest badany (próbkowany) 16 razy. Wynik pobrania tych 16 próbek jest uśredniany, a na podstawie tej operacji, zapada decyzja, czy badanemu wycinkowi czasowemu przyporządkować niski czy wysoki poziom logiczny. Metoda ta podnosi znacznie odporność łącza na zakłócenia impulsowe i eliminuje niekorzystny wpływ zniekształconych zboczy.


Interfejs RS-232C
RS-232C jest określeniem powstałego w USA standardu przesyłania informacji między urządzeniami za pośrednictwem łącza szeregowego. Standard ten definiuje parametry mechaniczne, elektryczne i logiczne łącza.

Standard RS-232C dotyczy wymiany danych pomiędzy tzw. terminalem (ang. DTE, Data Terminal Equipment) a modemem (ang. DCE, Data Communication Equipment). Powstał on dla potrzeb ujednolicenia komunikacji między końcówką komputerową a dużym komputerem (host) przy użyciu łącz telefonicznych i modemów. Pod pojęciem DTE rozumiemy dziś jednak głównie komputery PC, w przypadku których ma miejsce implementacja zaleceń standardu CCITT o nazwie V.24. Nie jest to jednak kompletne złącze V.24, a jedynie jego część, w której wykorzystywane są tylko niektóre sygnały. Zalecenie CCITT definiuje na jednym łączu dwa porty szeregowe (dwa wyjścia i dwa wyjścia), natomiast w PC używany jest tylko jeden. Wykorzystana jest tu jedynie ogólna specyfikacja złącza V.24.

Połączenie interfejsów RS-232C od strony mechanicznej stanowi 25-żyłowy przewód zakończony zdefiniowanymi przez standard wtykami. Większość z 25 linii przeznaczona została dla potrzeb szeregowej transmisji synchronicznej. W standardzie IBM PC wykorzystywane jest tylko 9 z tych sygnałów, dlatego też często zamiast wtyku 25koäcówkowego (DB-2i) stosuje się wtyk 9 końcówkowy DB-9. Ta liczba linii w zupełności wystarcza do obsłużenia transmisji asynchronicznej w standardzie RS-232C.

Poniżej podano zestawienie sygnałów interfejsu RS-232C używanych w komputerach PC.




Wtyk DB-25

Wtyk DB-9

Sygnał

Kierunek transmisji

1

-

-



23


-

DSRD

DCE DTE

Linie TxD (Transmitted Data) i RxD (Received Data) są właściwymi przewodami służącymi wymianie danych. Pozostałe są liniami sterującymi, posiadającymi następujące znaczenie:

RTS (Request To Send) urządzenie DTE (terminal, PC) sygnalizuje tą linią zamiar przekazywania danych do DCE (modemu). Modem przygotowuje się do odbioru danych.

CTS (Clear To Send) linią tg przesyłane jest potwierdzenie przyjęcia sygnału RTS przez DCE (modem) i stwierdzenie gotowości do odbioru danych od DTE. Komputer może rozpocząć przekazywanie danych.

Para sygnałów sterujących RTS/CTS może przy półdupleksowym trybie pracy łącza sterować kierunkiem transmisji, przydzielając połączonym korespondentom na przemian rolę nadawcy i odbiorcy.

DSR (Data Set Ready) specyfikacja RS-232C określa ten sygnał jako meldunek urządzenia DCE (zwykle modemu), że zostało nawiązane połączenie i układ jest gotów do przyjęcia danych od DTE (zwykle komputera). W praktyce większość modemów nie wykorzystuje tej linii i jest ona sztucznie utrzymywana w stanie aktywnym, nie mówiąc nic o istnieniu połączenia z korespondentem. Po poziomie tego sygnału można co najwyżej wnioskować, czy modem jest w ogóle włączony.

DTR (Data Terminal Ready) sygnał ten wskazuje w ogólności na gotowość urządzenia DTE (komputera). Musi on pozostawać aktywny przez cały czas trwania połączenia. Para sygnałów DTR i DSR odpowiada za utrzymanie połączenia, podczas, gdy sygnały RTS i CTS są odpowiedzialne za przekazywanie danych i ewentualne sterowanie kierunkiem ich przepływu (w trybie półdupleksowym), czyli tzw. handshaking.

DCD (Data Carrier Detect) modem (DCE) sygnalizuje tą linią odbiór fali nośnej, co oznacza, że druga strona jest w trakcie nawiązywania połączenia Sygnał DCD pozostaje aktywny przez cały czas trwania transmisji.

RI (Ring Indicator) w przypadku połączenia modemów przez sieć telefoniczną urządzenie DTE (komputer) informowane jest o odebraniu sygnału odpowiadającego wywołaniu abonenta (dzwonieniu).

DSRD (Data Signal Rate Detector) linia ta występuje tylko w 25-końcówkowej wersji łącza. Umożliwia dostosowanie się korespondentów do jednej z dwóch możliwych prędkości transmisji. Z sygnału tego mogą korzystać obie strony połączenia.


Bezpośrednie programowanie rejestrów UART
Każdemu z zaakceptowanych przez BIOS łącz szeregowych przydzielany jest fragment przestrzeni adresowej wejścia-wyjścia. W przydzielonym danemu łączu obszarze widziane są jego wszystkie rejestry; początek obszaru stanowi tzw. adres bazowy. Informacja o przyporządkowaniu adresów bazowych łączom szeregowym przechowywana jest w obszarze danych BIOS.


Adres

Wielkość

Zawartość

Wartość standardowa

0040:0000h

słowo

adres bazowy łącza COM1

3F8h

0040:0006h



słowo

adres bazowy łącza COM4

2E8h

Liczbę zainstalowanych w systemie łącz określają trzy najmniej znaczące bity bajtu zlokalizowanego pod adresem 0040:00llh. W bajtach tych kodowana jest binarnie liczba łącz. Starsze wersje BIOS często nie obsługują łącz COM3 i COM4, które nie są wręcz rozpoznawane przez procedury POST, a ich adresy nie są umieszczane w obszarze danych BIOS.

Standardową linią przerwaä sprzętowych stowarzyszoną z łączami COM1 i COM3 jest IRQ4. Łącza COM2 i COM4 dołączane są zwykle do linii IRQ3. Przerwania nie są jedyną możliwością obsługi łącza szeregowego; drugą możliwością jest polling. Szczegóły znajdzie Czytelnik w dalszej części tego rozdziału.
Adresy rejestrów danego łącza podaje się zwykle stosunku do jego adresu bazowego (jako tzw. przemieszczenie - offset). Przemieszczenie równe zero oznacza adres bazowy. Trzy linie adresowe A2-AO układu 8250 dają możliwość zaadresowania ośmiu portów (przemieszczenie 0-7). Ponieważ sumaryczna liczba wszystkich rejestrów układu przekracza 8, wprowadzona zastała sztuczna, czwarta linia adresowa. Jej funkcję pełni bit 7 (B7) rejestru formatu danych (przemieszczenie 03h), określany często mianem DLAB (ang. Divisor Latch Access Bit). Bit ten musi być ustawiony, jeżeli adresujemy jedną ze składowych rejestru podzielnika częstotliwości i wyzerowany przy dostępie do rejestrów buforowych nadajnika i odbiornika oraz rejestru konfiguracji przerwań (przemieszczenie 01h). W obydwu stanach bitu 7 adresy na liniach A2-AO pokrywają się.


Rejestr UART

Przemieszczenie

DLAB

A2

A1

AO

Bufor odbiornika (RBR - Receiver Buffer Register)

00h

0

0

0

0

Bardziej znacząca (MSB) część podzielnika



01h

1

0

0

1

Przy dostępie do pozostałych rejestrów układu UART stan bitu B7 nie odgrywa roli.




Rejestr UART

Przemieszczenie

A2

A1

AO

Rejestr identyfikacji przerwania (IIR - Interrupt Identification Register)

02h

0

1

0

Rejestr dodatkowy (tylko w układzie 16450)

07h

1

1

1

Napływający do łącza szeregowy strumień danych przetwarzany jest na postać równoległą i składany w rejestrze buforowym odbiornika (przemieszczenie 0). Bit danych, który nadejdzie jako pierwszy, zajmuje w bajcie pozycję najmniej znaczącą. Należy pamiętać, że formaty ramki o 5, 6 i 7 bitach danych wymagają zamaskowania brakujących, bardziej znaczących pozycji bitowych, które są nieokreślone.


Przerwania generowane przez łącze szeregowe
Układ UART może być źródłem przerwań sprzętowych, sygnalizując tym samym konieczność obsługi przez procesor. Metodą alternatywną do stosowania przerwań jest tzw. polling. Procesor testuje w wybranych przez siebie momentach stan łącza i w przypadku stwierdzenia obecności znaku w buforze odbiornika zostaje on odczytany. Łatwo tu zauważyć niebezpieczeństwo "połykania" już odebranych przez łącze znaków, które nie zostały na czas odczytane z bufora i uległy zamazaniu nowymi wartościami. Zaistnienie takiego faktu można co prawda stwierdzić badając bit 1 bajtu statusu łącza (por. funkcje przerwania 14h), ale straconego znaku nie da się już odzyskać.
Rejestr konfiguracji przerwań
Warunki, w których UART będzie generował przerwanie sprzętowe (tj. dodatni impuls na wyjściu INTRPT) można określić programując rejestr konfiguracji przerwań IMR (przemieszczenie 01h).


x

x

x

x

bit3

bit2

bit1

bit0

bity 7-4 bez znaczenia.

bit 3 1=przerwanie generowane jest w wyniku zmiany stanu jednego z wejściowych sygnałów sterujących łącza RS-232C (CTS, DSR, DCD, RI).

bit 2 1 = przerwanie generowane jest w wyniku błędu parzystości, protokołu, przepełnienia lub zerwania połączenia

bit I 1= przerwanie generowane jest na skutek opróżnienia rejestru przesuwnego nadajnika (ang. THRE - Transmitter Holding Register Empty).

bit 0 1 = przerwanie generowane jest, gdy w rejestrze buforowym odbiornika znajduje się odebrany bajt danych.


Rejestr identyfikacji przerwań
Dokładną przyczyną przerwania można określić analizując rejestr identyfikacji przerwań IIR (przemieszczenie 02h), którego budowę pokazano poniżej:


0

0

0

0

0

bit2

bit1

bit0

bity 7-3 00000.

bity 2-1 kod identyfikacyjny przerwania. bit 0 stan przerwania:

0 = przerwanie oczekuje na obsługę, 1 = brak przerwań.


Przyczynę przerwania określa kod identyfikacyjny:


Bit 2

Bit 1

Przyczyna przerwania

Priorytet

0

0

zmiana stanu jednego z sygnałów sterujących łącza RS-232C (CTS, DSR, RI, DCD)

najniższy (3)

1


1

stwierdzono błąd parzystości, protokołu, przepełnienie bufora odbiornika lub zerwanie łączności

najwyższy (0)

Zidentyfikować można, naturalnie, tylko te przerwania, które zostały wcześniej dopuszczone maską rejestru przerwań IMR (przesunięcie 01h). Jeżeli jednak wyjście INTRPT układu UART jest połączone z odpowiednią linią IRQ, a procedura obsługi tego przerwania składa się z samej instrukcji iret (co oznacza natychmiastowy powrót bez podejmowania żadnych czynności), to mimo istnienia fizycznego połączenia INTR-IRQn mamy tu do czynienia z pollingiem.

Bit 0 rejestru identyfikacji i umożliwia szybką diagnozę, czy procedura obsługi przerwania ma wkraczać do akcji, Wszystkie przerwania o niższym priorytecie są zablokowane tak długo, jak długo nie zostanie obsłużone przerwanie o priorytecie wyższym. Procedura obsługująca łącze musi więc podjąć stosowne kroki. Dla układu UART obsługa przerwania oznacza:


Źródło przerwania

Obsługa przerwania

Zmiana stanu jednego z wejść sterujących łącza RS-232C

Odczytanie rejestru wejściowych sygnałów sterujących MSR (przemieszczenie 06h)

Błąd transmisji lub przerwanie połączenia



Odczytanie rejestru stanu transmisji LSR (przemieszczenie 05h)

Wykonanie stosownych czynności w stosunku do przerwania o wyższym priorytecie (tj. niższym numerze!) otwiera drogę ewentualnym zgłoszeniom o priorytecie niższym, które również musz0 być obsłużone aby układ UART mógł być źródłem kolejnych przerwań.



Rejestr formatu danych
Pod przemieszczeniem 03h zlokalizowany jest rejestr formatu danych LCR. Określa on format ramki oraz steruje dostępem do rejestru podzielnika generatora synchronizującego Jego postać jest następująca:


bit7

bit6

bit5

bit4

bit3

bit2

bit1

bit0

bit 7 czwarta linia adresowa (DLAB):

1= udostępnienie rejestru podzielnika,

0 = udostępnienie buforów nadajnika, odbiornika i rejestru konfiguracji IRQ.

bit 6 1 = przerwanie połączenia (Break) przez wymuszenie stanu 0 na wyjściu

SOUT.


bity 5-3 tryb kontroli parzystości:

000= brak kontroli,

001 = nieparzysta (sumaryczna liczba jedynek pola danych i bitu parzystości
jest nieparzysta),

011= parzysta (sumaryczna liczba jedynek pola danych i bitu parzystości jest


parzysta),

100= tzw. kontrola typu "mark" (bit parzystości stale równy 1, niezależnie od


danych),

111= tzw. kontrola typu "space" (bit parzystości zawsze równy 0, niezależnie od danych).

bit 2 liczba bitów stopu:

1= 2 bity stopu,

0= 1 bit stopu.

bity 1-0 liczba bitów danych:

00= i bitów danych,.

01= 6 bitów danych,

10= 7 bitów danych,

11= 8 bitów danych.


Ustawienie bitu 6 tego rejestru symuluje przerwanie połączenia. Wyjście SOUT przechodzi do niskiego poziomu logicznego, a zatem na linii TxD pojawia się napięcie +12 V na skutek odwracającego działania wzmacniaczy linii Stan ten należy odróżnić od braku danych w rejestrze przesuwnym nadajnika, kiedy to wyjście SOUT znajduje się w wysokim stanie logicznym (co odpowiada +5 V) i, stosownie do tego, zanegowane wyjście TxD ma poziom -12 V. Ramka w formacie 5 bitów danych posiada automatycznie wydłużony o 50% bit stopu.
Prędkość transmisji
Sygnał odniesienia pochodzący z rezonatora kwarcowego lub generatora dołączonego do wejść XTAL1 i XTAL2 ma częstotliwość 1.8432 MHz. Jak już wiemy, przebieg ten podlega dwukrotnemu podziałowi: raz przez programowany dzielnik częstotliwości i drugi raz przez stały współczynnik 16. Można. też powiedzieć, że dzielnik programowany dokonuje podziału częstotliwości 115200 Hz, gdyż tyle uzyskujemy z podziału 1.8432 MHz przez 16. Efektywna prędkość transmisji może być więc zawsze określona jako 115200 : podzielnik 16-bitowy rejestr podzielnika (przemieszczenie 00h dla LSB i 01h dla MSB) dostępny jest wyłącznie przy ustawionym bicie 7 rejestru formatu danych LCR. Ponieważ najmniejszą akceptowalną przez ten rejestr wartością jest 1, wynika stąd maksymalna prędkość transmisji UART równa 115200 bodów.
Przykład:

; dla 4800 bodów mamy podzielnik 24

mov dx,2fbh ; adres portu LCR

in al,dx ; pobierz zawartość rejestru LCR portu COM2

or a1,10000000b ; ustaw bit 7

out dx,al ; zapisz rejestr LCR

mov al,24 ; LSB = 24

mov dx,2f8h ;adres portu podzielnika (LSB)

out dx,al ; wpisz LSB podzielnika

mov a1,0 ; MSB = 0

inc dx ; DX <- adres portu podzielnika (MSB)

out dx,al ; wpisz MSB podzielnika

mov dx,2fbh ; adres portu LCR

in al,dx ; pobierz zawartość rejestru LCR portu COM2

and a1,01111111b ; wyzeruj bit 7

out dx,al ; zapisz rejestr LCR


Rejestr wyjściowych sygnałów sterujących łącza RS-232C
Na stan linii RTS i DTR łącza mamy wpływ poprzez rejestr wyjściowych sygnałów sterujących RS-232C (MCR - przemieszczenie 04h). Rejestr ten daje też możliwość swobodnej manipulacji stanem końcówek OUT1 i OUT2. Jak wspomniano wcześniej, wyjście OUT2 służy sprzętowemu blokowaniu wszelkich sygnałów przerwań pochodzących od UART. Postać rejestru MCR jest następująca

bity 7-5 bez znaczenia.

bit 4 1= połączenie wyjścia SOUT układu UART z wejściem SIN.

bit 3 1= aktywowanie sygnału OUT2.

bit 2 1= aktywowanie sygnału OUT1.

bit 1 1= aktywowanie sygnału RTS.

bit 0 1= aktywowanie sygnału DTR.
Rejestr wejściowych sygnałów sterujących łącza RS-232C
Zawartość rejestru wejściowych sygnałów sterujących MSR (przemieszczenie 06h) odzwierciedla stan wejściowych linii sterujących łącza. Postać tego rejestru przedstawiono poniżej.

bit 7 1= sygnał DCD jest aktywny (0= nieaktywny).

bit 6 1= sygnał RI jest aktywny (0= nieaktywny).

bit 5 1= sygnał DSR jest aktywny (0= nieaktywny).

bit 4 1= sygnał CTS jest aktywny,(0= nieaktywny).

bit 3 1= stwierdzono zmianę poziomu sygnału DCD.

bit 2 1= stwierdzono zmianę poziomu sygnału RI.

bit 1 1= stwierdzono zmianę poziomu sygnału DSR.

bit 0 1= stwierdzono zmianę poziomu sygnału CTS.
Mniej znacząca połowa tego rejestru (bity 3-0) zawiera informację o ewentualnej zmianie stanu danej linii od czasu ostatniego odczytu rejestru. Wykonanie rozkazu in zawsze zeruje te bity. Wejściowe sygnały sterujące DCD, RI, DSR i CTS podlegają inwersji na drodze od rejestru sterującego do końcówek układu UART. W połączeniu z inwersyjnym działaniem wzmacniaczy linii wysoki poziom logiczny wejścia ustawia stosowny bit rejestru. Bit wyzerowany oznacza obecność na danej linii napięcia -12 V.
Rejestr stanu transmisji
Stan, w jakim znajdują się w danym momencie część odbiorcza i nadawcza układu UART można odczytać z rejestru stanu transmisji LSR (przemieszczenie O5h). Jego postać przedstawiono poniżej.

bit 7 zawsze 0.

bit 6 1 = bufor odbiornika i rejestr przesuwny nadajnika są puste,

0 = w buforze odbiornika albo w rejestrze przesuwnym nadajnika znajdują się dane.

bit 5 1= rejestr przesuwny nadajnika jest pusty.

bit 4 1= połączenie zostało przerwane (Break).

bit 3 1 = błąd protokołu (Frame Error - niezgodny format danych lub prędkość
transmisji).

bit 2 1= błąd parzystości (Parity Error).

bit 1 1= błąd przepełnienia bufora odbiornika (Overrun Error).

bit 0 1= odebrany bajt spoczywa w rejestrze buforowym odbiornika,

0 = bufor odbiornika pusty.
Opisany rejestr można wykorzystać podczas obsługi łącza szeregowego przez polling.
Specyfika układu UART 16450
Układ 16450 dysponuje dodatkowym rejestrem zlokalizowanym pod przemieszczeniem 07h. Może on być wykorzystywany jako dodatkowy bufor nadajnika lub odbiornika, jeżeli z jakichkolwiek względów nie chcemy do tego celu używać pamięci operacyjnej. Stan tego rejestru nie wpływa w żaden sposób na pracę układu. Jego obecność jest jednocześnie gwarancją, że układ nie jest typu 8250 i może być programowany do prędkości 115200 bodów.



  1. Przebieg ćwiczenia

Przed przystąpieniem do ćwiczeń należy przygotować procedury w języku C (C++) umożliwiające dwustronną komunikację poprzez port szeregowy w standardzie RS-232.

Podczas zajęć należy zrealizować:

Odczyt konfiguracji wszystkich modułów.

Zmiana stanu wyjść cyfrowych.

Odczyt sygnału z wejść analogowych.

Komendy sterujące powinny być tak zrealizowane aby umożliwić zmianę parametrów (np. stanu wyjść cyfrowych) podczas pracy programu.

Zrealizować obsługę sygnałów wysyłanych przez system ADAM.



Zapoznanie się z programem do wizualizacji procesu Ph (SCADA).



System rozproszony ADAM str.
1   2


©absta.pl 2016
wyślij wiadomość

    Strona główna