Aufgabe 4: Kontextwechsel
LAPIC::Timer Namespace Reference
Local Timer (for each LAPIC / CPU) More...
Classes | |
struct | ControlRegister.__unnamed56__ |
Enumerations | |
enum | DeliveryStatus { IDLE = 0 , SEND_PENDING = 1 } |
Timer Delivery Status. | |
enum | TimerMode { ONE_SHOT = 0 , PERIODIC = 1 , DEADLINE = 2 } |
Timer Mode. | |
enum | Mask { NOT_MASKED = 0 , MASKED = 1 } |
Timer Mask. | |
Functions | |
uint32_t | ticks (void) |
Determines the LAPIC timer frequency. More... | |
void | set (uint32_t counter, uint8_t divide, uint8_t vector, bool periodic, bool masked=false) |
Set the LAPIC timer. More... | |
Register | getClockDiv (uint8_t div) |
Calculate the bit mask for the LAPIC-timer divider. More... | |
Detailed Description
Local Timer (for each LAPIC / CPU)
- See also
- ISDMv3 10.5.4 APIC Timer
Class Documentation
struct LAPIC::Timer::ControlRegister.__unnamed56__ |
Class Members | ||
---|---|---|
uint32_t | vector: 8 | Vector. |
uint32_t | __pad0__: 4 | |
DeliveryStatus | delivery_status: 1 | Delivery Status. |
uint32_t | __pad1__: 3 | |
Mask | masked: 1 | Interrupt Mask (if set, interrupt will not trigger) |
TimerMode | timer_mode: 2 | Timer Mode. |
uint32_t | __pad2__: 13 |
Function Documentation
uint32_t LAPIC::Timer::ticks | ( | void | ) |
Determines the LAPIC timer frequency.
This function will calculate the number of LAPIC-timer ticks passing in the course of one millisecond. To do so, this function will rely on PIT timer functionality and measure the tick delta between start and end of waiting for a predefined period.
For measurement, the LAPIC-timer single-shot mode (without interrupts) is used; after measurement, the timer is disabled again.
- Note
- The timer is counting towards zero.
- Returns
- Number of LAPIC-timer ticks per millisecond
void LAPIC::Timer::set | ( | uint32_t | counter, |
uint8_t | divide, | ||
uint8_t | vector, | ||
bool | periodic, | ||
bool | masked = false |
||
) |
Set the LAPIC timer.
- Parameters
-
counter Initial counter value; decremented on every LAPIC timer tick divide Divider (power of 2, i.e., 1 2 4 8 16 32...) used as prescaler between bus frequency and LAPIC timer frequency: LAPIC timer frequency = divide * bus frequency
.divide
is a numerical parameter, the conversion to the corresponding bit mask is done internally by calling getClockDiv().vector Interrupt vector number to be triggered on counter expiry periodic If set, the interrupt will be issued periodically masked If set, interrupts on counter expiry are suppressed
Register LAPIC::Timer::getClockDiv | ( | uint8_t | div | ) |
Calculate the bit mask for the LAPIC-timer divider.
- Parameters
-
div Divider, must be power of two: 1, 2, 4, 8, 16, 32, 64, 128
- Returns
- Bit mask for LAPIC::Timer::set() or
0xff
ifdiv
is invalid.