3835


System odmierzania czasu 529

Rozdział 9.

System odmierzania czasu

Możliwość precyzyjnego odmierzania odcinków czasowych ma istotne znaczenie w pra­cy systemu. Oto przykładowe operacje wymagające dokładnego określenia czasu:

Układ 8253/8254

Klasyczna architektura komputera PC/XT i PC/AT zawiera jeden programowalny gene­rator typu 8253 lub 8254. Ten drugi różni się minimalnie od pierwszego posiadaniem dodatkowego rozkazu Read-Back. Nowoczesne modele AT, zwłaszcza 386 i 486, dysponują niekiedy dwoma takimi generatorami. Uproszczony schemat blokowy układu 8253 przedstawiony jest na rysunku 9.1.


530

Anatomia PC

Rysunek 9.1.

o AO

BUFOR

Schemat blokowy __-Xl IN.

71 7 LJU~LJ / ^v . ^ ^— ^^ ,/

układu \j [/

DANYCH 1 UKŁADY STERO-

oA1
°WR
°RD

czadowego

WANIA

OCS

8253/8254

0x01 graphic

Magistrala wewnętrzna układu


0x01 graphic

0x01 graphic

0x01 graphic

OUTO

CLK1 GATE1°—

CLKO< GATEO'

30UT1

CLK2£ GATE2 c

)OUT2


Na układ ten składają się trzy w pełni niezależne generatory oznaczone numerami O, l i 2. Każdy z bloków generacyjnych zawiera niezależne wejścia GATE i CLK oraz wyjście OUT. Dla potrzeb programowania generatory połączone są wewnętrzną 8-bitową magi­stralą. Zestaw dodatkowych sygnałów sterujących umożliwia procesorowi dwukierun­kowy dostęp do rejestrów sterujących każdego z nich.

Centralnym elementem każdego z generatorów jest programowany licznik CE (Coun-ting Element), którego ustawiona wstępnie w fazie programowania zawartość może być - zależnie od trybu pracy - na różne sposoby zmniejszana. 16-bitowa liczba przezna­czona do zapisania w rejestrze CE danego generatora dostarczana jest (w porcjach po 8 bitów) magistralą wewnętrzną układu do dwóch stowarzyszonych z danym rejestrem CE rejestrów pośrednich CW^ i CW^. Tam oczekuje na przepisanie do CE pierwszym impulsem na wejściu CLK, który nadejdzie po zaprogramowaniu danego generatora. W podobny sposób, tj. poprzez jednobajtowe rejestry pośrednie CR.H i CR.L, odbywa się transport zawartości rejestru CE w rozkazach sprawdzających jego stan.

Oryginalny generator 8253 umieszczony jest w obudowie 24-końcówkowej, obecnie jednak jego struktura zintegrowana jest zwykle w jednym z układów scalonych wyso­kiej skali integracji tworzących „obudowę" procesora. Wyprowadzenia układu w wersji DIL 24 przedstawione są na rysunku 9.2.

Opis znaczenia końcówek układu 8253 podano poniżej.

GATEO-GATE2 (Gate) — wejścia sygnałów aktywujących (bramkujących)

generatory 0-2;

CLKO-CLK2 (Clock) — wejścia sygnałów taktujących dla generatorów 0-2; OUTO-OUT2 (Outpuf) - wyj ścia generatorów 0-2;

DO-D7 8-bitowa, dwukierunkowa magistrala danych. Kierunek transmisji

ustalany jest sygnałami ~WR i ~RD;


531

System odmierzania czasu

Rysunek 9.2.

Zestaw rejestrów

D7 d

m vcc

1

W

24

procesorów 80x86

D6 d

2

23

ZD WR

dostępnych

D5 d

3

22

ZD RD

dla programisty

D4 d

4

21

Z3 GS

D3 d

5

8253

20

dl A1

D2 d D1 d

6

7

(8254)

19 18

Z3 AO Z3 CLK2

DO d

8

17

Z3 OUT2

CLKO d

9

16

ZD GATE2

OUTO d

10

15

Z3 CLK1

GATEO d

11

14

dl GATE1

GND d

12

13

ZD OUT1


~cs

~WR

~RD

AO-A1

(Chip Select) — niski poziom logiczny na tym wejściu wprowadza układ 8253 w stan programowania. Poziom logiczny na wejściu ~CS nie ma wpływu na pracę generatorów;

(Write) — procesor wymusza niski poziom logiczny na tym wejściu, chcąc zapisywać dane do wewnętrznych rejestrów generatorów;

