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@0:185ac7c21810, 2016-01-05 (annotated)
- 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?
| 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 | 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 | } |