![](/media/cache/profiles/4b0986230d9d7aded7f0c24033d221d4.jpg.50x50_q85.jpg)
Programme de contrôle de l'octopode 4DOF, Theraphosa-Salconi.
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
source/ComSpi.cpp@11:496453b45e25, 2015-03-20 (annotated)
- 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?
User | Revision | Line number | New 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 | } |