(Read) - procesor wymusza niski poziom logiczny na tym wejściu, chcąc odczytywać dane z wewnętrznych rejestrów generatorów;

wejścia adresujące w trybie programowania jeden z generatorów 0—2 lub rejestr stanu układu. Możliwe są następujące kombinacje linii adresowych:


AO

Al

Adresowany rejestr

0

0

licznik CEO

1

0

licznik CE1

0

1

licznik CE2

1

1

rejestr stanu


Vcc GND

wejście napięcia zasilającego (+5V); masa zasilania.


Każdy z trzech generatorów układu 8253 może być niezależnie zaprogramowany do pracy w jednym z sześciu trybów. Tylko dwa z nich znajdują zastosowanie w PC, ale nie zapominajmy, że układ ten nie tylko tam jest stosowany. Cechą wspólną wszystkich trybów jest odliczanie „w dół" od ustawionej wartości początkowej 16-bitowego licz­nika CE. Generator rozpoczyna pracę w danym trybie natychmiast po załadowaniu re­jestru sterującego. Moment ten będziemy nazywać stanem początkowym.


532 Anatomia PC

TrybO.

W stanie początkowym wyjście OUT znajduje się w stanie 0. Po załadowaniu do wy­branego licznika CE wartości N (oznaczającej liczbę zliczanych impulsów taktujących) następuje odliczanie impulsów podawanych na wejście CLK do chwili wyzerowania licznika CE, co powoduje pojawienie się na wyjściu OUT stanu l. Stan ten utrzymywać się będzie aż do nadejścia następnego słowa sterującego, programującego generator do pracy w trybie 0. Odliczanie impulsów taktujących ma miejsce tylko wtedy, gdy na wejście GATE podany jest wysoki poziom logiczny.

Tryb 1.

W stanie początkowym wyjście OUT jest w stanie 1. Pierwszy impuls podany na wejście CLK powoduje pojawienie się na wyjściu OUT stanu O, który utrzymuje się do końca zliczania impulsów taktujących. Pierwszy impuls pojawiający się na wejściu CLK po przejściu licznika CE przez stan 0000, powoduje ponownie wystawienie na wyjściu OUT logicznej jedynki. Układ wytwarza więc pojedynczy impuls niskiego poziomu logicznego o czasie trwania jv*tclk, gdzie N jest pierwotną zawartością licz­nika CE, a tclk jest okresem przebiegu taktującego podawanego na wejście CLK.

Stan sygnału GATE musi być utrzymany na poziomie logicznej jedynki przez cały cykl zliczania. Jeżeli sygnał GATE zmieni swój poziom na zero, jego powrót do poziomu wysokiego spowoduje ponowne załadowanie licznika CE wartością N. Możliwe jest oczywiście zapisanie nowej wartości N w czasie pracy generatora (cyklu zliczania), ale będzie ona uwzględniona dopiero od następnego impulsu GATE.

Tryb 2.

Działanie trybu 2. jest analogiczne do opisanego wyżej trybu 1. aż do momentu osiąg­nięcia przez licznik CE wartości 0001, tj. tuż przed końcem odliczania. Stan wyjścia OUT (znajdującego się dotychczas w stanie 1) zostaje wówczas na czas jednego okresu przebiegu taktującego sprowadzony do niskiego poziomu logicznego. Licznik CE łado­wany jest powtórnie wartością N i cykl powtarza się. Zliczanie ma miejsce tylko dla GATE=1 i jest wstrzymywane na czas, gdy GATE=0. W trybie 2. generowany jest-jak widać - okresowo impuls szpilkowy o okresie jV*TCLK i szerokości tclk-

Tryb 3.

Działanie układu 8253 w tym trybie jest identyczne z działaniem w trybie 1. aż do momentu osiągnięcia przez licznik CE wartości N/2. Następuje wówczas zmiana stanu wyjścia OUT z l na 0. Stan OUT=0 utrzymuje się do momentu wyzerowania licznika CE, po czym zmienia się na l. Opisany proces przebiega tylko wtedy, gdy na wejście GATE podany jest stan 1; w przeciwnym razie na wyjściu OUT utrzymuje się stały wy­soki poziom logiczny.


System odmierzania czasu

533


