Beispiel Timer-Interrupt (PI4): Unterschied zwischen den Versionen

Aus C und Assembler mit Raspberry
KKeine Bearbeitungszusammenfassung
KKeine Bearbeitungszusammenfassung
Zeile 1: Zeile 1:
Nun versuchen wir, einen Timer-Interrupt zu erstellen und verwenden eine Vector-Tabelle, wie diese zuvor beschrieben wurde. Wir verzichten zunächst auf die Gleitkomma-Unterstützung.
Nun versuchen wir, einen Timer-Interrupt zu erstellen und verwenden eine Vector-Tabelle, wie diese zuvor beschrieben wurde. Wir verzichten zunächst auf die Gleitkomma-Unterstützung.


Wir verwenden die Vectortabelle aus der vorigen Beschreibung. Unterstützen allerdings nur "IRQs" und "Synchronous Exception". Andere Ausnahmen werden in eine Dauerschleife versetzt:
Wir verwenden die Vectortabelle aus der vorigen Beschreibung. Unterstützen allerdings nur "IRQs". Andere Ausnahmen werden in eine Dauerschleife versetzt:
<syntaxhighlight lang="asm">
<syntaxhighlight lang="asm">
.align 11
.align 11
Zeile 8: Zeile 8:
// Vektoren für EL1t (Current Exception Level SP_el0)
// Vektoren für EL1t (Current Exception Level SP_el0)
     .align 7
     .align 7
     b exception     // Synchronous Exception
     b hang     // Synchronous Exception
     .align 7
     .align 7
     b IRQStub        // IRQ - Normal Interrupt
     b IRQStub        // IRQ - Normal Interrupt
Zeile 17: Zeile 17:
// Vektoren für EL1h (Current Exception Level SP_el1)
// Vektoren für EL1h (Current Exception Level SP_el1)
     .align 7
     .align 7
     b exception     // Synchronous Exception
     b hang     // Synchronous Exception
     .align 7
     .align 7
     b IRQStub        // IRQ - Normal Interrupt
     b IRQStub        // IRQ - Normal Interrupt

Version vom 25. Juli 2025, 07:49 Uhr

Nun versuchen wir, einen Timer-Interrupt zu erstellen und verwenden eine Vector-Tabelle, wie diese zuvor beschrieben wurde. Wir verzichten zunächst auf die Gleitkomma-Unterstützung.

Wir verwenden die Vectortabelle aus der vorigen Beschreibung. Unterstützen allerdings nur "IRQs". Andere Ausnahmen werden in eine Dauerschleife versetzt:

.align	11
.globl	VectorTable
VectorTable:
// Vektoren für EL1t (Current Exception Level SP_el0)
    .align	7
    b hang     // Synchronous Exception
    .align	7
    b IRQStub        // IRQ - Normal Interrupt
    .align	7
    b hang        // FIQ - Fast Interrupt
    .align	7
    b hang     // SError - System Error
// Vektoren für EL1h (Current Exception Level SP_el1)
    .align	7
    b hang     // Synchronous Exception
    .align	7
    b IRQStub        // IRQ - Normal Interrupt
    .align	7
    b hang        // FIQ - Fast Interrupt
    .align	7
    b hang     // SError - System Error
// Vektoren für EL0 64-bit Modus
    .align	7
    b hang     // Synchronous EL0 (64-bit)
    .align	7
    b hang      // IRQ EL0 (64-bit)
    .align	7
    b hang      // FIQ EL0 (64-bit)
    .align	7
    b hang    // Error EL0 (64-bit)
// Vektoren für EL0 32-bit Modus
    .align	7
    b hang     // Synchronous EL0 (32-bit)
    .align	7
    b hang      // IRQ EL0 (32-bit)
    .align	7
    b hang      // FIQ EL0 (32-bit)
    .align	7
    b hang    // Error EL0 (32-bit)

hang:
    wfe        // spare CPU cycles
    b hang