
Enthält die Klasse LAPIC zum Zugriff auf den Local APIC. Mehr ...
#include "types.h"
Namensbereiche | |
LAPIC | |
Abstraktion des in der CPU integrierten local APICs.In modernen PCs besitzt jede CPU einen sogenannten "local APIC". Dieser vermittelt zwischen dem I/O APIC, an den die externen Interruptquellen angeschlossen sind, und der CPU. Interruptnachrichten, welche den lokalen APIC von aussen erreichen, werden an den zugeordneten Prozessorkern weitergereicht, um dort die Interruptbearbeitung anzustoßen. | |
Funktionen | |
void | LAPIC::init (uint8_t logicalID) |
Initialisiert den local APIC der jeweiligen CPU und setzt die lokale APIC ID im LDR Register. Mehr ... | |
void | LAPIC::endOfInterrupt () |
Signalisiert EOI (End of interrupt) Mehr ... | |
uint8_t | LAPIC::getID () |
Liefert die ID des in der aktuellen CPU integrieren APICs. Mehr ... | |
uint8_t | LAPIC::getLogicalID () |
void | LAPIC::setLogicalID (uint8_t id) |
uint8_t | LAPIC::getVersion () |
Liefert Versionsnummer des local APICs. Mehr ... | |
bool | LAPIC::IPI::isDelivered () |
Kehrt mit true zurück, falls zum Zeitpunkt des Aufrufs kein IPI aktiv ist. Mehr ... | |
void | LAPIC::IPI::send (uint8_t destination, uint8_t vector) |
void | LAPIC::IPI::sendGroup (uint8_t logical_destination, uint8_t vector) |
void | LAPIC::IPI::sendAll (uint8_t vector) |
void | LAPIC::IPI::sendOthers (uint8_t vector) |
void | LAPIC::IPI::sendInit (bool assert=true) |
void | LAPIC::IPI::sendStartup (uint8_t vector) |
uint32_t | LAPIC::Timer::ticks (void) |
Ermittelt die Frequenz des LAPIC-Timers. Unter Verwendung des PIT wird eine gewisse (längere) Zeit gewartet und davor sowie danach der aktuelle LAPIC Timer Zähler ausgelesen. Aus der Differenz der beiden Zählerwerte sowie der Wartezeit werden die LAPIC Timer Ticks pro Millisekunden errechnet. Mehr ... | |
void | LAPIC::Timer::set (uint32_t counter, uint8_t divide, uint8_t vector, bool periodic, bool masked=false) |
Stellt den LAPIC-Timer ein. Mehr ... | |
Enthält die Klasse LAPIC zum Zugriff auf den Local APIC.
Local APIC referenziert in Intel System Programming Guide 3A
bool LAPIC::IPI::isDelivered | ( | ) |
Kehrt mit true zurück, falls zum Zeitpunkt des Aufrufs kein IPI aktiv ist.
void LAPIC::Timer::set | ( | uint32_t | counter, |
uint8_t | divide, | ||
uint8_t | vector, | ||
bool | periodic, | ||
bool | masked = false |
||
) |
Stellt den LAPIC-Timer ein.
counter | Startwert des Zählers, der bei jedem Bus-Takt dekrementiert wird. |
divide | Zweierpotenz, durch die der Bustakt geteilt werden soll (wird als numerischer Wert (1, 2, 4, 8, ...) übergeben, zur Umrechnung in die passende Bitmaske siehe lokale Funktion getClockDiv() ) |
vector | Nummer des auszulösenden Interrupts. |
periodic | Gibt an, ob die Unterbrechung periodisch kommen soll |
masked | Unterdrückt Unterbrechungen bei Zählerablauf |
uint32_t LAPIC::Timer::ticks | ( | void | ) |
Ermittelt die Frequenz des LAPIC-Timers. Unter Verwendung des PIT wird eine gewisse (längere) Zeit gewartet und davor sowie danach der aktuelle LAPIC Timer Zähler ausgelesen. Aus der Differenz der beiden Zählerwerte sowie der Wartezeit werden die LAPIC Timer Ticks pro Millisekunden errechnet.
Für die Messung wird mittels set() der LAPIC Zähler in einen Single-Shot Modus ohne Interrupts gesetzt, nach der Messung wird er wieder deaktiviert.