„Zewnętrznie" działanie układu 8253 w trybie 3. sprowadza się do generacji przebiegu prostokątnego o okresie n*tclk- Układy wewnętrzne pracują jednak nieco inaczej, nie odliczają bowiem impulsów taktujących do osiągnięcia przez licznik wartości N/2. Za­miast tego odbywa się dwukrotnie zliczanie impulsów po dwa, co nakłada ograniczenie na dokładność określenia długości generowanych impulsów. Kwantem odmierzanego czasu jest okres przebiegu taktującego tclk i nie można przy nieparzystych W żądać jego podziału na pół. Przy jV parzystych generowany jest przebieg prostokątny o współ­czynniku wypełnienia (stosunku czasu trwania stanu wysokiego do czasu trwania stanu niskiego w ramach jednego okresu) równym 1/2. W przypadku nieparzystej wartości N układy sterowania ładują liczniki CE wartością N—l. Powoduje to, że faza wysokiego poziomu logicznego trwa (7V+l)*TCLK/2, natomiast faza poziomu niskiego (AM)*TCLK/2. Generowany jest więc przebieg prostokątny o współczynniku wypełnienia nieznacznie większym od 1/2. Z oczywistych względów N musi być co najmniej równe 2.

Tryb 4.

W stanie początkowym wyjście OUT jest w stanic wysokim. Pierwszy impuls podany na wejście CLK wpisuje do licznika CE zadaną wartość N. W stanie GATE=1 następne impulsy taktujące powodują zmniejszanie licznika do osiągnięcia wartości 0000. Poziom na wyjściu OUT opada wówczas do zera na czas TCLK. W trybie 4. mówimy o progra­mowym wyzwalaniu licznika, bowiem moment rozpoczęcia odliczania określony jest dokonaniem zapisu do rejestru sterującego.

Tryb 5.

W przeciwieństwie do pracy w trybie 4., licznik wyzwalany jest sprzętowo poprzez zmianę poziomu na wejściu GATE z O na 1. Powoduje to zapisanie do licznika CE wartości W i rozpoczęcie odliczania. Sygnał na wyjściu OUT przyjmuje poziom zera logicznego po N+l cyklach przebiegu taktującego, począwszy od impulsu wyzwalają­cego GATE. Przedwczesne (przed zakończeniem odliczania), ponowne podanie impul­su GATE powoduje odnowienie wartości N, a więc generowany impuls nigdy nie będzie krótszy od założonej wartości.

Wszystkie generatory układu scalonego 8253/8254 zainstalowanego w komputerze PC/XT lub AT taktowane są tą samą częstotliwością zegarową, równą 1.19318 MHz. Sygnał CLK wytwarzany jest w oddzielnym układzie generacyjnym w sposób niezależ­ny od procesora. Przyporządkowanie generatorów układu obrazuje rysunek 9.3.


_n_n_n_

CLK=1.19318 MHz

Rysunek 9.3.

Przyporządkowań ie generatorów układu 8253

8253/8254

0

Tryb 2

1

Tryb 3

L

2

Tryb 3

Zegar

RAM

Głośnik


534

Anatomia PC



Programowanie generatora 8253/8254

Poszczególne generatory układu dostępne są programowo poprzez poniższe porty.

Adres

Rejestr

040h (048h)

licznik generatora 0

041h(049h)

licznik generatora 1

042h (04Ah)

licznik generatora 2

043h (04Bh)

rejestr sterujący

Rejestry liczników CE można zapisywać i odczytywać. Rejestr sterujący (wspólny dla całego układu scalonego) może być tylko zapisywany. Numery portów podane w na­wiasach dotyczą drugiego układu 8254, instalowanego w niektórych komputerach AT-386 i 486; konfiguracja dodatkowego układu opisana jest w punkcie Drugi układ 8254 i jego zastosowanie.

Układ 8253 zostaje wprowadzony w tryb programowania po przesłaniu do rejestru sterującego (port 043h) rozkazu o następującej budowie:

bit 7

bito

bit 5

bit 4

bit 3

bit 2

bitl

bitO


bity 7-6

bity 5-4

bity 3-1

bitO

wybór generatora: 00 = generator O, O l = generator l,

Read-Back; rodzaj operacji:

CE (LSB), 10 = zapis lub odczyt tylko bardziej znaczącego bajtu licznika

CE (MSB),

11= zapis lub odczyt obydwu bajtów licznika CE; tryb pracy generatora:

0 = zliczanie w kodzie binarnym (16-bitowym); FFFFh-OOOOh

lub 65535d-0,

1 = zliczanie w kodzie BCD; 9999d-0.


System odmierzania czasu

535


