| Zeile 151: | Zeile 151: | ||
== Timer == | == Timer == | ||
| − | Der locale APIC besitzt einen sehr genauen Timer, welcher eigentlich allen anderen Timern wie dem PIT oder der | + | Der locale APIC besitzt einen sehr genauen Timer, welcher eigentlich allen anderen Timern wie dem [[PIT]] oder der Real-time Clock vorgezogen werden sollte. Wenn das System mit mehreren Prozessoren (siehe auch [[SMP]]) oder mit dem [[I/O APIC]] (Symmetric Mode) läuft, dann ist er eigentlich die einzige Wahl, denn der PIT ist meistens nur mit dem PIC verbunden und damit nur an den BSP angeschlossen. Er kann somit nicht effizient für SMP verwendet werden. |
=== Register === | === Register === | ||
| Zeile 163: | Zeile 163: | ||
|} | |} | ||
* Wenn das Timer Modus Bit gesetzt ist, arbeitet der Timer periodisch. Ansonsten wird der Interrupt nur ein einzige Mal aufgerufen. | * Wenn das Timer Modus Bit gesetzt ist, arbeitet der Timer periodisch. Ansonsten wird der Interrupt nur ein einzige Mal aufgerufen. | ||
| − | * Das | + | * Das Maskierungsbit ist standardmäßig gesetzt und verhindert somit das Erzeugen eines Interrupts. |
| − | * Auf das | + | * Auf das Zustellungsbit kann nur lesend zugegriffen werden. Wenn es gesetzt ist, wird gerade ein Interrupt gesendet, ansonsten wird nicht gearbeitet. |
| − | * Der Vektor beinhaltet die Interruptnummer, mit welcher der Timer-Interrupt zur CPU gesendet werden soll. Dort wird der Interrupt dann zu einer ISR geleitet, welche durch | + | * Der Vektor beinhaltet die Interruptnummer, mit welcher der Timer-Interrupt zur CPU gesendet werden soll. Dort wird der Interrupt dann zu einer ISR geleitet, welche durch diesen Vektor in der IDT ausgewählt wird. |
==== Das Divide Configuration Register: ==== | ==== Das Divide Configuration Register: ==== | ||
| Zeile 178: | Zeile 178: | ||
==== Initial und Current Count Regsiter: ==== | ==== Initial und Current Count Regsiter: ==== | ||
| − | Der Wert im Current Count Regsiter wird in der Frequenz des Timers immer um Eins | + | Der Wert im Current Count Regsiter wird in der Frequenz des Timers immer um Eins dekrementiert. Sobald der Wert Null erreicht, wird ein Interrupt ausgelöst, das Current Count Register wird, sofern mehr als ein Interrupt generiert werden soll, wieder mit dem Wert des Initial Count Register gefüllt und beginnt somit wieder mit dem stufenweisen dekrementieren. |
== Aktivierung == | == Aktivierung == | ||