Craig Evans / Mbed 2 deprecated 2645_InterruptIn

Dependencies:   mbed

Committer:
eencae
Date:
Wed Dec 20 09:52:17 2017 +0000
Revision:
4:879718bd3126
Parent:
3:6cc7d6600a30
Child:
5:d5bdf787ae1a
Updated mbed library.

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 1:58d6707580cb 5 Sample code from ELEC2645 Week 15 Lab
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 0:185ac7c21810 10
eencae 0:185ac7c21810 11 */
eencae 0:185ac7c21810 12
eencae 0:185ac7c21810 13 #include "mbed.h"
eencae 0:185ac7c21810 14
eencae 0:185ac7c21810 15 // Create objects for SW2 (right switch) and red LED
eencae 3:6cc7d6600a30 16 InterruptIn sw2(SW2);
eencae 0:185ac7c21810 17 DigitalOut red_led(LED_RED);
eencae 0:185ac7c21810 18
eencae 0:185ac7c21810 19 // flag - must be volatile as changes within ISR
eencae 2:20e71c579204 20 // g_ prefix makes it easier to distinguish it as global
eencae 2:20e71c579204 21 volatile int g_sw2_flag = 0;
eencae 0:185ac7c21810 22
eencae 0:185ac7c21810 23 // function prototypes
eencae 0:185ac7c21810 24 void sw2_isr();
eencae 0:185ac7c21810 25
eencae 0:185ac7c21810 26 int main()
eencae 0:185ac7c21810 27 {
eencae 0:185ac7c21810 28 // SW2 has a pull-up resistor, so the pin will be at 3.3 V by default
eencae 0:185ac7c21810 29 // and fall to 0 V when pressed. We therefore need to look for a falling edge
eencae 0:185ac7c21810 30 // on the pin to fire the interrupt
eencae 0:185ac7c21810 31 sw2.fall(&sw2_isr);
eencae 0:185ac7c21810 32 // since SW2 has an external pull-up, we should disable to internal pull-down
eencae 0:185ac7c21810 33 // resistor that is enabled by default using InterruptIn
eencae 0:185ac7c21810 34 sw2.mode(PullNone);
eencae 0:185ac7c21810 35 // the on-board RGB LED is a common anode - writing a 1 to the pin will turn the LED OFF
eencae 0:185ac7c21810 36 red_led = 1;
eencae 0:185ac7c21810 37
eencae 0:185ac7c21810 38 while (1) {
eencae 0:185ac7c21810 39
eencae 0:185ac7c21810 40 // check if flag i.e. interrupt has occured
eencae 2:20e71c579204 41 if (g_sw2_flag) {
eencae 2:20e71c579204 42 g_sw2_flag = 0; // if it has, clear the flag
eencae 0:185ac7c21810 43
eencae 4:879718bd3126 44 // send message over serial port - can observe in CoolTerm etc.
eencae 4:879718bd3126 45 printf("Execute task \n");
eencae 0:185ac7c21810 46 // DO TASK HERE
eencae 0:185ac7c21810 47 }
eencae 0:185ac7c21810 48
eencae 0:185ac7c21810 49 // put the MCU to sleep until an interrupt wakes it up
eencae 0:185ac7c21810 50 sleep();
eencae 0:185ac7c21810 51
eencae 0:185ac7c21810 52 }
eencae 0:185ac7c21810 53 }
eencae 0:185ac7c21810 54
eencae 0:185ac7c21810 55 // SW2 event-triggered interrupt
eencae 0:185ac7c21810 56 void sw2_isr()
eencae 0:185ac7c21810 57 {
eencae 2:20e71c579204 58 g_sw2_flag = 1; // set flag in ISR
eencae 0:185ac7c21810 59 }