FSST - Hardwarenahe Programmierung

Interrupt

Table of Contents

    Inhalt

    Bei Interrupts wird sofort reagiert. Wenn ein Interrupt-Signal auftritt, wird der aktuelle Befehl des Hauptprogramms beendet, die nötigen Register auf den Stack gerettet und dann anschließend sofort die ISR (Interrupt Service Routine) aufgerufen.

    /media/uploads/fpucher/interrupt.gif

    Technische Realisierung der Interrupts

    • der Prozessor besitzt einen oder mehrere spezielle Interrupt Eingänge
    • wird eine Interruptleitung aktiviert, so führt dies zum Auslösen der zugehörigen Programmunterbrechung
    • "richtige" Rechner verwenden oft sog. Interruptcontroller, welche verschiedene Interruptquellen managen

    Z.B. die Tastenabfrage mittels ISR; Statt DigitalIn wird mit InterruptIn der Taster definiert. Die ISR wird wie eine Funktion ohne Parameter und Rückgabewert (void change()) definiert. Zum Datenaustausch wird eine globale Variable (toggle) verwendet:

    InterruptIn button(p14);
    DigitalOut led(LED1, 0);
    DigitalOut flash(LED4);
     
    void flip() {
        led = !led;
    }
     
    int main() {
        button.rise(&flip);  // attach the address of the flip function to the rising edge
        while(1) {           // wait around, interrupts will interrupt this!
            flash = !flash;
            wait(0.25);
        }
    }
    

    Auf dem M3-Application Board wird der Joy-Stick für den button verwendet, der folgendermaßen die Pins definiert:

    • Down:p12
    • Left:p13
    • Centre:p14
    • Up:p15
    • Right:p16

    ACHTUNG

    1. In der ISR sollten keine wait-Funktionen, Endlosschleifen oder blockierende System Calls verwendet werden.
    2. No printf, malloc, or new in ISR
      Keine Bibliotheksfunktionen, die nicht re-entrant sind.

    Aufgaben Klassen mit Interrupt

    Aufgaben


    All wikipages