W następnej kolejności należy przesiać dane opisujące stan początkowy licznika CE zaad­resowanego bitami 7-6. Rozkazy zapisujące tylko jedną połowę licznika CE uzupełniane są przez układy sterujące w taki sposób, że pozostała część CE wypełniana jest zerami. Rozkaz adresowany do określonego generatora jest ważny do czasu wysłania następnego rozkazu. Oznacza to, że stan dostępnych przez porty 040h—042h liczników 0-2 można zmieniać „na gorąco" podczas pracy generatora. Obowiązuje jednak sprecyzowane w bi­tach 5^4 znaczenie i ilość akceptowanej przez rejestry informacji. Nie można więc, nie wysyłając nowego rozkazu, modyfikować wyłącznie bardziej znaczącego bajtu licznika, jeżeli pierwszy rozkaz ustawiał jego mniej znaczący bajt. Identyczne ograniczenia obo­wiązują przy odczycie stanu licznika.

W ramach obowiązywania jednego rozkazu można odczytywać tylko tę część licznika, która została tym rozkazem zapisana; w szczególności może to być zawartość całego licznika.

Aktualny stan licznika CE dowolnego z generatorów można uzyskać przez odczyt odpo­wiedniego portu instrukcją in. Instrukcja ta, skierowana do portu licznika danego genera­tora, nie sięga bezpośrednio do rejestru CE, lecz do rejestrów zatrzaskowych CRt i CRn, które oddzielają CE od wewnętrznej magistrali układu. Aby umieścić w tych rejestrach zawartość CE, należy najpierw wysłać do portu 043h słowo rozkazu z wyzerowanymi bitami 5-4. Bity 7—6 takiego rozkazu identyfikują oczywiście odpowiedni generator, a bity 3-0 są w tej operacji ignorowane. Dopiero teraz można bezpiecznie zastosować rozkaz in (odpowiednio raz lub dwa razy) dla odczytania aktualnego stanu licznika CE.

Przykład:

mov al,00h ; adresowany generator O

out 43h,al ; przepisz zawartość CE do CRL i CRH

in al,40h ; odczytaj zawartość CRL do AL

mov al,ah ; przepisz AL do AH

in al,40h ; odczytaj zawartość CRH do AL

xchg al,ah ; zamień połówki rejestru AX -> AX = CE

Nieco skomplikowany sposób odczytu rejestrów CRL i CRH wynika z faktu, że operan-dem rozkazu in może być jedynie rejestr AL (lub AX), natomiast przez port 040h dostępny jest najpierw rejestr CRL, a następnie CRn. Zwróćmy również uwagę, że dla układu 8253 nie ma możliwości odczytania stanu początkowego licznika CE, ustawio­nego trybu pracy ani tego, czy generator programowany był jednym, czy dwoma bajtami. Niemożliwe jest również sprawdzenie, czy licznik odlicza w kodzie binarnym, czy BCD.

Możliwościami uzyskania tych danych dysponuje natomiast, dzięki wbudowanemu rozkazowi Read-Back, układ 8254. W odpowiedzi na ten rozkaz układ zwraca bajt bę­dący źródłem informacji o sposobie zaprogramowania generatora. Rozkaz ten udostęp­nia również alternatywną metodę odczytania aktualnego stanu licznika CE.

Rozkaz Read-Back przekazywany jest przez port rejestru sterującego 043h.

1

1

bit 5

bit 4

bit 3

bit 2

bitl

0


536 Anatomia PC

bity 7-6 11 = sygnatura rozkazu;

bit 5 O = rozkaz podania stanu licznika CE;

bit 4 O = rozkaz podania statusu;

bit 3 l = wybór licznika 2;

bit 2 l = wybór licznika l;

bit l l = wybór licznika 0;

bit O zawsze 0.

Widzimy, że jednym rozkazem Read-Back można odwołać się do kilku generatorów jednocześnie.

Układ 8254 reaguje na rozkaz podania stanu licznika CE zwracając (w zależności od sposobu zaprogramowania) jeden lub dwa bajty w porcie odpowiadającym danemu ge­neratorowi.

Rozkaz określenia statusu (ustawiony bit 4 bajtu rozkazu Read-Back) wyprowadza do portu wybranego generatora następujący bajt statusowy:

bit?

bito

bit 5

bit 4

bit 3

bit 2

bitl

bitO

bit 7 stan wyjścia OUT:

l = wyjście w stanie wysokim,

0 = wyjście w stanie niskim;

bit 6 O = licznik CE został załadowany i może być odczytany,

1 = CE jeszcze nie jest załadowany;

bity 5—4 tryb programowania licznika CE:

bity 3-1 tryb pracy generatora:

bit O sposób odliczania:

0 = zliczanie w kodzie binarnym (16-bitowym); FFFFh-OOOOh

