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:
Thu Mar 19 00:20:09 2015 +0000
Revision:
7:dcfd81d7f93f
Parent:
1:25ea21da4542
Child:
9:7295385f02b2
Ajout de fonction dans comSpi et jai renomer 2-3 doccument.

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 7:dcfd81d7f93f 14 : SPI(mosi,miso,sclk,NC), 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 7:dcfd81d7f93f 27 DigitalOut pinDemuxA(m_demuxA);
salco 7:dcfd81d7f93f 28 DigitalOut pinDemuxB(m_demuxB);
salco 7:dcfd81d7f93f 29 DigitalOut pinDemuxC(m_demuxC);
salco 7:dcfd81d7f93f 30 DigitalOut pinDemuxD(m_demuxD);
salco 7:dcfd81d7f93f 31 DigitalOut pinDemuxEnable(m_demuxEnable);
salco 7:dcfd81d7f93f 32
salco 7:dcfd81d7f93f 33 pinDemuxEnable=0;
salco 7:dcfd81d7f93f 34
salco 7:dcfd81d7f93f 35 if(m_demuxPos & 1) pinDemuxA=1; //0b0001
salco 7:dcfd81d7f93f 36 else pinDemuxA=0;
salco 7:dcfd81d7f93f 37 if(m_demuxPos & 2) pinDemuxB=1; //0b0010
salco 7:dcfd81d7f93f 38 else pinDemuxB=0;
salco 7:dcfd81d7f93f 39 if(m_demuxPos & 4) pinDemuxC=1; //0b0100
salco 7:dcfd81d7f93f 40 else pinDemuxC=0;
salco 7:dcfd81d7f93f 41 if(m_demuxPos & 8) pinDemuxD=1; //0b1000
salco 7:dcfd81d7f93f 42 else pinDemuxD=0;
salco 7:dcfd81d7f93f 43
salco 7:dcfd81d7f93f 44 pinDemuxEnable=1;
salco 7:dcfd81d7f93f 45 }
salco 7:dcfd81d7f93f 46 int ComSpi::write(int value)
salco 7:dcfd81d7f93f 47 {
salco 7:dcfd81d7f93f 48 int a;
salco 7:dcfd81d7f93f 49 a= SPI::write(value);
salco 7:dcfd81d7f93f 50 return a;
salco 7:dcfd81d7f93f 51 }
salco 7:dcfd81d7f93f 52 bool ComSpi::next_demux(void)
salco 7:dcfd81d7f93f 53 {
salco 7:dcfd81d7f93f 54 bool result=false;
salco 7:dcfd81d7f93f 55
salco 7:dcfd81d7f93f 56 if(demuxIsUse) {
salco 7:dcfd81d7f93f 57 (m_demuxPos == 15)? m_demuxPos=0:m_demuxPos++;
salco 7:dcfd81d7f93f 58 change_demux();
salco 7:dcfd81d7f93f 59 result = true;
salco 7:dcfd81d7f93f 60 }
salco 7:dcfd81d7f93f 61 return result;
salco 7:dcfd81d7f93f 62 }
salco 7:dcfd81d7f93f 63 bool ComSpi::back_demux(void)
salco 7:dcfd81d7f93f 64 {
salco 7:dcfd81d7f93f 65 bool result=false;
salco 7:dcfd81d7f93f 66
salco 7:dcfd81d7f93f 67 if(demuxIsUse) {
salco 7:dcfd81d7f93f 68 (m_demuxPos == 0)? m_demuxPos=15:m_demuxPos--;
salco 7:dcfd81d7f93f 69 change_demux();
salco 7:dcfd81d7f93f 70 result = true;
salco 7:dcfd81d7f93f 71 }
salco 7:dcfd81d7f93f 72 return result;
salco 7:dcfd81d7f93f 73 }
salco 7:dcfd81d7f93f 74 bool ComSpi::send(char portID, char adresseModule,char *flag,char *data)
salco 7:dcfd81d7f93f 75 {
salco 7:dcfd81d7f93f 76 bool result=false;
salco 7:dcfd81d7f93f 77 int valueSend = SYNC;
salco 7:dcfd81d7f93f 78 int valueReceive=0;
salco 7:dcfd81d7f93f 79 //int CRC
salco 7:dcfd81d7f93f 80
salco 7:dcfd81d7f93f 81 valueReceive=write(valueSend);
salco 7:dcfd81d7f93f 82 if(valueReceive == valueSend) {
salco 7:dcfd81d7f93f 83 valueSend=(adresseModule<<8);
salco 7:dcfd81d7f93f 84
salco 7:dcfd81d7f93f 85 if(*flag != 0) valueSend+= (PFB1 << 6);
salco 7:dcfd81d7f93f 86 else valueSend+= (PFB0 << 6);
salco 7:dcfd81d7f93f 87
salco 7:dcfd81d7f93f 88 valueSend+= (NOACK << 4);
salco 7:dcfd81d7f93f 89
salco 7:dcfd81d7f93f 90 if(*data != 0) valueSend+= (NDB01 );
salco 7:dcfd81d7f93f 91 else valueSend+= (NDB00 );
salco 7:dcfd81d7f93f 92
salco 7:dcfd81d7f93f 93 valueReceive=write(valueSend);
salco 7:dcfd81d7f93f 94 if(valueReceive>>8 == adresseModule) {
salco 7:dcfd81d7f93f 95 //fini la sycronisation et la on envoie les data
salco 7:dcfd81d7f93f 96
salco 7:dcfd81d7f93f 97
salco 7:dcfd81d7f93f 98 if(*flag != 0) valueSend = *flag;
salco 7:dcfd81d7f93f 99 else valueSend=0;
salco 7:dcfd81d7f93f 100
salco 7:dcfd81d7f93f 101 if(*data != 0) valueSend= (valueSend<<4)+(*data);
salco 7:dcfd81d7f93f 102
salco 7:dcfd81d7f93f 103 valueReceive=write(valueSend);
salco 7:dcfd81d7f93f 104 if((*flag != 0) && (*data != 0)) *flag = valueReceive>>8;
salco 7:dcfd81d7f93f 105 else if(*flag != 0) *flag = valueReceive;
salco 7:dcfd81d7f93f 106 else if(*data != 0) *data = valueReceive;
salco 7:dcfd81d7f93f 107
salco 7:dcfd81d7f93f 108 //Create CRC
salco 7:dcfd81d7f93f 109 //Send CRC
salco 7:dcfd81d7f93f 110 //Compare
salco 7:dcfd81d7f93f 111 result=true;
salco 7:dcfd81d7f93f 112 }
salco 7:dcfd81d7f93f 113 }
salco 7:dcfd81d7f93f 114 return result;
salco 7:dcfd81d7f93f 115 }