inport from local

Dependents:   Hobbyking_Cheetah_0511

Committer:
NYX
Date:
Mon Mar 16 06:35:48 2020 +0000
Revision:
0:85b3fd62ea1a
reinport to mbed;

Who changed what in which revision?

UserRevisionLine numberNew contents of line
NYX 0:85b3fd62ea1a 1 /* mbed Microcontroller Library
NYX 0:85b3fd62ea1a 2 * Copyright (c) 2006-2013 ARM Limited
NYX 0:85b3fd62ea1a 3 *
NYX 0:85b3fd62ea1a 4 * Licensed under the Apache License, Version 2.0 (the "License");
NYX 0:85b3fd62ea1a 5 * you may not use this file except in compliance with the License.
NYX 0:85b3fd62ea1a 6 * You may obtain a copy of the License at
NYX 0:85b3fd62ea1a 7 *
NYX 0:85b3fd62ea1a 8 * http://www.apache.org/licenses/LICENSE-2.0
NYX 0:85b3fd62ea1a 9 *
NYX 0:85b3fd62ea1a 10 * Unless required by applicable law or agreed to in writing, software
NYX 0:85b3fd62ea1a 11 * distributed under the License is distributed on an "AS IS" BASIS,
NYX 0:85b3fd62ea1a 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
NYX 0:85b3fd62ea1a 13 * See the License for the specific language governing permissions and
NYX 0:85b3fd62ea1a 14 * limitations under the License.
NYX 0:85b3fd62ea1a 15 */
NYX 0:85b3fd62ea1a 16 #ifndef MBED_INTERRUPTIN_H
NYX 0:85b3fd62ea1a 17 #define MBED_INTERRUPTIN_H
NYX 0:85b3fd62ea1a 18
NYX 0:85b3fd62ea1a 19 #include "platform/platform.h"
NYX 0:85b3fd62ea1a 20
NYX 0:85b3fd62ea1a 21 #if defined (DEVICE_INTERRUPTIN) || defined(DOXYGEN_ONLY)
NYX 0:85b3fd62ea1a 22
NYX 0:85b3fd62ea1a 23 #include "hal/gpio_api.h"
NYX 0:85b3fd62ea1a 24 #include "hal/gpio_irq_api.h"
NYX 0:85b3fd62ea1a 25 #include "platform/Callback.h"
NYX 0:85b3fd62ea1a 26 #include "platform/mbed_critical.h"
NYX 0:85b3fd62ea1a 27 #include "platform/mbed_toolchain.h"
NYX 0:85b3fd62ea1a 28 #include "platform/NonCopyable.h"
NYX 0:85b3fd62ea1a 29
NYX 0:85b3fd62ea1a 30 namespace mbed {
NYX 0:85b3fd62ea1a 31 /** \addtogroup drivers */
NYX 0:85b3fd62ea1a 32
NYX 0:85b3fd62ea1a 33 /** A digital interrupt input, used to call a function on a rising or falling edge
NYX 0:85b3fd62ea1a 34 *
NYX 0:85b3fd62ea1a 35 * @note Synchronization level: Interrupt safe
NYX 0:85b3fd62ea1a 36 *
NYX 0:85b3fd62ea1a 37 * Example:
NYX 0:85b3fd62ea1a 38 * @code
NYX 0:85b3fd62ea1a 39 * // Flash an LED while waiting for events
NYX 0:85b3fd62ea1a 40 *
NYX 0:85b3fd62ea1a 41 * #include "mbed.h"
NYX 0:85b3fd62ea1a 42 *
NYX 0:85b3fd62ea1a 43 * InterruptIn event(p16);
NYX 0:85b3fd62ea1a 44 * DigitalOut led(LED1);
NYX 0:85b3fd62ea1a 45 *
NYX 0:85b3fd62ea1a 46 * void trigger() {
NYX 0:85b3fd62ea1a 47 * printf("triggered!\n");
NYX 0:85b3fd62ea1a 48 * }
NYX 0:85b3fd62ea1a 49 *
NYX 0:85b3fd62ea1a 50 * int main() {
NYX 0:85b3fd62ea1a 51 * event.rise(&trigger);
NYX 0:85b3fd62ea1a 52 * while(1) {
NYX 0:85b3fd62ea1a 53 * led = !led;
NYX 0:85b3fd62ea1a 54 * wait(0.25);
NYX 0:85b3fd62ea1a 55 * }
NYX 0:85b3fd62ea1a 56 * }
NYX 0:85b3fd62ea1a 57 * @endcode
NYX 0:85b3fd62ea1a 58 * @ingroup drivers
NYX 0:85b3fd62ea1a 59 */
NYX 0:85b3fd62ea1a 60 class InterruptIn : private NonCopyable<InterruptIn> {
NYX 0:85b3fd62ea1a 61
NYX 0:85b3fd62ea1a 62 public:
NYX 0:85b3fd62ea1a 63
NYX 0:85b3fd62ea1a 64 /** Create an InterruptIn connected to the specified pin
NYX 0:85b3fd62ea1a 65 *
NYX 0:85b3fd62ea1a 66 * @param pin InterruptIn pin to connect to
NYX 0:85b3fd62ea1a 67 */
NYX 0:85b3fd62ea1a 68 InterruptIn(PinName pin);
NYX 0:85b3fd62ea1a 69 virtual ~InterruptIn();
NYX 0:85b3fd62ea1a 70
NYX 0:85b3fd62ea1a 71 /** Read the input, represented as 0 or 1 (int)
NYX 0:85b3fd62ea1a 72 *
NYX 0:85b3fd62ea1a 73 * @returns
NYX 0:85b3fd62ea1a 74 * An integer representing the state of the input pin,
NYX 0:85b3fd62ea1a 75 * 0 for logical 0, 1 for logical 1
NYX 0:85b3fd62ea1a 76 */
NYX 0:85b3fd62ea1a 77 int read();
NYX 0:85b3fd62ea1a 78
NYX 0:85b3fd62ea1a 79 /** An operator shorthand for read()
NYX 0:85b3fd62ea1a 80 */
NYX 0:85b3fd62ea1a 81 operator int();
NYX 0:85b3fd62ea1a 82
NYX 0:85b3fd62ea1a 83
NYX 0:85b3fd62ea1a 84 /** Attach a function to call when a rising edge occurs on the input
NYX 0:85b3fd62ea1a 85 *
NYX 0:85b3fd62ea1a 86 * @param func A pointer to a void function, or 0 to set as none
NYX 0:85b3fd62ea1a 87 */
NYX 0:85b3fd62ea1a 88 void rise(Callback<void()> func);
NYX 0:85b3fd62ea1a 89
NYX 0:85b3fd62ea1a 90 /** Attach a member function to call when a rising edge occurs on the input
NYX 0:85b3fd62ea1a 91 *
NYX 0:85b3fd62ea1a 92 * @param obj pointer to the object to call the member function on
NYX 0:85b3fd62ea1a 93 * @param method pointer to the member function to be called
NYX 0:85b3fd62ea1a 94 * @deprecated
NYX 0:85b3fd62ea1a 95 * The rise function does not support cv-qualifiers. Replaced by
NYX 0:85b3fd62ea1a 96 * rise(callback(obj, method)).
NYX 0:85b3fd62ea1a 97 */
NYX 0:85b3fd62ea1a 98 template<typename T, typename M>
NYX 0:85b3fd62ea1a 99 MBED_DEPRECATED_SINCE("mbed-os-5.1",
NYX 0:85b3fd62ea1a 100 "The rise function does not support cv-qualifiers. Replaced by "
NYX 0:85b3fd62ea1a 101 "rise(callback(obj, method)).")
NYX 0:85b3fd62ea1a 102 void rise(T *obj, M method) {
NYX 0:85b3fd62ea1a 103 core_util_critical_section_enter();
NYX 0:85b3fd62ea1a 104 rise(callback(obj, method));
NYX 0:85b3fd62ea1a 105 core_util_critical_section_exit();
NYX 0:85b3fd62ea1a 106 }
NYX 0:85b3fd62ea1a 107
NYX 0:85b3fd62ea1a 108 /** Attach a function to call when a falling edge occurs on the input
NYX 0:85b3fd62ea1a 109 *
NYX 0:85b3fd62ea1a 110 * @param func A pointer to a void function, or 0 to set as none
NYX 0:85b3fd62ea1a 111 */
NYX 0:85b3fd62ea1a 112 void fall(Callback<void()> func);
NYX 0:85b3fd62ea1a 113
NYX 0:85b3fd62ea1a 114 /** Attach a member function to call when a falling edge occurs on the input
NYX 0:85b3fd62ea1a 115 *
NYX 0:85b3fd62ea1a 116 * @param obj pointer to the object to call the member function on
NYX 0:85b3fd62ea1a 117 * @param method pointer to the member function to be called
NYX 0:85b3fd62ea1a 118 * @deprecated
NYX 0:85b3fd62ea1a 119 * The rise function does not support cv-qualifiers. Replaced by
NYX 0:85b3fd62ea1a 120 * rise(callback(obj, method)).
NYX 0:85b3fd62ea1a 121 */
NYX 0:85b3fd62ea1a 122 template<typename T, typename M>
NYX 0:85b3fd62ea1a 123 MBED_DEPRECATED_SINCE("mbed-os-5.1",
NYX 0:85b3fd62ea1a 124 "The fall function does not support cv-qualifiers. Replaced by "
NYX 0:85b3fd62ea1a 125 "fall(callback(obj, method)).")
NYX 0:85b3fd62ea1a 126 void fall(T *obj, M method) {
NYX 0:85b3fd62ea1a 127 core_util_critical_section_enter();
NYX 0:85b3fd62ea1a 128 fall(callback(obj, method));
NYX 0:85b3fd62ea1a 129 core_util_critical_section_exit();
NYX 0:85b3fd62ea1a 130 }
NYX 0:85b3fd62ea1a 131
NYX 0:85b3fd62ea1a 132 /** Set the input pin mode
NYX 0:85b3fd62ea1a 133 *
NYX 0:85b3fd62ea1a 134 * @param pull PullUp, PullDown, PullNone
NYX 0:85b3fd62ea1a 135 */
NYX 0:85b3fd62ea1a 136 void mode(PinMode pull);
NYX 0:85b3fd62ea1a 137
NYX 0:85b3fd62ea1a 138 /** Enable IRQ. This method depends on hw implementation, might enable one
NYX 0:85b3fd62ea1a 139 * port interrupts. For further information, check gpio_irq_enable().
NYX 0:85b3fd62ea1a 140 */
NYX 0:85b3fd62ea1a 141 void enable_irq();
NYX 0:85b3fd62ea1a 142
NYX 0:85b3fd62ea1a 143 /** Disable IRQ. This method depends on hw implementation, might disable one
NYX 0:85b3fd62ea1a 144 * port interrupts. For further information, check gpio_irq_disable().
NYX 0:85b3fd62ea1a 145 */
NYX 0:85b3fd62ea1a 146 void disable_irq();
NYX 0:85b3fd62ea1a 147
NYX 0:85b3fd62ea1a 148 static void _irq_handler(uint32_t id, gpio_irq_event event);
NYX 0:85b3fd62ea1a 149
NYX 0:85b3fd62ea1a 150 protected:
NYX 0:85b3fd62ea1a 151 gpio_t gpio;
NYX 0:85b3fd62ea1a 152 gpio_irq_t gpio_irq;
NYX 0:85b3fd62ea1a 153
NYX 0:85b3fd62ea1a 154 Callback<void()> _rise;
NYX 0:85b3fd62ea1a 155 Callback<void()> _fall;
NYX 0:85b3fd62ea1a 156 };
NYX 0:85b3fd62ea1a 157
NYX 0:85b3fd62ea1a 158 } // namespace mbed
NYX 0:85b3fd62ea1a 159
NYX 0:85b3fd62ea1a 160 #endif
NYX 0:85b3fd62ea1a 161
NYX 0:85b3fd62ea1a 162 #endif