lub 65535d-0,

1 = zliczanie w kodzie BCD; 9999d-0.


System odmierzania czasu

537


Zegar systemowy

Rysunek 9.4. przedstawia schematycznie zasadę funkcjonowania zegara systemowego.


Rysunek 9.4.

Zasada działania

zegara

systemowego

Vc=

CLK 1.19318 MHz

T-TLTLT

^C GA

^ GA

0

8253/54

CLK1

Licznik 0

OUTO f

IRO

8259

INT R

CPU

TEO LK1 TE1 LK2 TE2

2o

OUT1 4o

OUT2 7o

Licznik 1

Licznik 2

RAM

40:70h

40:6Fh

40:6Eh

40:6Dh

4D:6Ch


Generator O zaprogramowany jest do pracy w trybie 2. i pobiera przebieg taktujący CLK o częstotliwości 1.19318 MHz. Licznik CE tego generatora ustawiany jest na wartość FFFFh, co daje współczynnik podziału 65536. W wyniku tego, krótkimi impulsami o częstotliwości 18.2065 Hz wyzwalane jest przerwanie sprzętowe na linii IRQO. Pro­wadzi to do periodycznego wywoływania procedury INT 08h, obsługującej to przerwa­nie. Procedura ta inkrementuje każdorazowo stan 32-bitowego licznika zlokalizowanego w obszarze danych BIOS począwszy od adresu 0040:006Ch.

Adres

Szerokość

Znaczenie

0040h:006Ch

słowo

mniej znaczące słowo licznika

0040h:006Eh

słowo

bardziej znaczące słowo licznika

0040h:0070h

bajt

wskaźnik przepełnienia licznika

Następnie sprawdzane jest, czy nowa zawartość licznika nie przekracza 24 godzin (1573040 impulsów zegara systemowego), a jeżeli tak, to licznik jest zerowany. Licznik ten jest podstawowym źródłem informacji o upływającym czasie, wykorzystywanym przez system operacyjny. Zlicza on jednak czas od momentu startu systemu, a zatem nie pozwala jednoznacznie określić bieżącej daty i czasu. Dane te musimy wprowadzić podczas startu systemu operacyjnego poleceniami systemu datę i time lub za pomocą innego programu, wpisującego odpowiednie wartości do wspomnianego obszaru pamię­ci. Modele AT wyposażone są standardowo w zegar czasu rzeczywistego (z podtrzy­maniem bateryjnym), którego zawartość jest automatycznie przepisywana do pamięci komputera w chwili startu systemu.

W przypadku modelu XT podtrzymywany bateryjnie zegar czasu rzeczywistego znaj­duje się na ogół na wielofunkcyjnej karcie rozszerzenia Multi I/O, zaś aktualizacją czasu i daty zajmuje się dostarczany wraz z kartą dedykowany program (na przykład CLOCK.COM), uruchamiany zwykle w pliku poleceń AUTOEXEC.BAT.


538

Anatomia PC



Układ odświeżania pamięci dynamicznej

Pamięć operacyjna komputera jest pamięcią dynamiczną (ang. DRAM - Dynamie Ran-dom Access Memory). Nośnikiem informacji są w niej ładunki elektryczne uwięzione w krysztale półprzewodnika. Na skutek będących nie do ominięcia właściwości fizycz­nych materiału ładunki te uchodzą do podłoża układu scalonego, tak więc komórka pa­mięci dynamicznej pozostawiona sama sobie ma tendencje do stopniowej utraty infor­macji. Aby temu zapobiec, informację zmagazynowaną w komórce należy co pewien czas odświeżać. Charakterystyczną cechą tego rodzaju pamięci jest to, że każda ope­racja odczytu komórki pamięci powoduje automatycznie jej odświeżenie.

Poszczególne komórki pamięci zorganizowane są w wiersze i kolumny. Organizacja taka sprawia, że odczyt dowolnej z komórek powoduje jednoczesne aktywowanie (odświeżenie) całego wiersza lub kolumny, zależnie od organizacji bloku DRAM. Schemat blokowy mechanizmu odświeżania pamięci przedstawiony jest na rysunku 9.5.


0x01 graphic

Rysunek 9.5.

Schemat

blokowy

działania

mechanizmu

odświeżania

pamięci

CLK 1,19318 MHz -TLOTU

1

CLKO^ GATEO CLK1

8253

oOUTO
DREOO

mac syst

3's

en

trala nowa

A
N

0

8237 DMA

1

., J3ATEI "cc ° *

