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.
Fork of mbed by
InterruptIn.h@27:7110ebee3484, 2011-11-29 (annotated)
- Committer:
- emilmont
- Date:
- Tue Nov 29 14:59:27 2011 +0000
- Revision:
- 27:7110ebee3484
- Parent:
- 11:1c1ebd0324fa
- Child:
- 43:aff670d0d510
New Libraries 11.11
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
rolf.meyer@arm.com | 11:1c1ebd0324fa | 1 | /* mbed Microcontroller Library - InterruptIn |
emilmont | 27:7110ebee3484 | 2 | * Copyright (c) 2006-2011 ARM Limited. All rights reserved. |
rolf.meyer@arm.com | 11:1c1ebd0324fa | 3 | */ |
rolf.meyer@arm.com | 11:1c1ebd0324fa | 4 | |
rolf.meyer@arm.com | 11:1c1ebd0324fa | 5 | #ifndef MBED_INTERRUPTIN_H |
rolf.meyer@arm.com | 11:1c1ebd0324fa | 6 | #define MBED_INTERRUPTIN_H |
rolf.meyer@arm.com | 11:1c1ebd0324fa | 7 | |
emilmont | 27:7110ebee3484 | 8 | #include "device.h" |
emilmont | 27:7110ebee3484 | 9 | |
emilmont | 27:7110ebee3484 | 10 | #if DEVICE_INTERRUPTIN |
emilmont | 27:7110ebee3484 | 11 | |
rolf.meyer@arm.com | 11:1c1ebd0324fa | 12 | #include "platform.h" |
rolf.meyer@arm.com | 11:1c1ebd0324fa | 13 | #include "PinNames.h" |
rolf.meyer@arm.com | 11:1c1ebd0324fa | 14 | #include "PeripheralNames.h" |
rolf.meyer@arm.com | 11:1c1ebd0324fa | 15 | #include "Base.h" |
rolf.meyer@arm.com | 11:1c1ebd0324fa | 16 | #include "FunctionPointer.h" |
rolf.meyer@arm.com | 11:1c1ebd0324fa | 17 | |
emilmont | 27:7110ebee3484 | 18 | #if defined(TARGET_LPC1768) || defined(TARGET_LPC2368) |
emilmont | 27:7110ebee3484 | 19 | #define CHANNEL_NUM 48 |
emilmont | 27:7110ebee3484 | 20 | #elif defined(TARGET_LPC11U24) |
emilmont | 27:7110ebee3484 | 21 | #define CHANNEL_NUM 8 |
emilmont | 27:7110ebee3484 | 22 | #endif |
emilmont | 27:7110ebee3484 | 23 | |
rolf.meyer@arm.com | 11:1c1ebd0324fa | 24 | namespace mbed { |
rolf.meyer@arm.com | 11:1c1ebd0324fa | 25 | |
rolf.meyer@arm.com | 11:1c1ebd0324fa | 26 | /* Class: InterruptIn |
rolf.meyer@arm.com | 11:1c1ebd0324fa | 27 | * A digital interrupt input, used to call a function on a rising or falling edge |
rolf.meyer@arm.com | 11:1c1ebd0324fa | 28 | * |
rolf.meyer@arm.com | 11:1c1ebd0324fa | 29 | * Example: |
rolf.meyer@arm.com | 11:1c1ebd0324fa | 30 | * > // Flash an LED while waiting for events |
rolf.meyer@arm.com | 11:1c1ebd0324fa | 31 | * > |
rolf.meyer@arm.com | 11:1c1ebd0324fa | 32 | * > #include "mbed.h" |
rolf.meyer@arm.com | 11:1c1ebd0324fa | 33 | * > |
rolf.meyer@arm.com | 11:1c1ebd0324fa | 34 | * > InterruptIn event(p16); |
rolf.meyer@arm.com | 11:1c1ebd0324fa | 35 | * > DigitalOut led(LED1); |
rolf.meyer@arm.com | 11:1c1ebd0324fa | 36 | * > |
rolf.meyer@arm.com | 11:1c1ebd0324fa | 37 | * > void trigger() { |
rolf.meyer@arm.com | 11:1c1ebd0324fa | 38 | * > printf("triggered!\n"); |
rolf.meyer@arm.com | 11:1c1ebd0324fa | 39 | * > } |
rolf.meyer@arm.com | 11:1c1ebd0324fa | 40 | * > |
rolf.meyer@arm.com | 11:1c1ebd0324fa | 41 | * > int main() { |
rolf.meyer@arm.com | 11:1c1ebd0324fa | 42 | * > event.rise(&trigger); |
rolf.meyer@arm.com | 11:1c1ebd0324fa | 43 | * > while(1) { |
rolf.meyer@arm.com | 11:1c1ebd0324fa | 44 | * > led = !led; |
rolf.meyer@arm.com | 11:1c1ebd0324fa | 45 | * > wait(0.25); |
rolf.meyer@arm.com | 11:1c1ebd0324fa | 46 | * > } |
rolf.meyer@arm.com | 11:1c1ebd0324fa | 47 | * > } |
rolf.meyer@arm.com | 11:1c1ebd0324fa | 48 | */ |
rolf.meyer@arm.com | 11:1c1ebd0324fa | 49 | class InterruptIn : public Base { |
rolf.meyer@arm.com | 11:1c1ebd0324fa | 50 | |
rolf.meyer@arm.com | 11:1c1ebd0324fa | 51 | public: |
rolf.meyer@arm.com | 11:1c1ebd0324fa | 52 | |
rolf.meyer@arm.com | 11:1c1ebd0324fa | 53 | /* Constructor: InterruptIn |
rolf.meyer@arm.com | 11:1c1ebd0324fa | 54 | * Create an InterruptIn connected to the specified pin |
rolf.meyer@arm.com | 11:1c1ebd0324fa | 55 | * |
rolf.meyer@arm.com | 11:1c1ebd0324fa | 56 | * Variables: |
rolf.meyer@arm.com | 11:1c1ebd0324fa | 57 | * pin - InterruptIn pin to connect to |
rolf.meyer@arm.com | 11:1c1ebd0324fa | 58 | * name - (optional) A string to identify the object |
rolf.meyer@arm.com | 11:1c1ebd0324fa | 59 | */ |
rolf.meyer@arm.com | 11:1c1ebd0324fa | 60 | InterruptIn(PinName pin, const char *name = NULL); |
emilmont | 27:7110ebee3484 | 61 | #if defined(TARGET_LPC11U24) |
emilmont | 27:7110ebee3484 | 62 | virtual ~InterruptIn(); |
emilmont | 27:7110ebee3484 | 63 | #endif |
rolf.meyer@arm.com | 11:1c1ebd0324fa | 64 | |
rolf.meyer@arm.com | 11:1c1ebd0324fa | 65 | int read(); |
rolf.meyer@arm.com | 11:1c1ebd0324fa | 66 | #ifdef MBED_OPERATORS |
rolf.meyer@arm.com | 11:1c1ebd0324fa | 67 | operator int(); |
rolf.meyer@arm.com | 11:1c1ebd0324fa | 68 | |
rolf.meyer@arm.com | 11:1c1ebd0324fa | 69 | #endif |
rolf.meyer@arm.com | 11:1c1ebd0324fa | 70 | |
rolf.meyer@arm.com | 11:1c1ebd0324fa | 71 | /* Function: rise |
rolf.meyer@arm.com | 11:1c1ebd0324fa | 72 | * Attach a function to call when a rising edge occurs on the input |
rolf.meyer@arm.com | 11:1c1ebd0324fa | 73 | * |
rolf.meyer@arm.com | 11:1c1ebd0324fa | 74 | * Variables: |
rolf.meyer@arm.com | 11:1c1ebd0324fa | 75 | * fptr - A pointer to a void function, or 0 to set as none |
rolf.meyer@arm.com | 11:1c1ebd0324fa | 76 | */ |
rolf.meyer@arm.com | 11:1c1ebd0324fa | 77 | void rise(void (*fptr)(void)); |
rolf.meyer@arm.com | 11:1c1ebd0324fa | 78 | |
rolf.meyer@arm.com | 11:1c1ebd0324fa | 79 | /* Function: rise |
rolf.meyer@arm.com | 11:1c1ebd0324fa | 80 | * Attach a member function to call when a rising edge occurs on the input |
rolf.meyer@arm.com | 11:1c1ebd0324fa | 81 | * |
rolf.meyer@arm.com | 11:1c1ebd0324fa | 82 | * Variables: |
rolf.meyer@arm.com | 11:1c1ebd0324fa | 83 | * tptr - pointer to the object to call the member function on |
rolf.meyer@arm.com | 11:1c1ebd0324fa | 84 | * mptr - pointer to the member function to be called |
rolf.meyer@arm.com | 11:1c1ebd0324fa | 85 | */ |
rolf.meyer@arm.com | 11:1c1ebd0324fa | 86 | template<typename T> |
rolf.meyer@arm.com | 11:1c1ebd0324fa | 87 | void rise(T* tptr, void (T::*mptr)(void)) { |
rolf.meyer@arm.com | 11:1c1ebd0324fa | 88 | _rise.attach(tptr, mptr); |
rolf.meyer@arm.com | 11:1c1ebd0324fa | 89 | setup_interrupt(1, 1); |
rolf.meyer@arm.com | 11:1c1ebd0324fa | 90 | } |
rolf.meyer@arm.com | 11:1c1ebd0324fa | 91 | |
rolf.meyer@arm.com | 11:1c1ebd0324fa | 92 | /* Function: fall |
rolf.meyer@arm.com | 11:1c1ebd0324fa | 93 | * Attach a function to call when a falling edge occurs on the input |
rolf.meyer@arm.com | 11:1c1ebd0324fa | 94 | * |
rolf.meyer@arm.com | 11:1c1ebd0324fa | 95 | * Variables: |
rolf.meyer@arm.com | 11:1c1ebd0324fa | 96 | * fptr - A pointer to a void function, or 0 to set as none |
rolf.meyer@arm.com | 11:1c1ebd0324fa | 97 | */ |
rolf.meyer@arm.com | 11:1c1ebd0324fa | 98 | void fall(void (*fptr)(void)); |
rolf.meyer@arm.com | 11:1c1ebd0324fa | 99 | |
rolf.meyer@arm.com | 11:1c1ebd0324fa | 100 | /* Function: fall |
rolf.meyer@arm.com | 11:1c1ebd0324fa | 101 | * Attach a member function to call when a falling edge occurs on the input |
rolf.meyer@arm.com | 11:1c1ebd0324fa | 102 | * |
rolf.meyer@arm.com | 11:1c1ebd0324fa | 103 | * Variables: |
rolf.meyer@arm.com | 11:1c1ebd0324fa | 104 | * tptr - pointer to the object to call the member function on |
rolf.meyer@arm.com | 11:1c1ebd0324fa | 105 | * mptr - pointer to the member function to be called |
rolf.meyer@arm.com | 11:1c1ebd0324fa | 106 | */ |
rolf.meyer@arm.com | 11:1c1ebd0324fa | 107 | template<typename T> |
rolf.meyer@arm.com | 11:1c1ebd0324fa | 108 | void fall(T* tptr, void (T::*mptr)(void)) { |
rolf.meyer@arm.com | 11:1c1ebd0324fa | 109 | _fall.attach(tptr, mptr); |
rolf.meyer@arm.com | 11:1c1ebd0324fa | 110 | setup_interrupt(0, 1); |
rolf.meyer@arm.com | 11:1c1ebd0324fa | 111 | } |
rolf.meyer@arm.com | 11:1c1ebd0324fa | 112 | |
rolf.meyer@arm.com | 11:1c1ebd0324fa | 113 | /* Function: mode |
rolf.meyer@arm.com | 11:1c1ebd0324fa | 114 | * Set the input pin mode |
rolf.meyer@arm.com | 11:1c1ebd0324fa | 115 | * |
rolf.meyer@arm.com | 11:1c1ebd0324fa | 116 | * Variables: |
rolf.meyer@arm.com | 11:1c1ebd0324fa | 117 | * mode - PullUp, PullDown, PullNone |
rolf.meyer@arm.com | 11:1c1ebd0324fa | 118 | */ |
rolf.meyer@arm.com | 11:1c1ebd0324fa | 119 | void mode(PinMode pull); |
rolf.meyer@arm.com | 11:1c1ebd0324fa | 120 | |
emilmont | 27:7110ebee3484 | 121 | static InterruptIn *_irq_objects[CHANNEL_NUM]; |
emilmont | 27:7110ebee3484 | 122 | |
emilmont | 27:7110ebee3484 | 123 | #if defined(TARGET_LPC1768) || defined(TARGET_LPC2368) |
emilmont | 27:7110ebee3484 | 124 | static void _irq(); |
emilmont | 27:7110ebee3484 | 125 | #elif defined(TARGET_LPC11U24) |
emilmont | 27:7110ebee3484 | 126 | static void handle_interrupt_in(unsigned int channel); |
emilmont | 27:7110ebee3484 | 127 | static void _irq0(); static void _irq1(); |
emilmont | 27:7110ebee3484 | 128 | static void _irq2(); static void _irq3(); |
emilmont | 27:7110ebee3484 | 129 | static void _irq4(); static void _irq5(); |
emilmont | 27:7110ebee3484 | 130 | static void _irq6(); static void _irq7(); |
emilmont | 27:7110ebee3484 | 131 | #endif |
rolf.meyer@arm.com | 11:1c1ebd0324fa | 132 | |
rolf.meyer@arm.com | 11:1c1ebd0324fa | 133 | protected: |
rolf.meyer@arm.com | 11:1c1ebd0324fa | 134 | PinName _pin; |
emilmont | 27:7110ebee3484 | 135 | #if defined(TARGET_LPC11U24) |
emilmont | 27:7110ebee3484 | 136 | Channel _channel; |
emilmont | 27:7110ebee3484 | 137 | #endif |
rolf.meyer@arm.com | 11:1c1ebd0324fa | 138 | FunctionPointer _rise; |
rolf.meyer@arm.com | 11:1c1ebd0324fa | 139 | FunctionPointer _fall; |
rolf.meyer@arm.com | 11:1c1ebd0324fa | 140 | |
rolf.meyer@arm.com | 11:1c1ebd0324fa | 141 | void setup_interrupt(int rising, int enable); |
rolf.meyer@arm.com | 11:1c1ebd0324fa | 142 | |
rolf.meyer@arm.com | 11:1c1ebd0324fa | 143 | }; |
rolf.meyer@arm.com | 11:1c1ebd0324fa | 144 | |
rolf.meyer@arm.com | 11:1c1ebd0324fa | 145 | } // namespace mbed |
rolf.meyer@arm.com | 11:1c1ebd0324fa | 146 | |
rolf.meyer@arm.com | 11:1c1ebd0324fa | 147 | #endif |
emilmont | 27:7110ebee3484 | 148 | |
emilmont | 27:7110ebee3484 | 149 | #endif |