projet_pololu_et5_ees

Fork of FastIO by Erik -

Revision:
0:d394ebd01052
Child:
1:85a4a54f15e3
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/FastIO.h	Tue Jul 01 17:04:08 2014 +0000
@@ -0,0 +1,152 @@
+#ifndef __FAST_IO_H
+#define __FAST_IO_H
+
+#include "FastIO_LPC1768.h"
+#include "FastIO_LPC11UXX.h"
+#include "FastIO_KLXX.h"
+
+#ifndef INIT_PIN
+#error Target is not supported
+#endif
+
+#include "mbed.h"
+
+/**
+ * Faster alternative compared to regular DigitalInOut
+ *
+ * Except the constructor it is compatible with regular DigitalInOut.
+ * Code is based on Igor Skochinsky's code (http://mbed.org/users/igorsk/code/FastIO/)
+ */
+template <PinName pin> class FastInOut
+{
+public:
+    /**
+     * Construct new FastInOut object
+     *
+     * @code
+     * FastInOut<LED1> led1;
+     * @endcode
+     *
+     * No initialization is done regarding input/output mode,
+     * FastIn/FastOut can be used if that is required
+     *
+     * @param pin pin the FastOut object should be used for
+     */
+    FastInOut() {
+        INIT_PIN;
+    }
+
+    void write(int value) {
+        if ( value )
+            WRITE_PIN_SET;
+        else
+            WRITE_PIN_CLR;
+    }
+    int read() {
+        return READ_PIN;
+    }
+
+    void mode(PinMode pull) {
+        SET_MODE(pull);
+    }
+
+    void output() {
+        SET_DIR_OUTPUT;
+    }
+
+    void input() {
+        SET_DIR_INPUT;
+    }
+
+    FastInOut& operator= (int value) {
+        write(value);
+        return *this;
+    };
+    FastInOut& operator= (FastInOut& rhs) {
+        return write(rhs.read());
+    };
+    operator int() {
+        return read();
+    };
+    
+    private:
+    fastio_vars container;
+};
+
+/**
+ * Faster alternative compared to regular DigitalOut
+ *
+ * Except the constructor it is compatible with regular DigitalOut. Aditionally all
+ * functions from DigitalInOut are also available (only initialization is different)
+ * Code is based on Igor Skochinsky's code (http://mbed.org/users/igorsk/code/FastIO/)
+ */
+template <PinName pin, int initial = 0> class FastOut : public FastInOut<pin>
+{
+public:
+    /**
+     * Construct new FastOut object
+     *
+     * @code
+     * FastOut<LED1> led1;
+     * @endcode
+     *
+     * @param pin pin the FastOut object should be used for
+     * @param initial (optional) initial state of the pin after construction: default is 0 (low)
+     */
+    FastOut() {
+        FastInOut<pin>::FastInOut();
+        write(initial);
+        SET_DIR_OUTPUT;
+    }
+
+    FastOut& operator= (int value) {
+        this->write(value);
+        return *this;
+    };
+    FastOut& operator= (FastOut& rhs) {
+        return this->write(rhs.read());
+    };
+    operator int() {
+        return this->read();
+    };
+};
+
+/**
+ * Faster alternative compared to regular DigitalIn
+ *
+ * Except the constructor it is compatible with regular DigitalIn. Aditionally all
+ * functions from DigitalInOut are also available (only initialization is different)
+ * Code is based on Igor Skochinsky's code (http://mbed.org/users/igorsk/code/FastIO/)
+ */
+template <PinName pin, PinMode mode = PullDefault> class FastIn : public FastInOut<pin>
+{
+public:
+    /**
+     * Construct new FastIn object
+     *
+     * @code
+     * FastIn<LED1> led1;
+     * @endcode
+     *
+     * @param pin pin the FastIn object should be used for
+     * @param mode (optional) initial mode of the pin after construction: default is PullDefault
+     */
+    FastIn() {
+        FastInOut::FastInOut();
+        SET_MODE(mode);
+        SET_DIR_INPUT;
+    }
+
+    FastIn& operator= (int value) {
+        this->write(value);
+        return *this;
+    };
+    FastIn& operator= (FastIn& rhs) {
+        return this->write(rhs.read());
+    };
+    operator int() {
+        return this->read();
+    };
+};
+
+#endif
\ No newline at end of file