Craig Evans / Mbed 2 deprecated ELEC2645_InterruptIn

Dependencies:   mbed

Committer:
eencae
Date:
Fri Jan 24 12:07:07 2020 +0000
Revision:
6:52f9ba83203c
Parent:
5:d5bdf787ae1a
Updated for Gamepad2;

Who changed what in which revision?

UserRevisionLine numberNew contents of line
eencae 0:185ac7c21810 1 /*
eencae 0:185ac7c21810 2
eencae 0:185ac7c21810 3 2645_InterruptIn
eencae 0:185ac7c21810 4
eencae 5:d5bdf787ae1a 5 Sample code from ELEC2645
eencae 1:58d6707580cb 6
eencae 1:58d6707580cb 7 Demonstrates how to use InterruptIn to generate an event-triggered interrupt
eencae 0:185ac7c21810 8
eencae 0:185ac7c21810 9 (c) Craig A. Evans, University of Leeds, Jan 2016
eencae 6:52f9ba83203c 10 Updated January 2020
eencae 0:185ac7c21810 11
eencae 0:185ac7c21810 12 */
eencae 0:185ac7c21810 13
eencae 0:185ac7c21810 14 #include "mbed.h"
eencae 0:185ac7c21810 15
eencae 6:52f9ba83203c 16 // Create objects for button and LED
eencae 6:52f9ba83203c 17 InterruptIn buttonA(PTC7);
eencae 6:52f9ba83203c 18 DigitalOut led1(PTA2);
eencae 0:185ac7c21810 19
eencae 0:185ac7c21810 20 // flag - must be volatile as changes within ISR
eencae 2:20e71c579204 21 // g_ prefix makes it easier to distinguish it as global
eencae 6:52f9ba83203c 22 volatile int g_buttonA_flag = 0;
eencae 0:185ac7c21810 23
eencae 0:185ac7c21810 24 // function prototypes
eencae 6:52f9ba83203c 25 void buttonA_isr();
eencae 0:185ac7c21810 26
eencae 0:185ac7c21810 27 int main()
eencae 0:185ac7c21810 28 {
eencae 6:52f9ba83203c 29 buttonA.mode(PullUp); // turn on internal pull-up resistor
eencae 6:52f9ba83203c 30 // pin will be 1 (3.3 V) when not pressed and 0 (0 V) when pressed
eencae 6:52f9ba83203c 31
eencae 6:52f9ba83203c 32 // We therefore need to look for a falling edge on the pin to fire the interrupt
eencae 6:52f9ba83203c 33 // when the button is pressed
eencae 6:52f9ba83203c 34 buttonA.fall(&buttonA_isr);
eencae 6:52f9ba83203c 35
eencae 6:52f9ba83203c 36 // the LED is a common anode - writing a 1 to the pin will turn the LED OFF
eencae 6:52f9ba83203c 37 led1 = 1;
eencae 0:185ac7c21810 38
eencae 0:185ac7c21810 39 while (1) {
eencae 0:185ac7c21810 40
eencae 0:185ac7c21810 41 // check if flag i.e. interrupt has occured
eencae 6:52f9ba83203c 42 if (g_buttonA_flag) {
eencae 6:52f9ba83203c 43 g_buttonA_flag = 0; // if it has, clear the flag
eencae 0:185ac7c21810 44
eencae 4:879718bd3126 45 // send message over serial port - can observe in CoolTerm etc.
eencae 4:879718bd3126 46 printf("Execute task \n");
eencae 6:52f9ba83203c 47
eencae 6:52f9ba83203c 48 led1 = !led1; // toggle LED
eencae 0:185ac7c21810 49 }
eencae 0:185ac7c21810 50
eencae 0:185ac7c21810 51 // put the MCU to sleep until an interrupt wakes it up
eencae 0:185ac7c21810 52 sleep();
eencae 0:185ac7c21810 53
eencae 0:185ac7c21810 54 }
eencae 0:185ac7c21810 55 }
eencae 0:185ac7c21810 56
eencae 6:52f9ba83203c 57 // Button A event-triggered interrupt
eencae 6:52f9ba83203c 58 void buttonA_isr()
eencae 0:185ac7c21810 59 {
eencae 6:52f9ba83203c 60 g_buttonA_flag = 1; // set flag in ISR
eencae 0:185ac7c21810 61 }