Wstęp: Interfejs portu równoległego 6821 i portu szeregowego 6850 firmy Motorola Struktura systemu 68008 z układami peryferyjnymi 6821, 6050 Na rysunku 1.1 pokazano strukturę stanowiska z interfejsami 6821 i 6850 oraz wskazano najwaŝniejsze, uŝywane w ćwiczeniu przyciski manipulacyjne. Rys.1.1. Struktura stanowiska pomiarowego. Konsola sterująca systemu Na rysunku 1.2. pokazano konsolę obserwacyjno- sterującą systemu 68008. 2
Rys.1.2. Konsola obserwacyjno- sterująca. MC 6821 MC 6821 jest uniwersalnym programowalnym układem portu równoległego we-wy, umoŝliwiającym łączenie mikroprocesorów rodziny M6800 z urządzeniami zewnętrznymi bez konieczności stosowania w większości przypadków dodatkowej logiki. Komunikacje umoŝliwiają ośmiobitowa dwukierunkowa magistrala danych oraz linie kontrolne. Zasadnicza konfiguracja PIA (Perypherial Interface Adapter) jest ustawiana programowo podczas uruchamiania systemu. KaŜda z zewnętrznych linii danych moŝe być uŝywana jako wejście lub wyjście. KaŜda z czterech linii kontrolnych przerwań moŝe zostać zaprogramowana w jednym z kilku dostępnych trybów. Świadczy to o duŝej elastyczności tego urządzenia. W skład układu wchodzą: -ośmiobitowa dwukierunkowa szyna danych do komunikacji z jednostką centralną, -dwie ośmiobitowe dwukierunkowe szyny łączące urządzenia zewnętrzne (porty), - dwa programowalne rejestry kontrolne kierunku danych, - cztery linie przerwań, - osiem sterujących linii wejściowych (trzy linie wyboru układu, dwie linie wyboru rejestru, dwie linie Ŝądania przerwania, odczyt/zapis, zezwolenia i reset). 3
Tabela 1.1. Adresacja rejestrów wewnętrznych MC6821 Adres Rejestr kontrolny Wybrany rejestr CRA2 CRB2 FFFFFE70 1 X danych portu A FFFFFE70 0 X kierunku portu A FFFFFE71 X X sterujący portu A FFFFFE72 X 1 danych portu B FFFFFE72 X 0 kierunku portu B FFFFFE73 X X sterujący portu B CRA2, CRB2 bity rejestru kontrolnego przełączające dostęp do rejestru kierunku i danych. Te dwa rejestry znajdują się pod tą samą lokacją adresową i dlatego dostęp do nich jest rozdzielony przy pomocy bitu 2 rejestru kontrolnego danego portu. Po sygnale RESET wszystkie linie portów pracują jako wejścia, linie CA2 CB2 teŝ są ustawione jako wejścia. Przerwania są zablokowane. Rejestry kontrolne portu A i B Rejestry kontrolne umoŝliwiają jednostce centralnej kontrolowanie funkcji linii CA1, CA2, CB1, CB2. Na dodatek pozwalają na odblokowywanie linii przerwań i kontrolę priorytetu przerwań. Bity 0 do 5 obu rejestrów mogą być zapisywane i odczytywane przez CPU. Bity 6 i 7 słuŝą tylko do odczytu i mogą zostać zmodyfikowane przez zewnętrzne przerwanie wystawiane na zewnętrznych liniach CA1, CA2, CB1, CB2. Dokładny format rejestru kontrolnego zamieszczono poniŝej. Tabela 1.2 Rejestr kontrolny 6821 IRQA(B)1 Flag IRQA(B)2 Flag CA2 (CB2) DDR Access CA1 (CB1) Control B0 - CA1(CB!) = 0 blokada przerwania od aktywnego wejścia CA1(CB1) = 1 odblokowanie przerwania B1 - CA1(CB1) = 0 Przerwanie wystawiane przy zmianie wejścia CA1(CB1) ze stanu wysokiego na niski = :1 z niskiego na wysoki B2 - = 1 dostęp do rejestru danych = 0 dostęp do rejestru kierunku B3,B4,B5 - ustawia funkcję linii CA2 i CB2 B6 - flaga zgłoszenia przerwania gdy linie CA2(CB2) są wejściami i wystąpi aktywna zmiana na tych liniach. B7 - flaga zgłoszenia przerwania od aktywnego przejścia na liniach wejściowych CA1(CB1) PoniŜej omówiono szerzej niektóre z bitów rejestru sterującego. Bity kontroli dostępu danych (CRA2, CRB2). 4
Bit 2 w rejestrze kontrolnym decyduje o wyborze zewnętrznego rejestru wyjściowego (Data Perypherial Output Register) lub kierunku danych (Data Direction Register) w sytuacji, gdy sygnały wyboru rejestru i układu są odpowiednio wysterowane. Flagi przerwań (CRA6, CRA7, CRB6, CRB7). Cztery bity flagi przerwań ustawiane są w wyniku aktywnego przejścia sygnału na liniach kontrolnych przerwań podczas gdy linie te zostały zaprogramowane jako wejściowe. Bity te nie mogą być ustawiane bezpośrednio przez jednostkę centralną poprzez szynę danych. Kasowanie odbywa się pośrednio w cyklu odczytu zewnętrznych danych. Kontrola linii CA2, CB2. Bity 3,4 i 5 rejestru są uŝywane do kontroli linii CA2 i CB2. Bity te decydują czy linie te traktowane są jako linie wejściowe czy wyjściowe kontrolne. Jeśli w CRA(B)5 wpiszemy zera CA2 i CB2 traktowane są jako linie wejściowe przerwań podobnych do CA1 i CB1. Jedynki determinują funkcje CA2 i CB2 jako wyjściowych linii uŝywanych do kontroli przesyłania danych. Rejestry kierunku: Są rejestrami 8 bitowymi wpisanie na pozycję bitu 0 powoduje ustawienie pinu portu jako wejścia a wpisanie 1 jako wyjścia. Dostęp do rejestru poprzez ustawienie bitu 2 w rejestrze sterującym na 0. Programowanie układu: -Wpisać słowo sterujące z bitem 2 wyzerowanym aby uzyskać dostęp do rejestru kierunku. -Pod adres rejestru dane/kierunek wpisać bajt który ustali kierunek poszczególnych bitów (uwaga w module port A - wszystkie bity wyjście port B wszystkie bity wejścia). -Do rejestru sterującego wpisać bajt z bitem 2 w 1 (dostęp do rejestru danych), a pozostałe bity zgodnie z zadaniem wykonywanym. - zapisać na port dane lub odczytać port. Układ M6850 Układ ten jest interfejsem szeregowym słuŝącym do komunikacji asynchronicznej. UmoŜliwia on formatowanie i kontrolę danych dla połączenia szeregowej asynchronicznej komunikacji z systemem MC6800 lub MC68008. Interfejs posiada następującą logikę umoŝliwiającą transfer danych przez 8 bitową dwukierunkową magistralę danych: -select -enable 5
-read/write -interrupt -bus interface logic Równoległe dane szyny systemu są szeregowo nadawane i odbierane przez asynchroniczny sprzęg danych z odpowiednim formatowaniem i kontrolą błędów. Programowalny rejestr sterujący umoŝliwia ustawienie róŝnej długości słowa, stosunek podziału zegara, kontrolę nadawania i odbioru oraz kontrolę przerwań. Istnieją równieŝ linie kontrolne dla modemu. Na magistrali systemu ACIA (port szeregowy) zajmuje dwie adresowalne lokacje pamięciowe. Wewnętrznie są cztery rejestry: dwa tylko do odczytu: - rejestr statusowy, - rejestr odbiornika dwa do zapisu: -rejestr sterujący - bufor nadajnika. PoniewaŜ układ nie jest wyposaŝony w wejście zerujące RESET, dlatego przed jego zaprogramowaniem niezbędne jest programowe wyzerowanie (Master Reset) bity CR0 i CR1 rejestru sterującego na 1 *. Tabela 1.3. Lokacje adresowe interfejsu Adres dostępny rejestr FFFFFE78 odczyt - rejestr statusowy zapis - rejestr sterujący FFFFFE79 odczyt - bufor odbiornika zapis - bufor nadajnika Tabela 1.4. Rejestr kontrolny (Control Register) CR7 CR6 CR5 CR4 CR3 CR2 CR1 CR0 Tabela 1.5. Funkcje bitów CR0 i CR1 CR1 CR0 funkcja 0 0 1 0 1 16 1 0 64 1 1 *Master Reset Tabela 1.6. Bity do ustawiania długości słowa: CR4 CR3 CR2 funkcja 0 0 0 7Bits+Even Parity+2Stop Bits 0 0 1 7Bits+Odd Parity+2Stop Bits 0 1 0 7Bits+Even Parity+1Stop Bits 0 1 1 7Bits+Odd Parity+1Stop Bits 1 0 0 8Bits+2Stop Bits 1 0 1 8Bits+1Stop Bits 6
1 1 0 8Bits+Even Parity+1Stop Bits 1 1 1 8Bits+Odd Parity+1Stop Bits Tabela 1.7. Bity CR5 i CR6 umoŝliwiają kontrolę przerwań od stanu TDRE wyjścia RTS oraz transmisji poziomu BREAK na wyjściu nadajnika. CR6 CR5 funkcja 0 0 RTS=LOW INT. DISABLED 0 1 RTS=LOW INT. ENABLED 1 0 RTS=HIGH INT. DISABLED 1 1 RTS=LOW TRANSMIT BREAK INT. DISABLED Bit CR7 gdy CR7= 1 przerwania od następujących zdarzeń będą odmaskowane RDRF=1 OVRN=1 przejście DCD z 0 na 1. Tabela 1.8. Rejestr Statusowy IRQ PE OVRN FE CTS DCD TDRE RDRF IRQ - wskazuje na stan wyjścia IRQ PE - sygnalizacja błędu parzystości OVRN - sygnalizacja błędu przepisania danej FE - sygnalizacja błędu ramki CTS - wskazuje na stan wyjścia CTS DCD - wskazuje na nieobecność podnośnej w modemie TDRE - wskazuje na pusty bufor nadajnika RDRF - wskazuje skompletowanie danej w odbiorniku Programowanie układu ACIA - Master Reset ( zerowanie programowe interfejsu poprzez zapis słowa sterującego z dwoma jedynkami na bitach CR0 i CR1. - Programowanie bitów kontrolnych układu. - Wysyłanie danych poprzez zapis do nadajnika. - Przeglądanie danych w wyjściowym rejestrze przesuwnym na płycie czołowej poprzez taktowanie przyciskiem CLK (podzielnik zegara ustaw na 1). Instrukcje procesora M68008 uŝywane w ćwiczeniu Tabela 1.9. Kody heksadecymalne rozkazów uŝywanych w ćwiczeniu Zapis adresu do rejestru A0 MOVEA.W #$ adres bazowy,a0 30 7C Adres 2 bajty 7
Zapis danej pod adres wskazywany przez A0 z offsetem dana 16 bitowa offset 16 bitowy MOV.B #$ dana 16 bitowa,$offset,a0 11 7C Odczyt danej do D0 offset 2 bajtowy MOV.B (offset 16 bit,a0),d0 10 28 Zapis danej do D0 offset 16 bitowy MOV.B D0,(offset,A0) 11 40 Skok do samego siebie offset BRA 60 FE Do samego siebie Ćwiczenie Dla wszystkich zadań naleŝy ustawić wektor stosu na 1000h a wektor PC na 800h czyli do komórek od adresu: 000000h wpisywać kolejno Adres Dana 00000000 00 00000001 00 00000002 10 00000003 00 00000004 00 00000005 00 00000006 08 00000007 00 Rozpocząć pisanie programu od adresu 000800h. Zadanie 1- kopiowanie danej z portu równoległego B na port A Zaprogramować układ PIO: - port B- wejściowy - Port A- wyjściowy NaleŜy uŝyć instrukcji z tabeli 1.9. a. Do rejestru adresowego A0 wpisać adres bazowy (najniŝszy z występujących w ćwiczeniu adres portu A- FFFFFE70). W tym celu wystarczy zastosować rozkaz zapisu do rejestru adresowego A0-8
danej 16-to bitowej. Starsze bity zostaną automatycznie zapisane wartościami 1. b. Przełączyć adres FFFFFE70 na adres rejestru kierunku- w tym celu naleŝy wysłać pod adres FFFFFE71 daną z bitem 2= 0, pozostałe bity równieŝ 0 (tabela 1.2.). c. Wysłać pod adres FFFFFE70 daną programującą wszystkie bity jako wyjścia (tekst zaznaczony kolorem czerwonym). d. Przełączyć adres FFFFFE70 na rejestr danych- w tym celu wysłać pod adres FFFFFE71 daną z bitem 2= 1, pozostałe bity 0 (tabela 1.2.). e. Przełączyć adres FFFFFE72 na adres rejestru kierunku- w tym celu naleŝy wysłać pod adres FFFFFE73 daną z bitem 2= 0, pozostałe bity równieŝ 0. f. Wysłać pod adres FFFFFE72 daną programującą wszystkie bity jako wejścia (tekst zaznaczony kolorem czerwonym). g. Przełączyć adres FFFFFE72 na rejestr danych- w tym celu wysłać pod adres FFFFFE73 daną z bitem 2= 1, pozostałe bity 0. h. Odczytać daną z portu B adres FFFFFE72 do D0. i. Wysłać daną z D0 na port A- pod adres FFFFFE70. j. Skok do samego siebie Zanotować stan rejestru kontrolnego przełączającego adres rejestru danych-kierunku na adres rejestru kierunku: IRQA(B)1 Flag IRQA(B)2 Flag CA2 (CB2) DDR Access CA1 (CB1) Control KOD HEX Zanotować stan rejestru kontrolnego przełączającego adres rejestru danych-kierunku na adres rejestru danych: IRQA(B)1 Flag IRQA(B)2 Flag CA2 (CB2) DDR Access CA1 (CB1) Control KOD HEX Program zapisany w mnemonikach i kodach heksadecymalnych umieścić w protokole zaliczeniowym. Mnemonik 9
Adres 800 801 802 803 804 805 806 807 808 Hex Zapisać program do pamięci systemu M68008. Zresetować system. Ustawić daną wejściową portu B (rys.1.1.). Przekrokować program i sprawdzić, czy nastawiona dana jest zgodna z wartością binarną wyświetloną na PA- modułu portu równoległego. Zadanie 2- kopiowanie danej z portu B do nadajnika portu szeregowego NaleŜy uŝyć instrukcji z tabeli 1.9. a. Do rejestru adresowego A0 wpisać adres bazowy (najniŝszy z występujących w ćwiczeniu adres portu A- FFFFFE70). W tym celu wystarczy zastosować rozkaz zapisu do rejestru adresowego A0- danej 16-to bitowej. Starsze bity zostaną automatycznie zapisane wartościami 1. b. Przełączyć adres FFFFFE72 na adres rejestru kierunku- w tym celu naleŝy wysłać pod adres FFFFFE73 daną z bitem 2= 0, pozostałe bity równieŝ 0. 10
c. Wysłać pod adres FFFFFE72 daną programującą wszystkie bity jako wejścia. d. Przełączyć adres FFFFFE72 na rejestr danych- w tym celu wysłać pod adres FFFFFE73 daną z bitem 2= 1, pozostałe bity 0. e. Wysłać do rejestru kontrolnego portu szeregowego (tabela 1.4) daną zerującą port szeregowy. f. Zaprogramować port szeregowy poprzez wysłanie odpowiedniego słowa do rejestru sterującego (tabela 1.4, adresy tabela 1.3): - transmisja 8 bitowa, - bez kontroli parzystości, - 1 bit stopu, - podzielnik zegara przez 1. g. Odczytać daną z portu PB do rejestru D0, h. Zapisać daną z D0 do odbiornika portu szeregowego. i. Program zakończyć instrukcją skoku do samego siebie. Program zapisać w postaci mnemoników do protokołu zaliczeniowego. Mnemonik Po zamianie na kody HEX, program zapisać w tabeli. Adres 800 801 802 803 804 805 806 807 808 Hex 11
Zapisać wartość słowa sterującego układu 6850 dla zerowania- Master RESET. CR7 CR6 CR5 CR4 CR3 CR2 CR1 CR0 Zapisać wartość słowa sterującego dla zadanych parametrów portu szeregowego. CR7 CR6 CR5 CR4 CR3 CR2 CR1 CR0 Wpisać program do pamięci systemu procesorowego. Zresetować system. Przkrokwać program do zapętlenia. Przy pomocy przycisku CLK na module portu szeregowego (rys.1.1.) wysunąć daną z rejestru portu szeregowego i porównać z ustawiona na porcie B układu 6821 daną. Zadanie 3- transmisja: port równoległy PB- port szeregowy- port równoległy PA Zaprogramować układ ACIA do transmisji 8 bitowej Odd Parity 1 bit stopu. Porty układu PIO B- wejście, A- wyjście. Napisać program realizujący odczyt portu B wysłanie na port szeregowy. przepchnąć daną z nadajnika do odbiornika przez zewnętrzny rejestr przesuwny. Odczytać odbiornik i zapisać daną na port A układu PIO. Podobnie jak w poprzednich zadaniach zanotować program w mnemonikach oraz kodzie HEX. 12