InterruptIn example for LPC1768 board

Committer:
eencae
Date:
Wed Dec 09 13:25:08 2020 +0000
Revision:
0:11b9454d32eb
Initial Commit

Who changed what in which revision?

UserRevisionLine numberNew contents of line
eencae 0:11b9454d32eb 1 /*
eencae 0:11b9454d32eb 2
eencae 0:11b9454d32eb 3 2645_InterruptIn
eencae 0:11b9454d32eb 4
eencae 0:11b9454d32eb 5 Sample code from ELEC2645
eencae 0:11b9454d32eb 6
eencae 0:11b9454d32eb 7 Demonstrates how to use InterruptIn to generate an event-triggered interrupt
eencae 0:11b9454d32eb 8
eencae 0:11b9454d32eb 9 (c) Craig A. Evans, University of Leeds, Dec 2020
eencae 0:11b9454d32eb 10
eencae 0:11b9454d32eb 11 */
eencae 0:11b9454d32eb 12
eencae 0:11b9454d32eb 13 #include "mbed.h"
eencae 0:11b9454d32eb 14
eencae 0:11b9454d32eb 15 // Create objects for button A and LED1
eencae 0:11b9454d32eb 16 InterruptIn buttonA(p29);
eencae 0:11b9454d32eb 17 DigitalOut led(LED1);
eencae 0:11b9454d32eb 18
eencae 0:11b9454d32eb 19 // flag - must be volatile as changes within ISR
eencae 0:11b9454d32eb 20 // g_ prefix makes it easier to distinguish it as global
eencae 0:11b9454d32eb 21 volatile int g_buttonA_flag = 0;
eencae 0:11b9454d32eb 22
eencae 0:11b9454d32eb 23 // function prototypes
eencae 0:11b9454d32eb 24 void buttonA_isr();
eencae 0:11b9454d32eb 25
eencae 0:11b9454d32eb 26 int main()
eencae 0:11b9454d32eb 27 {
eencae 0:11b9454d32eb 28 // Button A has a pull-down resistor, so the pin will be at 0 V by default
eencae 0:11b9454d32eb 29 // and rise to 3.3 V when pressed. We therefore need to look for a rising edge
eencae 0:11b9454d32eb 30 // on the pin to fire the interrupt
eencae 0:11b9454d32eb 31 buttonA.rise(&buttonA_isr);
eencae 0:11b9454d32eb 32 // since Button A has an external pull-down, we should disable to internal pull-down
eencae 0:11b9454d32eb 33 // resistor that is enabled by default using InterruptIn
eencae 0:11b9454d32eb 34 buttonA.mode(PullNone);
eencae 0:11b9454d32eb 35
eencae 0:11b9454d32eb 36 while (1) {
eencae 0:11b9454d32eb 37
eencae 0:11b9454d32eb 38 // check if flag i.e. interrupt has occured
eencae 0:11b9454d32eb 39 if (g_buttonA_flag) {
eencae 0:11b9454d32eb 40 g_buttonA_flag = 0; // if it has, clear the flag
eencae 0:11b9454d32eb 41
eencae 0:11b9454d32eb 42 // send message over serial port - can observe in CoolTerm etc.
eencae 0:11b9454d32eb 43 printf("Execute task \n");
eencae 0:11b9454d32eb 44 // DO TASK HERE
eencae 0:11b9454d32eb 45 }
eencae 0:11b9454d32eb 46
eencae 0:11b9454d32eb 47 // put the MCU to sleep until an interrupt wakes it up
eencae 0:11b9454d32eb 48 sleep();
eencae 0:11b9454d32eb 49
eencae 0:11b9454d32eb 50 }
eencae 0:11b9454d32eb 51 }
eencae 0:11b9454d32eb 52
eencae 0:11b9454d32eb 53 // Button A event-triggered interrupt
eencae 0:11b9454d32eb 54 void buttonA_isr()
eencae 0:11b9454d32eb 55 {
eencae 0:11b9454d32eb 56 g_buttonA_flag = 1; // set flag in ISR
eencae 0:11b9454d32eb 57 }