CLK2 GATE2

1

2

o OUT2 o— f
3

2


Projektanci komputera PC zarezerwowali dla potrzeb układu odświeżania pamięci dynamicznej generator numer 1. Licznik CE tego generatora otrzymuje wartość początkową 18 (12h) - programowany jest tylko mniej znaczący bajt. Generator pracuje w trybie 3., a na wejście CLK podawany jest sygnał taktujący o częstotliwości 1.19318 MHz. Generowany jest więc przebieg prostokątny o współczynniku wypełnienia 1/2 (N=18 jest parzyste) i częstotliwości 1.19318 MHz/18 = 66.288 kHz. Sygnał ten kierowany jest do kanału O układu DMA, a jego narastające zbocze wywołuje regularnie co 15 ms żądanie obsługi. Kanał O DMA jest zaprogramowany do normalnej transmisji typu pamięć-urządzenie wejścia-wyjścia.

Układy sterowania pamięcią, tj. dekodery adresu i wzmacniacze odczytu, zostają pobu­dzone do pracy, co powoduje odświeżenie wszystkich komórek wiersza lub kolumny pamięci. Adresowane przez układ DMA słowo zostaje oczywiście wystawione na magi­stralę danych, jednak żadne z urządzeń wejścia-wyjścia nie czuje się zobligowane do jego odebrania, toteż znika ono z magistrali w trakcie jej następnego cyklu. Kolejna transmisja kanałem O DMA sięga do następnej komórki i tak po pewnym czasie odświe­żeniem objęty zostaje cały obszar pamięci.


System odmierzania czasu 539

Współczynnik podziału równy 1 8 dostosowany był do układów pamięci znajdujących się na rynku w czasach powstawania modelu PC. W ostatnich latach nastąpił ogromny postęp w technologii produkcji układów scalonych. Nowoczesne układy pamięci nie wymagają już tak częstego odświeżania. Zbyt częste, zbędne dostępy do pamięci powo­dują naturalnie spowolnienie pracy całego systemu. Dla każdego modelu komputera można indywidualnie poeksperymentować, zmniejszając częstotliwość pracy układu od­świeżania. Zbyt duże przerwy czasowe objawiają się błędami pamięci, które sygna­lizowane są przez układy kontroli parzystości. Generowane jest wówczas przerwanie NMI, co powoduje wyświetlenie komunikatu i zatrzymanie systemu. Wprowadzane przez nas zmiany w częstotliwości pracy układu odświeżania nie mają oczywiście charakteru trwałego; ponowne załadowanie systemu przywraca wartości początkowe.

Przykładowy program w języku Turbo C pozwoli na kilka doświadczeń na tym polu:

łinclude <stdlib.h> łinclude <dos.h>

/* program REFR reguluje częstotliwość odświeżania pamięci */

