]> gitweb.hamatoma.de Git - cpidjinn/commitdiff
SquareWaveTimer works, readFromGPIO()
authorhama <hama@siduction.net>
Wed, 15 Jun 2016 17:53:40 +0000 (19:53 +0200)
committerhama <hama@siduction.net>
Wed, 15 Jun 2016 17:53:40 +0000 (19:53 +0200)
Server/bcm2835.cpp
Server/bcm2835.hpp
Server/gpiotimer.cpp
Server/gpiotimer.hpp
util/timer.cpp

index bccf8aa30f585007280fc2754e63ecb069f5e33b..9881481d1d5530a66561c874fac29caa92ef7caf 100644 (file)
@@ -113,6 +113,18 @@ Bcm2835* Bcm2835::instance(Announcer* logger){
        return m_instance;
 }
 
+/**
+ * Reads the state of a pin.
+ *
+ * @param pin  the pin to read
+ * @return             <i>pmHigh</i> or <i>pmLow</i>
+ */
+PinState Bcm2835::readFromGPIO(PinNumber pin){
+       const int offsetPinLevel0 = 0x0034  / sizeof(uint32_t);
+    uint32_t value = readWord(m_gpioBase + offsetPinLevel0 + pin / 32);
+    PinState rc = (value & (1 << (pin % 32))) != 0 ? psHigh : psLow;
+       return rc;
+}
 /**
  * Reads a word from a memory mapped register.
  *
@@ -174,6 +186,41 @@ void Bcm2835::setMode(PinNumber pin, PinMode mode)
        }
 }
 
+/**
+ * Sleep a given number of microseconds.
+ *
+ * @param microseconds time to wait
+ */
+void Bcm2835::delay(int microseconds){
+       usleep(microseconds);
+}
+/**
+ * Sets the pullup or pulldown resistor for an input pin.
+ *
+ * Note: must be called after <i>setMode(pin, mInput)</i>
+ *
+ * @param pin                  the pin to change
+ * @param pullUpNotDown        <i>true</i>: the pullup resistor is switched on<br>
+ *                                             <i>false</i>: the pulldown resistor is switched on
+ */
+void Bcm2835::setInputPullX(PinNumber pin, bool pullUpNotDown){
+       const int offsetPullXEnable = 0x0094;
+       const int offsetPullXEnableClock0 = 0x0098;
+
+    writeWord(m_gpioBase + offsetPullXEnable / sizeof (uint32_t),
+                         pullUpNotDown ? 2 : 1);
+       // wait 150 cycles:
+       delay(10);
+       // address the pin:
+    writeWord(m_gpioBase + offsetPullXEnableClock0 / sizeof (uint32_t) + pin/32,
+                         1 << (pin % 32));
+       // wait 150 cycles, the setting will be done by clock
+       delay(10);
+       // remove the binding:
+    writeWord(m_gpioBase + offsetPullXEnable / sizeof (uint32_t), 0);
+    writeWord(m_gpioBase + offsetPullXEnableClock0 / sizeof (uint32_t) + pin/32, 0);
+}
+
 /**
  * Sets the state of an output pin.
  *
index 6293577e942a14837e4913f68ed23c44ce39362f..9157300f2cb0d0e38403903553eeab6e260f78ab 100644 (file)
@@ -7,8 +7,8 @@ enum PinState {
 };
 enum PinMode {
        mUndef,
-       mInput,
-       mOutput
+       mOutput,
+       mInput
 };
 
 /**
@@ -48,7 +48,9 @@ private:
 public:
        static Bcm2835* instance(Announcer* logger);
 public:
-       uint32_t readWord(volatile uint32_t* addr);
+       void delay(int microseconds);
+       PinState readFromGPIO(PinNumber pin);
+       void setInputPullX(PinNumber pin, bool pullUpNotDown);
        void setMode(PinNumber pin, PinMode mode);
        void setState(PinNumber pin, PinState state);
        /**
@@ -60,6 +62,7 @@ public:
        }
        void writeToGPIO(PinNumber pin, PinState state);
 protected:
+       uint32_t readWord(volatile uint32_t* addr);
        void setBits(volatile uint32_t* addr, uint32_t value, uint32_t mask);
     void writeWord(volatile uint32_t* addr, uint32_t value);
 private:
index 69e8ab997fbfa9329dfb4304b8d8f8edf9d95dc9..80c87f3392f511244eeecf02ccb6b9508a74d391 100644 (file)
@@ -54,7 +54,7 @@ SquareWaveTimer::SquareWaveTimer(PinNumber pin, uint64_t pause, int count,
        m_low(low),
        m_nextHigh(false){
        // high + low = factor 2:
-       m_count = count * 2;
+       m_taskCount = count * 2;
 }
 
 /**
index 76a8e4cb521976eef89b117e95d80e832eaaeab0..58f0d5bba32945932f95a03673e46d4f5e9930ba 100644 (file)
@@ -30,7 +30,6 @@ public:
 public:
        virtual void timerTask();
 private:
-       int m_count;
        uint64_t m_pause;
        uint64_t m_high;
        uint64_t m_low;
index 4ff3fafa3bfe02e17e9f2784fb1d4a5094c3a142..5b2b0397d1fbab65d69ef296625ecfc0c0535074 100644 (file)
@@ -1,5 +1,5 @@
 #include "util.hpp"
-//#define TRACE_ON
+#define TRACE_ON
 #include "trace.hpp"
 /**
  * Constructor.