Skip to main content.

Navigation:

Einsatz von Timer-Bausteinen in PCs

Ein PC besitzt einen oder zwei Timer-Bausteine vom Typ 8253 oder 8254. Jeder dieser Bausteine besitzt drei 16 Bit breite Zähler, die mit einem Takt von 1,19318 MHz betrieben werden. Die Zählgeschwindigkeit ist also unabhängig vom Prozessortakt!

Die Zähler können wie folgt genutzt werden:

PITZählerNutzung
10Periodische Unterbrechungen
11Speicher-Refresh
12Tonerzeugung
20Fail-Safe-Timer (NMI)
21Ungenutzt
22Ungenutzt

Jeder Zähler besitzt einen eigenen Ausgang (OUTx). Je nach Anschluss dieses Ausgangs an verschiedene Stellen auf dem Motherboard ergeben sich die verschiedenen Spezialbedeutungen der Zähler (jeweils hart verdrahtet!). So führt OUT0 an INT0 des PIC, OUT1 an den Kanal 0-Eingang des DMA-Controllers 8237, OUT2 über ein programmierbares Gate an den Verstärker und OUT0 des zweiten PIT an den NMI-Eingang des Prozessor (über das NMI-Mask-Bit).

Programmierung der Timer

Jeder PIT kann mit Hilfe von vier Ports angesprochen werden:

Port (1.PIT)Port (2.PIT)RegisterZugriffsarten
0x400x48Zähler 0schreiben/lesen
0x410x49Zähler 1schreiben/lesen
0x420x4aZähler 2schreiben/lesen
0x430x4bSteuerregisternur schreiben

Alle Ports sind jeweils nur 1 Byte (8 Bit) breit. Um 16 Bit Zählerwerte in den PIT zu bekommen wird deshalb eine besondere Technik benutzt. Zunächst muss dem PIT über ein Steuerwort mitgeteilt werden, was man überhaupt von ihm will. Dieses Steuerwort hat den folgenden Aufbau:

Bit(s)WertBedeutung
0 Zählformat
0 binäre Zählung von 16 Bit
1 Zählung mit vierstelligen BCD Zahlen
1-3Modus 0 bis Modus 5
4-5Lesen/Schreiben
00 Zähler-Latch-Befehl
01 nur niederwertiges Zählerbyte
10 nur höherwertiges Zählerbyte
11 niederwertiges, anschließend höherwertiges Zählerbyte
6-7Zählerauswahl
00 Zähler 0
01 Zähler 1
10 Zähler 2
11 ungültig beim 8253, Read-Back-Befehl beim 8254

Der Zähler-Latch-Befehl und der Read-Back-Befehl sind nur für das Auslesen von Zählerwerten von Interesse. Daher wird hier nicht weiter auf diese Befehle eingegangen.

Mit dem Modus wird bestimmt, wie der Zähler arbeitet und ob er mit Hilfe der OUTx Leitung externe Ereignisse auslösen soll. So zählt der Zähler im Modus 0 vom angegebenen Startwert bis 0 herunter (pro Schritt jeweils 838 ns) und setzt am Ende die OUTx Leitung auf 1. Um periodische Impulse zu erzeugen, eignet sich Modus 2 am besten. Bei diesem Modus wird bei Erreichen des Wertes 0 ein kurzer Impuls auf OUTx ausgegeben und der Zähler wird automatisch wieder mit dem Startwert initialisiert, worauf der Zählvorgang wieder von vorn beginnt. Zur Einstellung eines 16 Bit Zählerwertes sind drei out-Befehle notwendig. Mit dem ersten wird das Steuerwort, danach das niederwertige Byte und zum Schluss das höherwertigen Byte des Zählerwertes übergeben.