Powrót

Zrozumieć mikroprocesory – porty mikroprocesora

Porty mikroprocesora to sprzętowa realizacja interfejsu umożliwiającego komunikację z otoczeniem. Historycznie patrząc, ewoluowały one od prostych rozwiązań rejestrowych do podzespołów realizujących nawet bardzo złożone działania. To właśnie „siła” tych elementów wpływa na popularność tych czy innych mikrokontrolerów.

Trudno sobie dzisiaj wyobrazić jakikolwiek system mikroprocesorowy bez możliwości komunikacji z nim. To właśnie porty stanowią element pozwalający na interakcję procesora z otoczeniem. Można posłużyć się taką analogią: port w mikroprocesorze jest niczym port morski, stanowiący okno na świat, pozwalający na wymianę czegokolwiek z resztą świata (fotografia tytułowa jako własność publiczna udostępniona na stronie polskiej Wikipedii). W świecie mikroprocesorów takiej wymianie podlega jedynie informacja.

Dwie koncepcje

Naturalną konsekwencją użycia portu przez mikroprocesor jest konieczność rozróżnienia go pośród wszystkich innych. W tym świecie mechanizmem pozwalającym rozróżniać elementy jest jego adres. W przypadku pamięci operacyjnej pozwala on na wyselekcjonowanie z całego zestawu jednej komórki i przesłanie jej do rejestrów mikroprocesora (jak i również w drugą stronę: z rejestru mikroprocesora do komórki pamięci). Dokładnie identycznie odbywa się to w komunikacji z portami.

Skoro mowa jest o adresie, to oczywistym skojarzeniem jest przestrzeń adresowa. Możliwości są dwie: albo jest to nowa, niezależna przestrzeń, albo do tego celu wykorzystana jest już istniejąca. Pierwszy wariant początkowo był bardzo popularnym rozwiązaniem. Takim sposobem mogą pochwalić się procesory firmy Intel (zaczynając od i8080, i8088 aż do współcześnie różnych wariantów procesora Pentium) jak również procesory bazujące na tej koncepcji działania, jak przykładowo układy z rodziny Z80. Dysponowały one innymi instrukcjami do operowania w przestrzeni pamięci oraz w przestrzeni portów wejścia/wyjścia. Przykładowo: instrukcja LD A,(1234 h) przesyła zawartość komórki o podanym adresie z komórki w przestrzeni pamięci (gdzie oczywiście do jej pełnej identyfikacji niezbędny jest adres 16-bitowy) oraz instrukcja IN A,(12 h), której zadaniem jest wczytanie zawartości portu o podanym adresie z przestrzeni portów wejścia/wyjścia (gdzie port źródłowy jest identyfikowany liczbą 8-bitową). Reasumując, to instrukcja determinuje miejsce docelowe (lub źródłowe, w zależności od kierunku przesłania). Dla przestrzeni portów popularnym mnemonikiem takiej instrukcji jest IN (od ang. input – wejście) lub OUT (od ang. output – wyjście). Tego typu rozwiązania, jak to często bywa w rzeczywistości, miały swoje wady i zalety. Dodatkowa przestrzeń adresowa to pewna komplikacja sprzętowa w budowie samego procesora, ale jest to ból głowy raczej projektantów procesora, niż jego użytkowników. Procesor ma pin, którego stan pozwala określić, czy adres wystawiony na szynie adresowej dotyczy komórki pamięci czy portu z przestrzeni I/O (wejścia i wyjścia). Drugą komplikacją, która okazuje się istotną zaletą, jest konieczność budowy zewnętrznych (poza samym mikroprocesorem) rozwiązań umożliwiających wybranie danego portu. Bardzo często przestrzeń adresowa I/O była znacząco mniejsza od przestrzeni adresowej pamięci, jak w przypadku Z80 (jak również i8080, i8085) adres portu był 8-bitowy (rysunek 1). To pozwalało na prostszą budowę układów selekcji portów: zamiast budować dekoder rozpatrujący 16 bitów linii adresowych branych było pod uwagę 8 linii. Również dodatkowa przestrzeń adresowa ma swoje implikacje w tworzeniu programów. Nie miało to większego znaczenia w czasach gdy programiści tworzyli programy w językach typu assembler. Postępująca automatyzacja procesu tworzenia oprogramowania doprowadziła do powstania kompilatorów języków, które musiały uwzględniać tę specyfikę adresową (ale to z kolei ból głowy twórców oprogramowania narzędziowego).

