PIT - Programowalny dzielnik częstotliwości

cepa

PIT - Programmable Interval Timer
(jak przypalić procka)

Każdy komputer zgodny z PC AT posiada w swym wnętrzu układ Intel 8253/8254, nazywany popularnie PITem. Timer ten jest odpowiedzialny za trzy funkcje:

  • generowanie przerwania zegara czasu rzeczywistego (1Ch)
  • odświeżanie pamięci RAM
  • generator przebiegu prostokątnego dla głośnika systemowego

Po co to komu wiedzieć? PIT jest programowalnym dzielnikiem częstotliwości, oznacza to, ze może generować impulsy w danym przedziale częstotliwości. Przede wszystkim jest on odpowiedzialny za prace naszego timerka systemowego.

Skoro można zmienić częstotliwość generowania impulsu przerwania to czemu nie można by tego wykorzystać do programowania timera który kreci się dziesiątki razy szybciej niż standardowa częstotliwość 18.2Hz :)

Układ Intel 8253/8254 jest taktowany standardowo przebiegiem prostokątnym o częstotliwości 1 193 181 Hz czyli nieco ponad 1 MHz. Posiada on trzy niezależne kanały 16-bitowego dzielnika częstotliwości, dostępne na trzech różnych portach oraz dodatkowo jest port sterujący:

</p>

port 40h: zegar czasu rzeczywistego
port 41h: generator odświeżania RAMu
port 42h: generator dla głośnika systemowego
port 43h: port kontrolera.

Programowanie PIT'u wygląda następująco:<

  1. wyślij do portu 43h stałą sterującą,
  2. wyślij do portu danego licznika młodszy bajt dzielnika,
  3. wyślij do portu danego licznika starszy bajt dzielnika.

Ponieważ programowanie timera odpowiedzialnego za RAM może być kosztowne w skutkach to zajmiemy się reprogramowaniem zegara i głośnika.

Najpierw musimy wysłać do portu kontrolera (43h) stałą sterującą. Jest to specjalny bajt który odpowiednio ustawia scalaka. Format tego bajtu można znaleźć w dokumentacji, nam będą potrzebne dwie stale wartości:

  • 00110110b (36h) dla timera,
  • 10110110b (B6h) dla głośnika.

Kiedy już wyślemy taka wartość na port 43h to nie pozostaje nam nic innego jak wpisać wartość dzielnika, czyli liczbę z zakresu 1 do 65535. Wartość tą można policzyć ze wzoru:
k = 1193181 / f
gdzie: f - częstotliwość jaka chcemy otrzymać w hercach.
Ponieważ wartość dzielnika jest ograniczona, maksymalna częstotliwość jaką możemy uzyskać wynosi 1193181 Hz, natomiast minimum to 18.2Hz czyli standardowa częstotliwość zegarka.
To by było na tyle, oto kod który reprogramuje timer systemowy na częstotliwość 1000 Hz:

mov al, 36h
out 43h, al    ; wysyła wartość sterującą PITem
mov ax, 1193   ; 1193181Hz / 1000Hz = 1193
out 40h, al    ; wysyła młodszy bajt
mov al, ah
out 40h, al    ; wysyła starszy bajt

Copyright © by CEPA 2005
cepa[<wiki href="@">gorilla gorilla gorilla</wiki>]o2.pl
http://www.cepa.one.pl/
http://www.last.kom.pl/

4 kwietnia 2005

7 komentarzy

"1 193 181 Hz czyli nieco ponad 1 MHz"

Tyle czasu, a nikt nie spojrzał na jednostki :D

Sry, ze zadam lamerskie pytanie, ale właściwie, co to zmienianie częstotliwości PITu daje? ;)

Jakieś problemy ze zrozumieniem treści ?

brodny napisał(a)

poziom artykułów na 4p jest w miarę wysoki i się ciągle podnosi
czego tu nie rozmieć?

@brodny: ilość błędów ortograficznych ciągle się podnosi? :P :D Sry, że się czepiam, ale twój komentarz brzmi (mfff...) trochę śmiesznie.

Może i fajne, ale może być fajniejsze - jak poprawi. Dobrze, że się czepia, bo dzięki temu poziom artykułów na 4p jest w miarę wysoki i się ciągle podnosi ("poziom" w sensie ilość błędów ortograficznych).

Ee czepiasz się, fajne :D

Popraw błędy ortograficzne!