Craig Evans / Mbed 2 deprecated ELEC2645_InterruptIn

Dependencies:   mbed

Committer:
eencae
Date:
Tue Jan 05 17:00:56 2016 +0000
Revision:
1:58d6707580cb
Parent:
0:185ac7c21810
Child:
2:20e71c579204
Slightly changed comments for consistency.

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 1:58d6707580cb 16 InterruptIn sw2(SW3);
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 0:185ac7c21810 20 volatile int sw2_flag = 0;
eencae 0:185ac7c21810 21
eencae 0:185ac7c21810 22 // function prototypes
eencae 0:185ac7c21810 23 void sw2_isr();
eencae 0:185ac7c21810 24
eencae 0:185ac7c21810 25 int main()
eencae 0:185ac7c21810 26 {
eencae 0:185ac7c21810 27 // SW2 has a pull-up resistor, so the pin will be at 3.3 V by default
eencae 0:185ac7c21810 28 // and fall to 0 V when pressed. We therefore need to look for a falling edge
eencae 0:185ac7c21810 29 // on the pin to fire the interrupt
eencae 0:185ac7c21810 30 sw2.fall(&sw2_isr);
eencae 0:185ac7c21810 31 // since SW2 has an external pull-up, we should disable to internal pull-down
eencae 0:185ac7c21810 32 // resistor that is enabled by default using InterruptIn
eencae 0:185ac7c21810 33 sw2.mode(PullNone);
eencae 0:185ac7c21810 34 // the on-board RGB LED is a common anode - writing a 1 to the pin will turn the LED OFF
eencae 0:185ac7c21810 35 red_led = 1;
eencae 0:185ac7c21810 36
eencae 0:185ac7c21810 37 while (1) {
eencae 0:185ac7c21810 38
eencae 0:185ac7c21810 39 // check if flag i.e. interrupt has occured
eencae 0:185ac7c21810 40 if (sw2_flag) {
eencae 0:185ac7c21810 41 sw2_flag = 0; // if it has, clear the flag
eencae 0:185ac7c21810 42
eencae 0:185ac7c21810 43 // DO TASK HERE
eencae 0:185ac7c21810 44 }
eencae 0:185ac7c21810 45
eencae 0:185ac7c21810 46 // put the MCU to sleep until an interrupt wakes it up
eencae 0:185ac7c21810 47 sleep();
eencae 0:185ac7c21810 48
eencae 0:185ac7c21810 49 }
eencae 0:185ac7c21810 50 }
eencae 0:185ac7c21810 51
eencae 0:185ac7c21810 52 // SW2 event-triggered interrupt
eencae 0:185ac7c21810 53 void sw2_isr()
eencae 0:185ac7c21810 54 {
eencae 0:185ac7c21810 55 sw2_flag = 1; // set flag in ISR
eencae 0:185ac7c21810 56 }