Craig Evans / Mbed 2 deprecated ELEC2645_InterruptIn

Dependencies:   mbed

Committer:
eencae
Date:
Tue Jan 05 16:32:28 2016 +0000
Revision:
0:185ac7c21810
Child:
1:58d6707580cb
Initial commit. ; ; Demonstrates event-triggered interrupt on K64F.

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 0:185ac7c21810 5 Example code from ELEC2645 Week 15 Lab
eencae 0:185ac7c21810 6
eencae 0:185ac7c21810 7 (c) Craig A. Evans, University of Leeds, Jan 2016
eencae 0:185ac7c21810 8
eencae 0:185ac7c21810 9 */
eencae 0:185ac7c21810 10
eencae 0:185ac7c21810 11 #include "mbed.h"
eencae 0:185ac7c21810 12
eencae 0:185ac7c21810 13 // Create objects for SW2 (right switch) and red LED
eencae 0:185ac7c21810 14 InterruptIn sw2(SW2);
eencae 0:185ac7c21810 15 DigitalOut red_led(LED_RED);
eencae 0:185ac7c21810 16
eencae 0:185ac7c21810 17 // flag - must be volatile as changes within ISR
eencae 0:185ac7c21810 18 volatile int sw2_flag = 0;
eencae 0:185ac7c21810 19
eencae 0:185ac7c21810 20 // function prototypes
eencae 0:185ac7c21810 21 void sw2_isr();
eencae 0:185ac7c21810 22
eencae 0:185ac7c21810 23 int main()
eencae 0:185ac7c21810 24 {
eencae 0:185ac7c21810 25 // SW2 has a pull-up resistor, so the pin will be at 3.3 V by default
eencae 0:185ac7c21810 26 // and fall to 0 V when pressed. We therefore need to look for a falling edge
eencae 0:185ac7c21810 27 // on the pin to fire the interrupt
eencae 0:185ac7c21810 28 sw2.fall(&sw2_isr);
eencae 0:185ac7c21810 29 // since SW2 has an external pull-up, we should disable to internal pull-down
eencae 0:185ac7c21810 30 // resistor that is enabled by default using InterruptIn
eencae 0:185ac7c21810 31 sw2.mode(PullNone);
eencae 0:185ac7c21810 32 // the on-board RGB LED is a common anode - writing a 1 to the pin will turn the LED OFF
eencae 0:185ac7c21810 33 red_led = 1;
eencae 0:185ac7c21810 34
eencae 0:185ac7c21810 35 while (1) {
eencae 0:185ac7c21810 36
eencae 0:185ac7c21810 37 // check if flag i.e. interrupt has occured
eencae 0:185ac7c21810 38 if (sw2_flag) {
eencae 0:185ac7c21810 39 sw2_flag = 0; // if it has, clear the flag
eencae 0:185ac7c21810 40
eencae 0:185ac7c21810 41 // DO TASK HERE
eencae 0:185ac7c21810 42
eencae 0:185ac7c21810 43 }
eencae 0:185ac7c21810 44
eencae 0:185ac7c21810 45 // put the MCU to sleep until an interrupt wakes it up
eencae 0:185ac7c21810 46 sleep();
eencae 0:185ac7c21810 47
eencae 0:185ac7c21810 48 }
eencae 0:185ac7c21810 49 }
eencae 0:185ac7c21810 50
eencae 0:185ac7c21810 51 // SW2 event-triggered interrupt
eencae 0:185ac7c21810 52 void sw2_isr()
eencae 0:185ac7c21810 53 {
eencae 0:185ac7c21810 54 sw2_flag = 1; // set flag in ISR
eencae 0:185ac7c21810 55 }