Technische Informatik; Hardwarenahe Programmierung

InterruptIn

Inhalt

Die mbed Boards verfügen über folgende Interrupt-fähigen Pins:

  • mbed NXP LPC1768: mbed NXP LPC1768: Mit Ausnahme von p19 und p20 kann jeder der nummerierten mbed-Pins als InterruptIn verwendet werden.
  • ST-Nucleo-L432KC: Alle 20 blauen GPIO Pins

Information

Der Simulator verwendet als Taster den Reset-Knopf des LPC1768 Boards, der in der realen Hardware allerdings wirklich einen Rest des Boards auslöst. Deshalb sollten Sie, wenn Sie Programme aus dem Simulator in der Online IDE verwenden, folgende Zeile an den Anfang Ihres Programmes kopieren:

#define BUTTON1 p14  // push joystick pin

Beim NUCLEO-Board NUClight ist es:

#define BUTTON1 A1  // Taster A1

Die InterruptIn-Schnittstelle wird verwendet, um ein Ereignis auszulösen, wenn sich ein digitaler Eingangspin ändert (kopiere das Programm in den mbed-Simulator):

#include "mbed.h"
//#define BUTTON1 p14  // push joystick pin mbed PC1768
//#define BUTTON1 A1   // Taster A1 NUCLEO-L432KC
 
InterruptIn button(BUTTON1);
DigitalOut led(LED1);
DigitalOut heartbeat(LED4); // D2 NUCLEO-L432KC

void toggle() {
    led = !led;
}

int main() {
    button.rise(&toggle);  // call toggle function on the rising edge in OS2
    //button.rise(callback(&toggle));    // callback in OS5 
    while(1) {             // wait around, interrupts will interrupt this!
        heartbeat = !heartbeat;
        wait(0.25);
    }
}
  • Zeile 5: es wird eine Instanz button der Klasse InterruptIn instanziiert und der Pin BUTTON1 (Reset-Button im Simulator) zugewiesen
  • Zeile 6: es wird eine Instanz led der Klasse DigitalOut instanziiert und der Pin LED1 zugewiesen
  • Zeile 7: wird eine Instanz heartbeat der Klasse DigitalOut instanziiert und der Pin LED4 zugewiesen
  • Zeile 9 ..10: wird die ISR (Funktion) toggle() definiert, die bei jedem Funktionsaufruf den Zustand der led ändert (0 auf 1 und umgekehrt)
  • Zeile 14: es wird die ISR toggle() der steigenden (rise) Flanke des button zugeordnet, sodass bei jedem drücken des Tasters ein Interrupt den Aufruf der ISR toggle() auslöst.
  • Zeile 16 ... 19 definiert eine Endlosschleife und lässt die LED4 als heartbeat blinken, damit man weiss, dass ein Programm läuft.

ACHTUNG

  1. In der ISR (oben toggle()) darf 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.

All wikipages