Rysunek 1

Drugim wariantem jest wykorzystanie istniejącej przestrzeni adresowej. Protoplastą takiego rozwiązania jest procesor MC6800, w którym nie istniała dodatkowa przestrzeń (rysunek 2). Jest ona określana jako mapowanie portów we/wy w pamięci (ang. memory mapped I/O). Jest to koncepcyjnie prosta idea oznaczająca, że określone komórki przestrzeni adresowej są traktowane odmiennie (nie jako komórki pamięci lecz jako komórki urządzeń wejścia/wyjścia). W takim przypadku projektant musiał dostępną przestrzeń jakoś sam podzielić, czyli określić w jakich rejonach przestrzeni będzie program (pamięć), gdzie są dane (również pamięć), a gdzie będą zlokalizowane porty wejścia oraz wyjścia (czyli już nie pamięć). Te działania muszą być skorelowane z rozwiązaniami sprzętowymi, gdyż wystawiona na szynie adresowej kombinacja bitów adresu musi spowodować aktywację ściśle określonego elementu.

Rysunek 2

Prostota koncepcji jest okupiona większą komplikacją sprzętową związaną z generowaniem sygnałów aktywujących przyłączone do mikroprocesora porty. W przeciwieństwie do intelowej (i8085) koncepcji 8-bitowej szyny adresowej dodatkowej przestrzeni tu występuje 16-bitowa szyna adresowa.

Pewnym niebezpieczeństwem, czyhającym na projektantów, często są uproszczenia w budowie wspomnianych dekoderów adresowych. Spotykanym rozwiązaniem jest niepełne dekodowanie adresu. Prostym rozwiązaniem jest użycie układu 74HCT138, który jest dekoderem o ośmiu wyjściach.

Koniecznością jest uwzględnienie większej liczby bitów adresowych (co rozbudowuje układ) aby precyzyjnie wyselekcjonować określoną komórkę.

(…)

——– ciach! ——–

To jest tylko fragment artykułu, którego pełna wersja ukazała się w numerze marcowym czasopisma Zrozumieć Elektronikę (ZE 3/2024). Pełną wersję czasopisma znajdziesz pod tym linkiem. Natomiast niepełna, okrojona wersja, pozwalająca zapoznać się z zawartością numeru ZE 3/2024 znajduje się tutaj.

Andrzej Pawluczuk
apawluczuk@vp.pl

 

Uwaga! Osoby, które nie są (jeszcze) stałymi Patronami ZE, mogą nabyć PDF-y z pełną wersję tego numeru oraz wszystkich innych numerów czasopisma wydanych od stycznia 2023, „stawiając kawę” (10 złotych za jeden numer czasopisma w postaci pliku PDF).
W tym celu należy kliknąć link (https://buycoffee.to/piotr-gorecki), lub poniższy obrazek
Postaw mi kawę na buycoffee.to
Następnie wybrać:
– jeśli jeden numer ZE – 10 zł,
– jeśli kilka numerów ZE – WSPIERAM ZA. I tu wpisać kwotę zależną od liczby zamawianych numerów – wydań (N x 10 zł),
Wpisać imię nazwisko.
Podać adres e-mail.
Koniecznie zaznaczyć: „Chcę dołączyć wiadomość dla Twórcy” i tu wpisać, który numer lub numery mamy wysłać na podany adres e-mailowy.