Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
main.cpp@4:879718bd3126, 2017-12-20 (annotated)
- 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?
User | Revision | Line number | New 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 | } |