Technische Informatik; Hardwarenahe Programmierung

Interrupt Grundlegend

Table of Contents

  1. Aufgaben

Inhalt

Aufbauend auf die Timer and Interrupts Slides verwende im Simulator folgende Programme:

Obige Programme funktionieren auch am mbed-Application-Board, allerdings der Timer funktioniert nur hier:

Das folgende Programm ist aus dem Simulator Interrupts Load demos :

  • Ticker: LED1 will blink every second
  • InterruptIn: LED2 can be toggled through BUTTON1
  • Timeout: LED3 will toggle after 2.5 seconds

InterruptTicker.cpp

#include "mbed.h"
#define BUTTON1 p14     // push joystick pin
//#define BUTTON1 A1    // NUCLEO Taster A1
 
DigitalOut led1(LED1);
DigitalOut led2(LED2);  // NUCLEO D2
DigitalOut led3(LED3);  // NUCLEO D3
 
Ticker t1;
Timeout t2;
InterruptIn btn(BUTTON1);
 
void blink_led1() {
    printf("Ticker fired\n");
    led1 = !led1;
}
 
void toggle_led2() {
    printf("BUTTON1 fall invoked\n");
    led2 = !led2;
}
 
void turn_led3_on() {
    printf("Timeout fired\n");
    led3 = 1;
}
 
int main() {
    printf("Hello world!\n");
    printf("LED1 will blink every second, LED3 will toggle after 2.5 seconds, LED2 can be toggled through BUTTON1.\n");
    printf("-----------------------------------\n\n");
 
    t1.attach(callback(&blink_led1), 1.0f);
    t2.attach(callback(&turn_led3_on), 2.5f);
    btn.fall(callback(&toggle_led2));
 
    while(1) {}
    // wait_ms(osWaitForever);
}

Import programapp-InterruptIn-Ticker-Timeout

Program from Mbed-Simulator for InterruptIn, Ticker, and Timeout

ACHTUNG

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

Aufgaben

  1. (Beispielhaft)Beschreiben Sie obiges Programm möglichst genau.
  2. (Beispielhaft) Unter welchen Bedingungen wird im obigen Programm:
    1. Led1 leuchten, was wird auf die serielle Schnittstelle ausgegeben?
    2. Led2 leuchten
    3. Led3 leuchten
  3. Wie können Sie die Zeit für einen bestimmten Code-Abschnitt messen? (Code Beispiel)
  4. Wofür wird time bei Mikrocontrollern verwendet?
  5. Schreiben Sie ein C++ Programm, das eine 100Hz Rechteckschwingung an der LED1 ausgibt. Wird eine Taste gedrückt soll bei steigender Flanke die Frequenz verdoppelt werden. Bei einem weiteren Tastendruck sollen bei fallender Flanke wieder die 100Hz ausgegeben werden.
  6. Schreiben Sie ein C++ Programm, das die Anzahl wie oft eine Taste gedrückt (steigende Flanke) wurde zählt und die LED1 leuchten soll wenn die Taste 10 Mal gedrückt wurde.

Anm.: Schreibe die Programme sowohl für Polling als auch Interrupt. Vergleiche beide Varianten.


All wikipages