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
Committer:
salco
Date:
Fri Mar 20 01:03:17 2015 +0000
Revision:
11:496453b45e25
Parent:
10:7e6aeaebe1a2
Child:
12:bf44013497c8
ajouter 2-3 debug pour voir ou est l'overflow quand je call tachecritique.

Who changed what in which revision?

UserRevisionLine numberNew contents of line
salco 7:dcfd81d7f93f 1
salco 7:dcfd81d7f93f 2 #include "ComSpi.h"
salco 7:dcfd81d7f93f 3
salco 7:dcfd81d7f93f 4 ComSpi::ComSpi(PinName mosi, PinName miso, PinName sclk, PinName _unused) : SPI(mosi,miso,sclk,_unused)
salco 7:dcfd81d7f93f 5 {
salco 7:dcfd81d7f93f 6 // m_com = new SPI(mosi,miso,sclk,_unused);
salco 7:dcfd81d7f93f 7 //m_regPortUse=0;
salco 7:dcfd81d7f93f 8 //m_regPortLost=0;
salco 7:dcfd81d7f93f 9 m_demuxPos=0;
salco 7:dcfd81d7f93f 10 demuxIsUse=false;
salco 7:dcfd81d7f93f 11 }
salco 7:dcfd81d7f93f 12
salco 7:dcfd81d7f93f 13 ComSpi::ComSpi(PinName mosi, PinName miso, PinName sclk, PinName demuxA, PinName demuxB, PinName demuxC, PinName demuxD, PinName demuxEnable)
salco 11:496453b45e25 14 : SPI(mosi,miso,sclk), m_demuxA(demuxA), m_demuxB(demuxB), m_demuxC(demuxC), m_demuxD(demuxD), m_demuxEnable(demuxEnable)
salco 7:dcfd81d7f93f 15 {
salco 7:dcfd81d7f93f 16 m_demuxPos=0;
salco 7:dcfd81d7f93f 17 demuxIsUse=true;
salco 7:dcfd81d7f93f 18 }
salco 7:dcfd81d7f93f 19
salco 7:dcfd81d7f93f 20 ComSpi::~ComSpi()
salco 7:dcfd81d7f93f 21 {
salco 7:dcfd81d7f93f 22 //if(m_com)
salco 7:dcfd81d7f93f 23 // delete(m_com);
salco 7:dcfd81d7f93f 24 }
salco 7:dcfd81d7f93f 25 void ComSpi::change_demux(void)
salco 7:dcfd81d7f93f 26 {
salco 9:7295385f02b2 27 if(demuxIsUse) {
salco 10:7e6aeaebe1a2 28 DigitalOut pinDemuxA(m_demuxA);
salco 10:7e6aeaebe1a2 29 DigitalOut pinDemuxB(m_demuxB);
salco 10:7e6aeaebe1a2 30 DigitalOut pinDemuxC(m_demuxC);
salco 10:7e6aeaebe1a2 31 DigitalOut pinDemuxD(m_demuxD);
salco 10:7e6aeaebe1a2 32 DigitalOut pinDemuxEnable(m_demuxEnable);
salco 7:dcfd81d7f93f 33
salco 10:7e6aeaebe1a2 34 pinDemuxEnable=0;
salco 7:dcfd81d7f93f 35
salco 10:7e6aeaebe1a2 36 if(m_demuxPos & 1) pinDemuxA=1; //0b0001
salco 10:7e6aeaebe1a2 37 else pinDemuxA=0;
salco 10:7e6aeaebe1a2 38 if(m_demuxPos & 2) pinDemuxB=1; //0b0010
salco 10:7e6aeaebe1a2 39 else pinDemuxB=0;
salco 10:7e6aeaebe1a2 40 if(m_demuxPos & 4) pinDemuxC=1; //0b0100
salco 10:7e6aeaebe1a2 41 else pinDemuxC=0;
salco 10:7e6aeaebe1a2 42 if(m_demuxPos & 8) pinDemuxD=1; //0b1000
salco 10:7e6aeaebe1a2 43 else pinDemuxD=0;
salco 7:dcfd81d7f93f 44
salco 10:7e6aeaebe1a2 45 pinDemuxEnable=1;
salco 9:7295385f02b2 46 }
salco 7:dcfd81d7f93f 47 }
salco 7:dcfd81d7f93f 48 int ComSpi::write(int value)
salco 7:dcfd81d7f93f 49 {
salco 7:dcfd81d7f93f 50 int a;
salco 7:dcfd81d7f93f 51 a= SPI::write(value);
salco 7:dcfd81d7f93f 52 return a;
salco 7:dcfd81d7f93f 53 }
salco 9:7295385f02b2 54 char ComSpi::next_demux(void)
salco 7:dcfd81d7f93f 55 {
salco 9:7295385f02b2 56 char result = (char)-1;
salco 7:dcfd81d7f93f 57
salco 7:dcfd81d7f93f 58 if(demuxIsUse) {
salco 7:dcfd81d7f93f 59 (m_demuxPos == 15)? m_demuxPos=0:m_demuxPos++;
salco 7:dcfd81d7f93f 60 change_demux();
salco 9:7295385f02b2 61 result = m_demuxPos;
salco 7:dcfd81d7f93f 62 }
salco 7:dcfd81d7f93f 63 return result;
salco 7:dcfd81d7f93f 64 }
salco 9:7295385f02b2 65 char ComSpi::back_demux(void)
salco 7:dcfd81d7f93f 66 {
salco 9:7295385f02b2 67 char result = (char)-1;
salco 10:7e6aeaebe1a2 68
salco 7:dcfd81d7f93f 69 if(demuxIsUse) {
salco 7:dcfd81d7f93f 70 (m_demuxPos == 0)? m_demuxPos=15:m_demuxPos--;
salco 7:dcfd81d7f93f 71 change_demux();
salco 10:7e6aeaebe1a2 72
salco 10:7e6aeaebe1a2 73 result = m_demuxPos;
salco 7:dcfd81d7f93f 74 }
salco 7:dcfd81d7f93f 75 return result;
salco 7:dcfd81d7f93f 76 }
salco 10:7e6aeaebe1a2 77
salco 10:7e6aeaebe1a2 78 char ComSpi::get_demux(void)
salco 10:7e6aeaebe1a2 79 {
salco 10:7e6aeaebe1a2 80 char result = (char)-1;
salco 10:7e6aeaebe1a2 81 if(demuxIsUse)
salco 10:7e6aeaebe1a2 82 result=m_demuxPos;
salco 10:7e6aeaebe1a2 83 return result ;
salco 10:7e6aeaebe1a2 84 }
salco 10:7e6aeaebe1a2 85
salco 10:7e6aeaebe1a2 86 bool ComSpi::send(char portID, char adresseModule,string *flag,string *data)
salco 7:dcfd81d7f93f 87 {
salco 7:dcfd81d7f93f 88 bool result=false;
salco 10:7e6aeaebe1a2 89
salco 10:7e6aeaebe1a2 90 string formatedDataSend;
salco 10:7e6aeaebe1a2 91 string formatedDataReceive;
salco 10:7e6aeaebe1a2 92 //int valueReceive=0;
salco 7:dcfd81d7f93f 93 //int CRC
salco 11:496453b45e25 94 debug(DEBUG_SEND, "\n\r -Debut du send. ");
salco 11:496453b45e25 95 debug(DEBUG_SEND, "\n\r -Debut set demux. ");
salco 10:7e6aeaebe1a2 96 if(portID > (char)-1) {
salco 9:7295385f02b2 97 m_demuxPos = portID;
salco 9:7295385f02b2 98 change_demux();
salco 10:7e6aeaebe1a2 99 }
salco 11:496453b45e25 100 debug(DEBUG_SEND, "\n\r -Fin set demux. ");
salco 10:7e6aeaebe1a2 101 // Sync //
salco 11:496453b45e25 102 debug(DEBUG_SEND, "\n\r -Debut Sync. ");
salco 10:7e6aeaebe1a2 103 formatedDataSend.append(1,SYNC);
salco 11:496453b45e25 104 debug(DEBUG_SEND, "\n\r -Fin Sync. ");
salco 10:7e6aeaebe1a2 105 // Address //
salco 11:496453b45e25 106 debug(DEBUG_SEND, "\n\r -Debut Address. ");
salco 10:7e6aeaebe1a2 107 formatedDataSend.append(1,adresseModule);
salco 11:496453b45e25 108 debug(DEBUG_SEND, "\n\r -Fin Address. ");
salco 10:7e6aeaebe1a2 109 // PFB //
salco 11:496453b45e25 110 debug(DEBUG_SEND, "\n\r -Debut PFB. ");
salco 10:7e6aeaebe1a2 111 switch(flag->size()) {
salco 10:7e6aeaebe1a2 112 case 1:
salco 10:7e6aeaebe1a2 113 formatedDataSend.append(1,1<<6);
salco 10:7e6aeaebe1a2 114 break;
salco 10:7e6aeaebe1a2 115
salco 10:7e6aeaebe1a2 116 case 2:
salco 10:7e6aeaebe1a2 117 formatedDataSend.append(1,2<<6);
salco 10:7e6aeaebe1a2 118 break;
salco 10:7e6aeaebe1a2 119
salco 10:7e6aeaebe1a2 120 case 3:
salco 10:7e6aeaebe1a2 121 formatedDataSend.append(1,3<<6);
salco 10:7e6aeaebe1a2 122 break;
salco 10:7e6aeaebe1a2 123
salco 10:7e6aeaebe1a2 124 default:
salco 10:7e6aeaebe1a2 125 formatedDataSend.append(1,0<<6);
salco 10:7e6aeaebe1a2 126 break;
salco 10:7e6aeaebe1a2 127 }
salco 11:496453b45e25 128 debug(DEBUG_SEND, "\n\r -Fin PFB. ");
salco 10:7e6aeaebe1a2 129 // gestion ACK/NAK
salco 11:496453b45e25 130 debug(DEBUG_SEND, "\n\r -Debut ACK/NAK. ");
salco 10:7e6aeaebe1a2 131 formatedDataSend.at(formatedDataSend.length()) |= (NOACK << 4);
salco 11:496453b45e25 132 debug(DEBUG_SEND, "\n\r -Fin ACK/NAK. ");
salco 10:7e6aeaebe1a2 133 // NDB //
salco 11:496453b45e25 134 debug(DEBUG_SEND, "\n\r -Debut NDB. ");
salco 10:7e6aeaebe1a2 135 switch(data->size()) {
salco 10:7e6aeaebe1a2 136 case 1:
salco 10:7e6aeaebe1a2 137 formatedDataSend.at(formatedDataSend.length()) |= 1;
salco 10:7e6aeaebe1a2 138 break;
salco 10:7e6aeaebe1a2 139
salco 10:7e6aeaebe1a2 140 case 2:
salco 10:7e6aeaebe1a2 141 formatedDataSend.at(formatedDataSend.length()) |= 2;
salco 10:7e6aeaebe1a2 142 break;
salco 10:7e6aeaebe1a2 143
salco 10:7e6aeaebe1a2 144 case 3:
salco 10:7e6aeaebe1a2 145 formatedDataSend.at(formatedDataSend.length()) |= 3;
salco 10:7e6aeaebe1a2 146 break;
salco 10:7e6aeaebe1a2 147
salco 10:7e6aeaebe1a2 148 default:
salco 10:7e6aeaebe1a2 149 formatedDataSend.at(formatedDataSend.length()) |= 0;
salco 10:7e6aeaebe1a2 150 break;
salco 10:7e6aeaebe1a2 151 }
salco 11:496453b45e25 152 debug(DEBUG_SEND, "\n\r -Fin NDB. ");
salco 10:7e6aeaebe1a2 153 // flag //
salco 11:496453b45e25 154 debug(DEBUG_SEND, "\n\r -Debut flag. ");
salco 10:7e6aeaebe1a2 155 if(flag->size() != 0)
salco 10:7e6aeaebe1a2 156 formatedDataSend.append(*flag);
salco 11:496453b45e25 157 debug(DEBUG_SEND, "\n\r -Fin flag. ");
salco 10:7e6aeaebe1a2 158 // data //
salco 11:496453b45e25 159 debug(DEBUG_SEND, "\n\r -Debut data. ");
salco 10:7e6aeaebe1a2 160 if(data->size() != 0)
salco 10:7e6aeaebe1a2 161 formatedDataSend.append(*flag);
salco 11:496453b45e25 162 debug(DEBUG_SEND, "\n\r -Fin data. ");
salco 10:7e6aeaebe1a2 163 // CRC //
salco 10:7e6aeaebe1a2 164 //Create CRC
salco 10:7e6aeaebe1a2 165 //Send CRC
salco 10:7e6aeaebe1a2 166 //Compare
salco 10:7e6aeaebe1a2 167
salco 10:7e6aeaebe1a2 168 int tempValue=0;
salco 10:7e6aeaebe1a2 169 //Send Data
salco 11:496453b45e25 170 debug(DEBUG_SEND, "\n\r -Debut Send Data. ");
salco 10:7e6aeaebe1a2 171 tempValue = (formatedDataSend[0]<<8)+formatedDataSend[1];
salco 10:7e6aeaebe1a2 172 tempValue=write(tempValue);
salco 10:7e6aeaebe1a2 173 if(tempValue == (formatedDataSend[0]<<8)+formatedDataSend[1]) {
salco 10:7e6aeaebe1a2 174 formatedDataReceive.append(1,formatedDataSend[0]);
salco 10:7e6aeaebe1a2 175 formatedDataReceive.append(1,formatedDataSend[1]);
salco 10:7e6aeaebe1a2 176
salco 10:7e6aeaebe1a2 177 for (unsigned i=2; i<formatedDataSend.length(); ++i) {
salco 10:7e6aeaebe1a2 178 tempValue = formatedDataSend[i];
salco 10:7e6aeaebe1a2 179 i++;
salco 10:7e6aeaebe1a2 180 if(i<formatedDataSend.length())
salco 10:7e6aeaebe1a2 181 tempValue = (tempValue<<8) + formatedDataSend[i];
salco 10:7e6aeaebe1a2 182
salco 10:7e6aeaebe1a2 183 tempValue=write(tempValue);
salco 10:7e6aeaebe1a2 184 formatedDataReceive.append(1,tempValue>>8);
salco 10:7e6aeaebe1a2 185 formatedDataReceive.append(1,tempValue&0xFF);
salco 9:7295385f02b2 186 }
salco 11:496453b45e25 187 debug(DEBUG_SEND, "\n\r -Fin Send Data. ");
salco 10:7e6aeaebe1a2 188 // Traitement de l'information //
salco 11:496453b45e25 189 debug(DEBUG_SEND, "\n\r -Debut Traitement de l'information. ");
salco 10:7e6aeaebe1a2 190 tempValue=formatedDataReceive[2];
salco 10:7e6aeaebe1a2 191 string::iterator it=formatedDataReceive.begin()+3;
salco 10:7e6aeaebe1a2 192 // flag //
salco 10:7e6aeaebe1a2 193 flag->clear();
salco 10:7e6aeaebe1a2 194 switch(tempValue>>6) {
salco 10:7e6aeaebe1a2 195 case 1:
salco 10:7e6aeaebe1a2 196 flag->append(1,*it);
salco 10:7e6aeaebe1a2 197 it++;
salco 10:7e6aeaebe1a2 198 break;
salco 7:dcfd81d7f93f 199
salco 10:7e6aeaebe1a2 200 case 2:
salco 10:7e6aeaebe1a2 201 flag->append(1,*it);
salco 10:7e6aeaebe1a2 202 it++;
salco 10:7e6aeaebe1a2 203 flag->append(1,*it);
salco 10:7e6aeaebe1a2 204 it++;
salco 10:7e6aeaebe1a2 205 break;
salco 7:dcfd81d7f93f 206
salco 10:7e6aeaebe1a2 207 case 3:
salco 10:7e6aeaebe1a2 208 flag->append(1,*it);
salco 10:7e6aeaebe1a2 209 it++;
salco 10:7e6aeaebe1a2 210 flag->append(1,*it);
salco 10:7e6aeaebe1a2 211 it++;
salco 10:7e6aeaebe1a2 212 flag->append(1,*it);
salco 10:7e6aeaebe1a2 213 it++;
salco 10:7e6aeaebe1a2 214 break;
salco 7:dcfd81d7f93f 215
salco 10:7e6aeaebe1a2 216 /*default:
salco 10:7e6aeaebe1a2 217 formatedDataSend.append(1,0<<6);
salco 10:7e6aeaebe1a2 218 break;*/
salco 10:7e6aeaebe1a2 219 }
salco 10:7e6aeaebe1a2 220 // ACK/NAK
salco 10:7e6aeaebe1a2 221 //
salco 7:dcfd81d7f93f 222
salco 10:7e6aeaebe1a2 223 // NDB //
salco 10:7e6aeaebe1a2 224 data->clear();
salco 10:7e6aeaebe1a2 225 switch(tempValue&0xFF) {
salco 10:7e6aeaebe1a2 226 case 1:
salco 10:7e6aeaebe1a2 227 data->append(1,*it);
salco 10:7e6aeaebe1a2 228 it++;
salco 10:7e6aeaebe1a2 229 break;
salco 7:dcfd81d7f93f 230
salco 10:7e6aeaebe1a2 231 case 2:
salco 10:7e6aeaebe1a2 232 data->append(1,*it);
salco 10:7e6aeaebe1a2 233 it++;
salco 10:7e6aeaebe1a2 234 data->append(1,*it);
salco 10:7e6aeaebe1a2 235 it++;
salco 10:7e6aeaebe1a2 236 break;
salco 10:7e6aeaebe1a2 237
salco 10:7e6aeaebe1a2 238 case 3:
salco 10:7e6aeaebe1a2 239 data->append(1,*it);
salco 10:7e6aeaebe1a2 240 it++;
salco 10:7e6aeaebe1a2 241 data->append(1,*it);
salco 10:7e6aeaebe1a2 242 it++;
salco 10:7e6aeaebe1a2 243 data->append(1,*it);
salco 10:7e6aeaebe1a2 244 it++;
salco 10:7e6aeaebe1a2 245 break;
salco 10:7e6aeaebe1a2 246
salco 10:7e6aeaebe1a2 247 /*default:
salco 10:7e6aeaebe1a2 248
salco 10:7e6aeaebe1a2 249 break;*/
salco 7:dcfd81d7f93f 250 }
salco 10:7e6aeaebe1a2 251 // CRC //
salco 10:7e6aeaebe1a2 252 //
salco 11:496453b45e25 253 debug(DEBUG_SEND, "\n\r -Fin Traitement de l'information. ");
salco 10:7e6aeaebe1a2 254 result=true;
salco 7:dcfd81d7f93f 255 }
salco 11:496453b45e25 256 debug(DEBUG_SEND, "\n\r -Fin du send. ");
salco 7:dcfd81d7f93f 257 return result;
salco 7:dcfd81d7f93f 258 }