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:
PIT | Zähler | Nutzung |
---|---|---|
1 | 0 | Periodische Unterbrechungen |
1 | 1 | Speicher-Refresh |
1 | 2 | Tonerzeugung |
2 | 0 | Fail-Safe-Timer (NMI) |
2 | 1 | Ungenutzt |
2 | 2 | Ungenutzt |
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) | Register | Zugriffsarten |
---|---|---|---|
0x40 | 0x48 | Zähler 0 | schreiben/lesen |
0x41 | 0x49 | Zähler 1 | schreiben/lesen |
0x42 | 0x4a | Zähler 2 | schreiben/lesen |
0x43 | 0x4b | Steuerregister | nur 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) | Wert | Bedeutung |
---|---|---|
0 | Zählformat | |
0 | binäre Zählung von 16 Bit | |
1 | Zählung mit vierstelligen BCD Zahlen | |
1-3 | Modus 0 bis Modus 5 | |
4-5 | Lesen/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-7 | Zä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.