Technische Informatik; Hardwarenahe Programmierung

You are viewing an older revision! See the latest version

Interrupt Grundlegend

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

Schreiben Sie die folgenden Programme sowohl für Polling und Interrupt. Vergleichen Sie beide Varianten.

  1. Schreiben Sie ein C++ Programm, das eine 100Hz Rechteckschwingung an der LED1 ausgibt. Wird die Taste SW2 gedrückt soll die Frequenz verdoppelt werden. Bei einem weiteren Tastendruck sollen wieder die 100Hz ausgegeben werden.
  2. Schreiben Sie ein C++ Programm, das Anzahl wie oft die Taste SW2 gedrückt wurde zählt und die LED1 leuchten soll wenn die Taste 10 Mal gedrückt wurde.

All wikipages