int main (int argc , char *argv[]) {

int refr ;

if (argc < 2) /* nie podano częstotliwości odświeżania! */ {

printf("\n Brak parametru!\n Wywołanie: refr <licznik>\n "); return (1) ; }

refr = atoi (argv[l) ) ;

if(refr < 2 || refr > 255) /* podano złą częstotliwość */ (

printf("\n Zły parametr! licznik = 0. . .255\n") ; return (2) ; }

outp (0x43, 0x56) ; /* wyślij słowo sterujące 01010110 */ outp (0x41, refr) ; /* zaprogramuj kanał l generatora*/

/* wartością refr */ printf("Nowy licznik = %d\n",refr); return (0) ;

Wartość parametru programu REFR jest współczynnikiem podziału N licznika CE. Im większe N, tym większe będą przerwy pomiędzy kolejnymi cyklami odświeżania pa­mięci.

W testowanym przez autora komputerze AT-386 taktowanym zegarem 40 MHz, pro­gram SI.EXE (System Info) z pakietu Norton Utilities 6.0 podał w punkcie CPU Speed współczynnik 29 dla N=2 i 41 dla N=255, można więc istotnie zaobserwować wzrost mocy obliczeniowej. Jeżeli Albedzie zbyt duże, należy liczyć się z możliwością zawie­szenia się systemu w najmniej oczekiwanym momencie wraz ze wszystkimi tego kon­sekwencjami (np. niezapisaniem plików dyskowych). Zachowanie się systemu z pod­niesionym współczynnikiem N należy gruntownie przetestować. Od jakości użytych modułów pamięci RAM zależy, jak wysokie W zniesie nasz komputer zanim wystąpi błąd parzystości. Należy wreszcie pamiętać, że nie wszystkie nowoczesne płyty główne „poddają się" operacji zmiany częstotliwości odświeżania pamięci, dlatego też może się zdarzyć, że wykonanie programu REFR nie przyniesie żadnych efektów.


540

Anatomia PC



Obsługa głośnika

Schemat blokowy zespołu współpracującego z głośnikiem przedstawiony jest na rysun­ku 9.6.


Rysunek 9,6,

Schemat blokowy zespołu

współpracującego z głośnikiem

0*100 poi i b (061M ° 1 l

£

0 CLKO 0GATEO CLK1 GATE1 (q CLK2

-LTUTJ-CLK GATE2 1.19318 MHZ *°

1253/54

Licznik 0

OUTO OUT1 OUT2

Licznik 1

-> **

Licznik 2

^ 4 f


Do obsługi wbudowanego w komputer PC głośnika przeznaczony został generator 2. Dla wytwarzania przebiegu okresowego do sterowania głośnika przydatny jest tylko tryb 3., jako jedyny pozwalający na generację przebiegu okresowego o współczynniku wypełnienia zbliżonym do 1/2. Również tryb 2. wytwarza przebieg okresowy, ale p współczynniku wypełnienia bliskim jedności (szerokość impulsu wynosi 0.838 ms). Bezpośrednie sterowanie głośnika takim przebiegiem wytwarzałoby ton praktycznie niesłyszalny, ze względu na bezwładność membrany i dużą zawartość harmonicznych

Prostokątny sygnał z wyjścia OUT2 napotyka na swej drodze klucz sterowany stanem bitu l rejestru 61 h (port B układu 8255). Stanem wejścia GATE2 steruje bit O tego rejestru. Wspomniany rejestr należy fizycznie do programowanego układu wejścia-wyjścia 8255. Układ ten występuje tylko w modelu PC/XT, gdzie ma za zadanie między innymi obsługę klawiatury, odczytywanie nastaw przełączników konfiguracyjnych i ste­rowanie rejestrem maskowania NMI. Modele AT posługują się przy obsłudze klawiatu­ry i pamięci konfiguracji innymi rozwiązaniami, toteż układ 8255 został z nich usunięty. Z oczywistych względów znaczenie i adres portu B zostały w architekturze AT odwzorowane sztucznie.

Po przejściu przez klucz sygnał prostokątny jest wzmacniany i przepuszczany przez filtr dolnoprzepustowy, który ma ograniczyć wyższe harmoniczne przebiegu prostokątnego i przybliżyć przebieg do sinusoidy. Jakości wytwarzanych w ten sposób tonów nie należy przeceniać, gdyż wzmacniacz, o którym mowa, zawiera zwykle dwie bramki NAND i tranzystor, a wspomniany filtr to najczęściej dołączony równolegle do głośnika kondensator o pojemności 100 nF. Głośnik w komputerze PC służyprzede wszystkim do prostej sygnalizacji, zaś zwolennicy muzyki o wysokiej jakości muszą zaopatrzyć się w specjalną kartę dźwiękową, np. Sound Blaster lub AdLib. Istnieją też proste rozwią­zania bazujące na łączu równoległym komputera (Covox).


System odmierzania czasu

541


Jak wynika ze schematu blokowego przedstawionego na rysunku 9.6, aby pobudzić do drgań membranę głośnika, należy spełnić następujące warunki:

ustawieniem bitu l portu 061 h należy włączyć klucz.
Przykład:

Niech żądana częstotliwość drgań równa się 1000 Hz. Współczynnik podziału wyniesie 1193180 Hz: 1000 Hz= 1193 =4*256 + 169 MSB = 4 (00000100b) (bardziej znaczący bajt)

LSB = 169 (l0101001b) (mniej znaczący bajt)

mov al,10110110b

out 43h,al

mov al,169

out 42h,al

mov al,4

out 42h,al

in al,61h

or al,00000011b

out 61h,al

generator 2, ustawienie obu bajtów licznika, tryb "3",licznik binarny wyślij rozkaz do rejestru sterującego 8253/8254 LSB

ustaw mniej znaczącą cześć CE MSB

ustaw bardziej znaczącą część CE wczytaj zawartość portu B 8255 ustaw bity O i l, reszta bez zmian odeślij zawartość z powrotem do portu B

Powyższa sekwencja powoduje włączenie głośnika. Przebieg akustyczny o częstotli­wości l kHz będzie od tej chwili aż do jego wyłączenia, bez udziału procesora. Wyłą­czenie głośnika można osiągnąć podając na wejście GATE2 zero logiczne lub otwie­rając klucz łączący wzmacniacz i generator:


in al,61h

and al,11111101b

out 61h,al

GATE2 = O


lub


in al,61h

and al,11111110b

out 61h,al

; otwórz klucz


Częstotliwość drgań generatora można dowolnie zmieniać w czasie pracy układu. Zała­dowanie licznika CE nową wartością nie wymaga każdorazowego włączania i wyłą­czania generatora lub klucza. Wystarczy wprowadzić do portu 042h nowy podzielnik N (w formie LSB i/lub MSB, zależnie od wcześniejszego zaprogramowania generatora), a najpóźniej w 0.838 ms potem zostanie on przeniesiony do rejestru CE i układ zmieni swą częstotliwość pracy. Cała ta operacja jest absolutnie niewyczuwalna dla ucha ludz­kiego.


542 Anatomia PC

Opisana w tym rozdziale metoda umożliwia sterowanie głośnikiem w sposób całko­wicie niezależny od procesora. Ten ostatni musi ingerować wyłącznie (nie licząc jedno­razowego zaprogramowania rejestru sterującego 043h) w momentach zmiany często­tliwości tonu, włączenia i wyłączenia głośnika.

Należy też wspomnieć tutaj o alternatywnej metodzie wytwarzania dźwięku. Korzysta się w niej z faktu, że wyjście OUT2 niezaprogramowanego generatora 2 znajduje się niewątpliwie w jednym ze stanów logicznych O lub 1. Wywołując okresowe zamykanie i otwieranie klucza łączącego wyjście generatora ze wzmacniaczem uzyskamy taki sam efekt, jak w przypadku obecności przebiegu prostokątnego na wyjściu OUT2 i zam­kniętego na stałe klucza. Metoda ta wymaga jednak dwukrotnej ingerencji procesora w każdym cyklu generowanych drgań i tym samym nie nadaje się do generacji dźwięku „w tle". Niewątpliwą wadą tego rozwiązania jest też oczywista zależność częstotliwości wytwarzanych tonów od typu procesora i szybkości jego taktowania.

Drugi układ 8254 i jego zastosowanie

Niektóre modele AT, szczególnie przeznaczone do pracy pod kontrolą wielozadanio­wych systemów operacyjnych, wyposażone są w drugi układ 8254. Wykorzystywany jest tylko jeden generator tego układu, pełniący rolę swego rodzaju systemowego zaworu bezpieczeństwa.

Teoretycznie może się zdarzyć, że wadliwie działająca aplikacja lub wręcz sam system operacyjny zablokuje wszystkie przerwania sprzętowe - bądź to rozkazem CLI, bądź przez rejestr maskujący kontrolera przerwań 8259. Procesor znajduje się wtedy naj­częściej w nieskończonej pętli programowej i nie reaguje na polecenia z klawiatury. Jedynym sposobem wyjścia z tej pętli jest naciśnięcie przycisku Reset komputera, co powoduje oczywiście daleko idące konsekwencje, przyjmujące najczęściej postać utraty przetwarzanych danych. Z pomocą przychodzi w tej sytuacji właśnie dodatkowy gene­rator nazywany fail-safe timer. Na rysunku 9.7. przedstawiono schematycznie wszystkie możliwe źródła przerwania niemaskowalnego NMI.

Wspomniany generator wyzwala okresowo przerwanie NMI. Procedura obsługi tego przerwania musi być na tyle inteligentna, by zidentyfikować jego faktyczną przyczynę. Zgodnie z rysunkiem 9.7, mogą być cztery takie przyczyny: przerwanie NMI może pochodzić od kart rozszerzających, układów kontroli parzystości RAM, koprocesora arytmetycznego i właśnie od drugiego generatora 8254. Pierwsze trzy przyczyny powodują przejście do standardowej obsługi przerwania, tj. wypisania komunikatu na ekranie monitora i zatrzymania systemu. Ostatnia przywraca reakcję procesora na przer­wania sprzętowe, a użytkownik odzyskuje kontrolę nad systemem.


System odmierzania czasu

543


0x01 graphic

IOI1I2I3I4I5I6I7I

Port OAOh (070h)

Rysunek 9.7.

Źródła przerwania niemaskowalneg o N M


Głośnik

RAM

Zegar

Pierwszy układ 8254

CLK2

CLK1

CLKO

-^CLK



Wyszukiwarka

Podobne podstrony:
3835
3835
3835
3835
3835
3835
200410 3835
3835
3835
(8057) (3835) model z 2 zm

więcej podobnych podstron