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 | } |