Friedrich-Alexander-Universität Erlangen-Nürnberg  /   Technische Fakultät  /   Department Informatik
lapic.h-Dateireferenz

Enthält die Klasse LAPIC zum Zugriff auf den Local APIC. Mehr ...

#include "types.h"
Dieser Graph zeigt, welche Datei direkt oder indirekt diese Datei enthält:

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 ...
 

Ausführliche Beschreibung

Enthält die Klasse LAPIC zum Zugriff auf den Local APIC.

Local APIC referenziert in Intel System Programming Guide 3A

Dokumentation der Funktionen

◆ isDelivered()

bool LAPIC::IPI::isDelivered ( )

Kehrt mit true zurück, falls zum Zeitpunkt des Aufrufs kein IPI aktiv ist.

Rückgabe
false, falls der letzte gesendete IPI noch nicht vom Zielprozessor akzeptiert wurde

◆ set()

void LAPIC::Timer::set ( uint32_t  counter,
uint8_t  divide,
uint8_t  vector,
bool  periodic,
bool  masked = false 
)

Stellt den LAPIC-Timer ein.

Parameter
counterStartwert des Zählers, der bei jedem Bus-Takt dekrementiert wird.
divideZweierpotenz, 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() )
vectorNummer des auszulösenden Interrupts.
periodicGibt an, ob die Unterbrechung periodisch kommen soll
maskedUnterdrückt Unterbrechungen bei Zählerablauf

◆ ticks()

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.

Zu beachten
Bei der Berechnung der Differenz der Zählerwerten muss berücksichtigt werden, dass absteigend gezählt wird!
Rückgabe
Anzahl der Timerticks pro Millisekunde