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 FastIO by
FastIO.h@15:e0c5a5216647, 2015-07-09 (annotated)
- Committer:
- Sissors
- Date:
- Thu Jul 09 21:11:39 2015 +0000
- Revision:
- 15:e0c5a5216647
- Parent:
- 13:0e21ffc6cb84
- Child:
- 18:c95920122b2e
Initial EFM32 support. FastIn and FastOut child classes seem to be broken yet again. EFM32 has broken mode switching (don't blame me for their GPIO being a pain to use).
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
Sissors | 0:d394ebd01052 | 1 | #ifndef __FAST_IO_H |
Sissors | 0:d394ebd01052 | 2 | #define __FAST_IO_H |
Sissors | 0:d394ebd01052 | 3 | |
Sissors | 0:d394ebd01052 | 4 | #include "FastIO_LPC1768.h" |
Sissors | 0:d394ebd01052 | 5 | #include "FastIO_LPC11UXX.h" |
Sissors | 1:85a4a54f15e3 | 6 | #include "FastIO_LPC81X.h" |
Sissors | 0:d394ebd01052 | 7 | #include "FastIO_KLXX.h" |
Sissors | 10:bb22a3dbedb4 | 8 | #include "FastIO_K20D50M_KPSDK.h" |
Sissors | 13:0e21ffc6cb84 | 9 | #include "FastIO_STM32F4.h" |
Sissors | 6:da3730030c07 | 10 | #include "FastIO_NUCLEO_F030.h" |
Sissors | 7:1e784ae11fba | 11 | #include "FastIO_LPC11XX.h" |
Sissors | 15:e0c5a5216647 | 12 | #include "FastIO_EFM32.h" |
Sissors | 0:d394ebd01052 | 13 | |
Sissors | 0:d394ebd01052 | 14 | #ifndef INIT_PIN |
Sissors | 2:1a6ed4b84590 | 15 | #warning Target is not supported by FastIO |
Sissors | 2:1a6ed4b84590 | 16 | #warning Reverting to regular DigitalInOut |
Sissors | 2:1a6ed4b84590 | 17 | #include "FastIO_Unsupported.h" |
Sissors | 0:d394ebd01052 | 18 | #endif |
Sissors | 0:d394ebd01052 | 19 | |
Sissors | 0:d394ebd01052 | 20 | #include "mbed.h" |
Sissors | 0:d394ebd01052 | 21 | |
Sissors | 0:d394ebd01052 | 22 | /** |
Sissors | 0:d394ebd01052 | 23 | * Faster alternative compared to regular DigitalInOut |
Sissors | 0:d394ebd01052 | 24 | * |
Sissors | 0:d394ebd01052 | 25 | * Except the constructor it is compatible with regular DigitalInOut. |
Sissors | 0:d394ebd01052 | 26 | * Code is based on Igor Skochinsky's code (http://mbed.org/users/igorsk/code/FastIO/) |
Sissors | 0:d394ebd01052 | 27 | */ |
Sissors | 0:d394ebd01052 | 28 | template <PinName pin> class FastInOut |
Sissors | 0:d394ebd01052 | 29 | { |
Sissors | 0:d394ebd01052 | 30 | public: |
Sissors | 0:d394ebd01052 | 31 | /** |
Sissors | 0:d394ebd01052 | 32 | * Construct new FastInOut object |
Sissors | 0:d394ebd01052 | 33 | * |
Sissors | 0:d394ebd01052 | 34 | * @code |
Sissors | 0:d394ebd01052 | 35 | * FastInOut<LED1> led1; |
Sissors | 0:d394ebd01052 | 36 | * @endcode |
Sissors | 0:d394ebd01052 | 37 | * |
Sissors | 0:d394ebd01052 | 38 | * No initialization is done regarding input/output mode, |
Sissors | 0:d394ebd01052 | 39 | * FastIn/FastOut can be used if that is required |
Sissors | 0:d394ebd01052 | 40 | * |
Sissors | 0:d394ebd01052 | 41 | * @param pin pin the FastOut object should be used for |
Sissors | 0:d394ebd01052 | 42 | */ |
Sissors | 0:d394ebd01052 | 43 | FastInOut() { |
Sissors | 0:d394ebd01052 | 44 | INIT_PIN; |
Sissors | 0:d394ebd01052 | 45 | } |
Sissors | 2:1a6ed4b84590 | 46 | |
Sissors | 2:1a6ed4b84590 | 47 | ~FastInOut() { |
Sissors | 2:1a6ed4b84590 | 48 | DESTROY_PIN; |
Sissors | 2:1a6ed4b84590 | 49 | } |
Sissors | 0:d394ebd01052 | 50 | |
Sissors | 0:d394ebd01052 | 51 | void write(int value) { |
Sissors | 0:d394ebd01052 | 52 | if ( value ) |
Sissors | 0:d394ebd01052 | 53 | WRITE_PIN_SET; |
Sissors | 0:d394ebd01052 | 54 | else |
Sissors | 0:d394ebd01052 | 55 | WRITE_PIN_CLR; |
Sissors | 0:d394ebd01052 | 56 | } |
Sissors | 0:d394ebd01052 | 57 | int read() { |
Sissors | 0:d394ebd01052 | 58 | return READ_PIN; |
Sissors | 0:d394ebd01052 | 59 | } |
Sissors | 0:d394ebd01052 | 60 | |
Sissors | 0:d394ebd01052 | 61 | void mode(PinMode pull) { |
Sissors | 0:d394ebd01052 | 62 | SET_MODE(pull); |
Sissors | 0:d394ebd01052 | 63 | } |
Sissors | 0:d394ebd01052 | 64 | |
Sissors | 0:d394ebd01052 | 65 | void output() { |
Sissors | 0:d394ebd01052 | 66 | SET_DIR_OUTPUT; |
Sissors | 0:d394ebd01052 | 67 | } |
Sissors | 0:d394ebd01052 | 68 | |
Sissors | 0:d394ebd01052 | 69 | void input() { |
Sissors | 0:d394ebd01052 | 70 | SET_DIR_INPUT; |
Sissors | 0:d394ebd01052 | 71 | } |
Sissors | 0:d394ebd01052 | 72 | |
Sissors | 0:d394ebd01052 | 73 | FastInOut& operator= (int value) { |
Sissors | 0:d394ebd01052 | 74 | write(value); |
Sissors | 0:d394ebd01052 | 75 | return *this; |
Sissors | 0:d394ebd01052 | 76 | }; |
Sissors | 0:d394ebd01052 | 77 | FastInOut& operator= (FastInOut& rhs) { |
Sissors | 0:d394ebd01052 | 78 | return write(rhs.read()); |
Sissors | 0:d394ebd01052 | 79 | }; |
Sissors | 0:d394ebd01052 | 80 | operator int() { |
Sissors | 0:d394ebd01052 | 81 | return read(); |
Sissors | 0:d394ebd01052 | 82 | }; |
Sissors | 0:d394ebd01052 | 83 | |
Sissors | 15:e0c5a5216647 | 84 | protected: |
Sissors | 0:d394ebd01052 | 85 | fastio_vars container; |
Sissors | 0:d394ebd01052 | 86 | }; |
Sissors | 0:d394ebd01052 | 87 | |
Sissors | 0:d394ebd01052 | 88 | /** |
Sissors | 0:d394ebd01052 | 89 | * Faster alternative compared to regular DigitalOut |
Sissors | 0:d394ebd01052 | 90 | * |
Sissors | 0:d394ebd01052 | 91 | * Except the constructor it is compatible with regular DigitalOut. Aditionally all |
Sissors | 0:d394ebd01052 | 92 | * functions from DigitalInOut are also available (only initialization is different) |
Sissors | 0:d394ebd01052 | 93 | * Code is based on Igor Skochinsky's code (http://mbed.org/users/igorsk/code/FastIO/) |
Sissors | 0:d394ebd01052 | 94 | */ |
Sissors | 0:d394ebd01052 | 95 | template <PinName pin, int initial = 0> class FastOut : public FastInOut<pin> |
Sissors | 0:d394ebd01052 | 96 | { |
Sissors | 0:d394ebd01052 | 97 | public: |
Sissors | 0:d394ebd01052 | 98 | /** |
Sissors | 0:d394ebd01052 | 99 | * Construct new FastOut object |
Sissors | 0:d394ebd01052 | 100 | * |
Sissors | 0:d394ebd01052 | 101 | * @code |
Sissors | 0:d394ebd01052 | 102 | * FastOut<LED1> led1; |
Sissors | 0:d394ebd01052 | 103 | * @endcode |
Sissors | 0:d394ebd01052 | 104 | * |
Sissors | 0:d394ebd01052 | 105 | * @param pin pin the FastOut object should be used for |
Sissors | 0:d394ebd01052 | 106 | * @param initial (optional) initial state of the pin after construction: default is 0 (low) |
Sissors | 0:d394ebd01052 | 107 | */ |
Sissors | 12:973e253323c9 | 108 | FastOut() : FastInOut<pin>::FastInOut() { |
Sissors | 0:d394ebd01052 | 109 | write(initial); |
Sissors | 0:d394ebd01052 | 110 | SET_DIR_OUTPUT; |
Sissors | 0:d394ebd01052 | 111 | } |
Sissors | 0:d394ebd01052 | 112 | |
Sissors | 0:d394ebd01052 | 113 | FastOut& operator= (int value) { |
Sissors | 0:d394ebd01052 | 114 | this->write(value); |
Sissors | 0:d394ebd01052 | 115 | return *this; |
Sissors | 0:d394ebd01052 | 116 | }; |
Sissors | 0:d394ebd01052 | 117 | FastOut& operator= (FastOut& rhs) { |
Sissors | 0:d394ebd01052 | 118 | return this->write(rhs.read()); |
Sissors | 0:d394ebd01052 | 119 | }; |
Sissors | 0:d394ebd01052 | 120 | operator int() { |
Sissors | 0:d394ebd01052 | 121 | return this->read(); |
Sissors | 0:d394ebd01052 | 122 | }; |
Sissors | 0:d394ebd01052 | 123 | }; |
Sissors | 0:d394ebd01052 | 124 | |
Sissors | 0:d394ebd01052 | 125 | /** |
Sissors | 0:d394ebd01052 | 126 | * Faster alternative compared to regular DigitalIn |
Sissors | 0:d394ebd01052 | 127 | * |
Sissors | 0:d394ebd01052 | 128 | * Except the constructor it is compatible with regular DigitalIn. Aditionally all |
Sissors | 0:d394ebd01052 | 129 | * functions from DigitalInOut are also available (only initialization is different) |
Sissors | 0:d394ebd01052 | 130 | * Code is based on Igor Skochinsky's code (http://mbed.org/users/igorsk/code/FastIO/) |
Sissors | 0:d394ebd01052 | 131 | */ |
Sissors | 8:b0d725519c4f | 132 | template <PinName pin, PinMode pinmode = PullDefault> class FastIn : public FastInOut<pin> |
Sissors | 0:d394ebd01052 | 133 | { |
Sissors | 0:d394ebd01052 | 134 | public: |
Sissors | 0:d394ebd01052 | 135 | /** |
Sissors | 0:d394ebd01052 | 136 | * Construct new FastIn object |
Sissors | 0:d394ebd01052 | 137 | * |
Sissors | 0:d394ebd01052 | 138 | * @code |
Sissors | 0:d394ebd01052 | 139 | * FastIn<LED1> led1; |
Sissors | 0:d394ebd01052 | 140 | * @endcode |
Sissors | 0:d394ebd01052 | 141 | * |
Sissors | 0:d394ebd01052 | 142 | * @param pin pin the FastIn object should be used for |
Sissors | 8:b0d725519c4f | 143 | * @param pinmode (optional) initial mode of the pin after construction: default is PullDefault |
Sissors | 0:d394ebd01052 | 144 | */ |
Sissors | 12:973e253323c9 | 145 | FastIn() : FastInOut<pin>::FastInOut() { |
Sissors | 8:b0d725519c4f | 146 | SET_MODE(pinmode); |
Sissors | 0:d394ebd01052 | 147 | SET_DIR_INPUT; |
Sissors | 0:d394ebd01052 | 148 | } |
Sissors | 0:d394ebd01052 | 149 | |
Sissors | 0:d394ebd01052 | 150 | FastIn& operator= (int value) { |
Sissors | 0:d394ebd01052 | 151 | this->write(value); |
Sissors | 0:d394ebd01052 | 152 | return *this; |
Sissors | 0:d394ebd01052 | 153 | }; |
Sissors | 0:d394ebd01052 | 154 | FastIn& operator= (FastIn& rhs) { |
Sissors | 0:d394ebd01052 | 155 | return this->write(rhs.read()); |
Sissors | 0:d394ebd01052 | 156 | }; |
Sissors | 0:d394ebd01052 | 157 | operator int() { |
Sissors | 0:d394ebd01052 | 158 | return this->read(); |
Sissors | 0:d394ebd01052 | 159 | }; |
Sissors | 0:d394ebd01052 | 160 | }; |
Sissors | 0:d394ebd01052 | 161 | |
Sissors | 0:d394ebd01052 | 162 | #endif |