Fixed constructor for latest mbed library.

Dependents:   Pinscape_Controller_v1 Pinscape_Controller Pinscape_Controller_V2_arnoz Pinscape_Controller_V2

Fork of FastIO by Erik -

Committer:
Sissors
Date:
Tue Jul 01 17:04:08 2014 +0000
Revision:
0:d394ebd01052
Child:
1:85a4a54f15e3
v1.0

Who changed what in which revision?

UserRevisionLine numberNew 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 0:d394ebd01052 6 #include "FastIO_KLXX.h"
Sissors 0:d394ebd01052 7
Sissors 0:d394ebd01052 8 #ifndef INIT_PIN
Sissors 0:d394ebd01052 9 #error Target is not supported
Sissors 0:d394ebd01052 10 #endif
Sissors 0:d394ebd01052 11
Sissors 0:d394ebd01052 12 #include "mbed.h"
Sissors 0:d394ebd01052 13
Sissors 0:d394ebd01052 14 /**
Sissors 0:d394ebd01052 15 * Faster alternative compared to regular DigitalInOut
Sissors 0:d394ebd01052 16 *
Sissors 0:d394ebd01052 17 * Except the constructor it is compatible with regular DigitalInOut.
Sissors 0:d394ebd01052 18 * Code is based on Igor Skochinsky's code (http://mbed.org/users/igorsk/code/FastIO/)
Sissors 0:d394ebd01052 19 */
Sissors 0:d394ebd01052 20 template <PinName pin> class FastInOut
Sissors 0:d394ebd01052 21 {
Sissors 0:d394ebd01052 22 public:
Sissors 0:d394ebd01052 23 /**
Sissors 0:d394ebd01052 24 * Construct new FastInOut object
Sissors 0:d394ebd01052 25 *
Sissors 0:d394ebd01052 26 * @code
Sissors 0:d394ebd01052 27 * FastInOut<LED1> led1;
Sissors 0:d394ebd01052 28 * @endcode
Sissors 0:d394ebd01052 29 *
Sissors 0:d394ebd01052 30 * No initialization is done regarding input/output mode,
Sissors 0:d394ebd01052 31 * FastIn/FastOut can be used if that is required
Sissors 0:d394ebd01052 32 *
Sissors 0:d394ebd01052 33 * @param pin pin the FastOut object should be used for
Sissors 0:d394ebd01052 34 */
Sissors 0:d394ebd01052 35 FastInOut() {
Sissors 0:d394ebd01052 36 INIT_PIN;
Sissors 0:d394ebd01052 37 }
Sissors 0:d394ebd01052 38
Sissors 0:d394ebd01052 39 void write(int value) {
Sissors 0:d394ebd01052 40 if ( value )
Sissors 0:d394ebd01052 41 WRITE_PIN_SET;
Sissors 0:d394ebd01052 42 else
Sissors 0:d394ebd01052 43 WRITE_PIN_CLR;
Sissors 0:d394ebd01052 44 }
Sissors 0:d394ebd01052 45 int read() {
Sissors 0:d394ebd01052 46 return READ_PIN;
Sissors 0:d394ebd01052 47 }
Sissors 0:d394ebd01052 48
Sissors 0:d394ebd01052 49 void mode(PinMode pull) {
Sissors 0:d394ebd01052 50 SET_MODE(pull);
Sissors 0:d394ebd01052 51 }
Sissors 0:d394ebd01052 52
Sissors 0:d394ebd01052 53 void output() {
Sissors 0:d394ebd01052 54 SET_DIR_OUTPUT;
Sissors 0:d394ebd01052 55 }
Sissors 0:d394ebd01052 56
Sissors 0:d394ebd01052 57 void input() {
Sissors 0:d394ebd01052 58 SET_DIR_INPUT;
Sissors 0:d394ebd01052 59 }
Sissors 0:d394ebd01052 60
Sissors 0:d394ebd01052 61 FastInOut& operator= (int value) {
Sissors 0:d394ebd01052 62 write(value);
Sissors 0:d394ebd01052 63 return *this;
Sissors 0:d394ebd01052 64 };
Sissors 0:d394ebd01052 65 FastInOut& operator= (FastInOut& rhs) {
Sissors 0:d394ebd01052 66 return write(rhs.read());
Sissors 0:d394ebd01052 67 };
Sissors 0:d394ebd01052 68 operator int() {
Sissors 0:d394ebd01052 69 return read();
Sissors 0:d394ebd01052 70 };
Sissors 0:d394ebd01052 71
Sissors 0:d394ebd01052 72 private:
Sissors 0:d394ebd01052 73 fastio_vars container;
Sissors 0:d394ebd01052 74 };
Sissors 0:d394ebd01052 75
Sissors 0:d394ebd01052 76 /**
Sissors 0:d394ebd01052 77 * Faster alternative compared to regular DigitalOut
Sissors 0:d394ebd01052 78 *
Sissors 0:d394ebd01052 79 * Except the constructor it is compatible with regular DigitalOut. Aditionally all
Sissors 0:d394ebd01052 80 * functions from DigitalInOut are also available (only initialization is different)
Sissors 0:d394ebd01052 81 * Code is based on Igor Skochinsky's code (http://mbed.org/users/igorsk/code/FastIO/)
Sissors 0:d394ebd01052 82 */
Sissors 0:d394ebd01052 83 template <PinName pin, int initial = 0> class FastOut : public FastInOut<pin>
Sissors 0:d394ebd01052 84 {
Sissors 0:d394ebd01052 85 public:
Sissors 0:d394ebd01052 86 /**
Sissors 0:d394ebd01052 87 * Construct new FastOut object
Sissors 0:d394ebd01052 88 *
Sissors 0:d394ebd01052 89 * @code
Sissors 0:d394ebd01052 90 * FastOut<LED1> led1;
Sissors 0:d394ebd01052 91 * @endcode
Sissors 0:d394ebd01052 92 *
Sissors 0:d394ebd01052 93 * @param pin pin the FastOut object should be used for
Sissors 0:d394ebd01052 94 * @param initial (optional) initial state of the pin after construction: default is 0 (low)
Sissors 0:d394ebd01052 95 */
Sissors 0:d394ebd01052 96 FastOut() {
Sissors 0:d394ebd01052 97 FastInOut<pin>::FastInOut();
Sissors 0:d394ebd01052 98 write(initial);
Sissors 0:d394ebd01052 99 SET_DIR_OUTPUT;
Sissors 0:d394ebd01052 100 }
Sissors 0:d394ebd01052 101
Sissors 0:d394ebd01052 102 FastOut& operator= (int value) {
Sissors 0:d394ebd01052 103 this->write(value);
Sissors 0:d394ebd01052 104 return *this;
Sissors 0:d394ebd01052 105 };
Sissors 0:d394ebd01052 106 FastOut& operator= (FastOut& rhs) {
Sissors 0:d394ebd01052 107 return this->write(rhs.read());
Sissors 0:d394ebd01052 108 };
Sissors 0:d394ebd01052 109 operator int() {
Sissors 0:d394ebd01052 110 return this->read();
Sissors 0:d394ebd01052 111 };
Sissors 0:d394ebd01052 112 };
Sissors 0:d394ebd01052 113
Sissors 0:d394ebd01052 114 /**
Sissors 0:d394ebd01052 115 * Faster alternative compared to regular DigitalIn
Sissors 0:d394ebd01052 116 *
Sissors 0:d394ebd01052 117 * Except the constructor it is compatible with regular DigitalIn. Aditionally all
Sissors 0:d394ebd01052 118 * functions from DigitalInOut are also available (only initialization is different)
Sissors 0:d394ebd01052 119 * Code is based on Igor Skochinsky's code (http://mbed.org/users/igorsk/code/FastIO/)
Sissors 0:d394ebd01052 120 */
Sissors 0:d394ebd01052 121 template <PinName pin, PinMode mode = PullDefault> class FastIn : public FastInOut<pin>
Sissors 0:d394ebd01052 122 {
Sissors 0:d394ebd01052 123 public:
Sissors 0:d394ebd01052 124 /**
Sissors 0:d394ebd01052 125 * Construct new FastIn object
Sissors 0:d394ebd01052 126 *
Sissors 0:d394ebd01052 127 * @code
Sissors 0:d394ebd01052 128 * FastIn<LED1> led1;
Sissors 0:d394ebd01052 129 * @endcode
Sissors 0:d394ebd01052 130 *
Sissors 0:d394ebd01052 131 * @param pin pin the FastIn object should be used for
Sissors 0:d394ebd01052 132 * @param mode (optional) initial mode of the pin after construction: default is PullDefault
Sissors 0:d394ebd01052 133 */
Sissors 0:d394ebd01052 134 FastIn() {
Sissors 0:d394ebd01052 135 FastInOut::FastInOut();
Sissors 0:d394ebd01052 136 SET_MODE(mode);
Sissors 0:d394ebd01052 137 SET_DIR_INPUT;
Sissors 0:d394ebd01052 138 }
Sissors 0:d394ebd01052 139
Sissors 0:d394ebd01052 140 FastIn& operator= (int value) {
Sissors 0:d394ebd01052 141 this->write(value);
Sissors 0:d394ebd01052 142 return *this;
Sissors 0:d394ebd01052 143 };
Sissors 0:d394ebd01052 144 FastIn& operator= (FastIn& rhs) {
Sissors 0:d394ebd01052 145 return this->write(rhs.read());
Sissors 0:d394ebd01052 146 };
Sissors 0:d394ebd01052 147 operator int() {
Sissors 0:d394ebd01052 148 return this->read();
Sissors 0:d394ebd01052 149 };
Sissors 0:d394ebd01052 150 };
Sissors 0:d394ebd01052 151
Sissors 0:d394ebd01052 152 #endif