strat des robots

Fork of CRAC-Strat_2017 by CRAC Team

Committer:
ClementBreteau
Date:
Fri May 19 17:14:07 2017 +0000
Revision:
17:d1594579eec6
Parent:
0:ad97421fb1fb
strat du robot, 19-05-2017, 19h

Who changed what in which revision?

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