Craig Evans / Mbed 2 deprecated ELEC2645_InterruptIn

Dependencies:   mbed

Committer:
eencae
Date:
Tue Jan 05 17:38:13 2016 +0000
Revision:
2:20e71c579204
Parent:
1:58d6707580cb
Child:
3:6cc7d6600a30
Added g_ prefix to global variable

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 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 0:185ac7c21810 44 // DO TASK HERE
eencae 0:185ac7c21810 45 }
eencae 0:185ac7c21810 46
eencae 0:185ac7c21810 47 // put the MCU to sleep until an interrupt wakes it up
eencae 0:185ac7c21810 48 sleep();
eencae 0:185ac7c21810 49
eencae 0:185ac7c21810 50 }
eencae 0:185ac7c21810 51 }
eencae 0:185ac7c21810 52
eencae 0:185ac7c21810 53 // SW2 event-triggered interrupt
eencae 0:185ac7c21810 54 void sw2_isr()
eencae 0:185ac7c21810 55 {
eencae 2:20e71c579204 56 g_sw2_flag = 1; // set flag in ISR
eencae 0:185ac7c21810 57 }