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@1:58d6707580cb, 2016-01-05 (annotated)
- 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?
| 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 | 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 | } |