Technische Informatik; Hardwarenahe Programmierung

You are viewing an older revision! See the latest version

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:

  • Timer
  • time bietet Mechanismen zum Einstellen und Lesen der aktuellen Uhrzeit auf Mikrocontrollern mit Real-Time Clock (RTC).

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.

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. 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.
  4. 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.

All wikipages