Programme de contrôle de l'octopode 4DOF, Theraphosa-Salconi.

Dependencies:   debug mbed

CtrlBridge

  • fonction quelquonque pour communiquer avec les module
  • fonction quelquonque pour faire des recherche dans les module dispo
  • autre fonction pour jouer avec MemRegistre

Version 1.2.0

  • Ajout d'un mode de simulation pour tester le code avec seulement un contrôleur stm32
Revision:
7:dcfd81d7f93f
Parent:
1:25ea21da4542
Child:
9:7295385f02b2
--- a/source/ComSpi.cpp	Thu Mar 12 20:55:24 2015 +0000
+++ b/source/ComSpi.cpp	Thu Mar 19 00:20:09 2015 +0000
@@ -0,0 +1,115 @@
+
+#include "ComSpi.h"
+
+ComSpi::ComSpi(PinName mosi, PinName miso, PinName sclk, PinName _unused) : SPI(mosi,miso,sclk,_unused)
+{
+    // m_com = new SPI(mosi,miso,sclk,_unused);
+    //m_regPortUse=0;
+    //m_regPortLost=0;
+    m_demuxPos=0;
+    demuxIsUse=false;
+}
+
+ComSpi::ComSpi(PinName mosi, PinName miso, PinName sclk, PinName demuxA, PinName demuxB, PinName demuxC, PinName demuxD, PinName demuxEnable)
+    : SPI(mosi,miso,sclk,NC), m_demuxA(demuxA), m_demuxB(demuxB), m_demuxC(demuxC), m_demuxD(demuxD), m_demuxEnable(demuxEnable)
+{
+    m_demuxPos=0;
+    demuxIsUse=true;
+}
+
+ComSpi::~ComSpi()
+{
+    //if(m_com)
+    // delete(m_com);
+}
+void ComSpi::change_demux(void)
+{
+    DigitalOut pinDemuxA(m_demuxA);
+    DigitalOut pinDemuxB(m_demuxB);
+    DigitalOut pinDemuxC(m_demuxC);
+    DigitalOut pinDemuxD(m_demuxD);
+    DigitalOut pinDemuxEnable(m_demuxEnable);
+
+    pinDemuxEnable=0;
+
+    if(m_demuxPos & 1) pinDemuxA=1; //0b0001
+    else pinDemuxA=0;
+    if(m_demuxPos & 2) pinDemuxB=1; //0b0010
+    else pinDemuxB=0;
+    if(m_demuxPos & 4) pinDemuxC=1; //0b0100
+    else pinDemuxC=0;
+    if(m_demuxPos & 8) pinDemuxD=1; //0b1000
+    else pinDemuxD=0;
+
+    pinDemuxEnable=1;
+}
+int ComSpi::write(int value)
+{
+    int a;
+    a= SPI::write(value);
+    return a;
+}
+bool ComSpi::next_demux(void)
+{
+    bool result=false;
+
+    if(demuxIsUse) {
+        (m_demuxPos == 15)? m_demuxPos=0:m_demuxPos++;
+        change_demux();
+        result = true;
+    }
+    return result;
+}
+bool ComSpi::back_demux(void)
+{
+    bool result=false;
+
+    if(demuxIsUse) {
+        (m_demuxPos == 0)? m_demuxPos=15:m_demuxPos--;
+        change_demux();
+        result = true;
+    }
+    return result;
+}
+bool ComSpi::send(char portID, char adresseModule,char *flag,char *data)
+{
+    bool result=false;
+    int valueSend = SYNC;
+    int valueReceive=0;
+    //int CRC
+
+    valueReceive=write(valueSend);
+    if(valueReceive == valueSend) {
+        valueSend=(adresseModule<<8);
+
+        if(*flag != 0) valueSend+= (PFB1 << 6);
+        else valueSend+= (PFB0 << 6);
+
+        valueSend+= (NOACK << 4);
+
+        if(*data != 0) valueSend+= (NDB01 );
+        else valueSend+= (NDB00 );
+
+        valueReceive=write(valueSend);
+        if(valueReceive>>8 == adresseModule) {
+            //fini la sycronisation et la on envoie les data
+
+
+            if(*flag != 0) valueSend = *flag;
+            else valueSend=0;
+
+            if(*data != 0) valueSend= (valueSend<<4)+(*data);
+
+            valueReceive=write(valueSend);
+            if((*flag != 0) && (*data != 0)) *flag = valueReceive>>8;
+            else if(*flag != 0) *flag = valueReceive;
+            else if(*data != 0) *data = valueReceive;
+            
+            //Create CRC
+            //Send CRC
+            //Compare
+            result=true;
+        }
+    }
+    return result;
+}
\ No newline at end of file