![](/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@9:7295385f02b2, 2015-03-19 (annotated)
- Committer:
- salco
- Date:
- Thu Mar 19 19:14:31 2015 +0000
- Revision:
- 9:7295385f02b2
- Parent:
- 7:dcfd81d7f93f
- Child:
- 10:7e6aeaebe1a2
Grosse renovation, jai enlever la liste chainer faire home made et j'ai utiliser std::list qui est deja cr?er et va me simplifier un peut les chose. J'ai ajuster les fonction de MemRegistre pour le rende compatible.
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 | 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 | 9:7295385f02b2 | 27 | if(demuxIsUse) { |
salco | 7:dcfd81d7f93f | 28 | DigitalOut pinDemuxA(m_demuxA); |
salco | 7:dcfd81d7f93f | 29 | DigitalOut pinDemuxB(m_demuxB); |
salco | 7:dcfd81d7f93f | 30 | DigitalOut pinDemuxC(m_demuxC); |
salco | 7:dcfd81d7f93f | 31 | DigitalOut pinDemuxD(m_demuxD); |
salco | 7:dcfd81d7f93f | 32 | DigitalOut pinDemuxEnable(m_demuxEnable); |
salco | 7:dcfd81d7f93f | 33 | |
salco | 7:dcfd81d7f93f | 34 | pinDemuxEnable=0; |
salco | 7:dcfd81d7f93f | 35 | |
salco | 7:dcfd81d7f93f | 36 | if(m_demuxPos & 1) pinDemuxA=1; //0b0001 |
salco | 7:dcfd81d7f93f | 37 | else pinDemuxA=0; |
salco | 7:dcfd81d7f93f | 38 | if(m_demuxPos & 2) pinDemuxB=1; //0b0010 |
salco | 7:dcfd81d7f93f | 39 | else pinDemuxB=0; |
salco | 7:dcfd81d7f93f | 40 | if(m_demuxPos & 4) pinDemuxC=1; //0b0100 |
salco | 7:dcfd81d7f93f | 41 | else pinDemuxC=0; |
salco | 7:dcfd81d7f93f | 42 | if(m_demuxPos & 8) pinDemuxD=1; //0b1000 |
salco | 7:dcfd81d7f93f | 43 | else pinDemuxD=0; |
salco | 7:dcfd81d7f93f | 44 | |
salco | 7:dcfd81d7f93f | 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 | result = true; |
salco | 7:dcfd81d7f93f | 63 | } |
salco | 7:dcfd81d7f93f | 64 | return result; |
salco | 7:dcfd81d7f93f | 65 | } |
salco | 9:7295385f02b2 | 66 | char ComSpi::back_demux(void) |
salco | 7:dcfd81d7f93f | 67 | { |
salco | 9:7295385f02b2 | 68 | char result = (char)-1; |
salco | 9:7295385f02b2 | 69 | |
salco | 7:dcfd81d7f93f | 70 | if(demuxIsUse) { |
salco | 7:dcfd81d7f93f | 71 | (m_demuxPos == 0)? m_demuxPos=15:m_demuxPos--; |
salco | 7:dcfd81d7f93f | 72 | change_demux(); |
salco | 9:7295385f02b2 | 73 | |
salco | 7:dcfd81d7f93f | 74 | result = true; |
salco | 7:dcfd81d7f93f | 75 | } |
salco | 7:dcfd81d7f93f | 76 | return result; |
salco | 7:dcfd81d7f93f | 77 | } |
salco | 7:dcfd81d7f93f | 78 | bool ComSpi::send(char portID, char adresseModule,char *flag,char *data) |
salco | 7:dcfd81d7f93f | 79 | { |
salco | 7:dcfd81d7f93f | 80 | bool result=false; |
salco | 7:dcfd81d7f93f | 81 | int valueSend = SYNC; |
salco | 7:dcfd81d7f93f | 82 | int valueReceive=0; |
salco | 7:dcfd81d7f93f | 83 | //int CRC |
salco | 9:7295385f02b2 | 84 | |
salco | 9:7295385f02b2 | 85 | if(portID =! -1){ |
salco | 9:7295385f02b2 | 86 | m_demuxPos = portID; |
salco | 9:7295385f02b2 | 87 | change_demux(); |
salco | 9:7295385f02b2 | 88 | } |
salco | 7:dcfd81d7f93f | 89 | |
salco | 7:dcfd81d7f93f | 90 | valueReceive=write(valueSend); |
salco | 7:dcfd81d7f93f | 91 | if(valueReceive == valueSend) { |
salco | 7:dcfd81d7f93f | 92 | valueSend=(adresseModule<<8); |
salco | 7:dcfd81d7f93f | 93 | |
salco | 7:dcfd81d7f93f | 94 | if(*flag != 0) valueSend+= (PFB1 << 6); |
salco | 7:dcfd81d7f93f | 95 | else valueSend+= (PFB0 << 6); |
salco | 7:dcfd81d7f93f | 96 | |
salco | 7:dcfd81d7f93f | 97 | valueSend+= (NOACK << 4); |
salco | 7:dcfd81d7f93f | 98 | |
salco | 7:dcfd81d7f93f | 99 | if(*data != 0) valueSend+= (NDB01 ); |
salco | 7:dcfd81d7f93f | 100 | else valueSend+= (NDB00 ); |
salco | 7:dcfd81d7f93f | 101 | |
salco | 7:dcfd81d7f93f | 102 | valueReceive=write(valueSend); |
salco | 7:dcfd81d7f93f | 103 | if(valueReceive>>8 == adresseModule) { |
salco | 7:dcfd81d7f93f | 104 | //fini la sycronisation et la on envoie les data |
salco | 7:dcfd81d7f93f | 105 | |
salco | 7:dcfd81d7f93f | 106 | |
salco | 7:dcfd81d7f93f | 107 | if(*flag != 0) valueSend = *flag; |
salco | 7:dcfd81d7f93f | 108 | else valueSend=0; |
salco | 7:dcfd81d7f93f | 109 | |
salco | 7:dcfd81d7f93f | 110 | if(*data != 0) valueSend= (valueSend<<4)+(*data); |
salco | 7:dcfd81d7f93f | 111 | |
salco | 7:dcfd81d7f93f | 112 | valueReceive=write(valueSend); |
salco | 7:dcfd81d7f93f | 113 | if((*flag != 0) && (*data != 0)) *flag = valueReceive>>8; |
salco | 7:dcfd81d7f93f | 114 | else if(*flag != 0) *flag = valueReceive; |
salco | 7:dcfd81d7f93f | 115 | else if(*data != 0) *data = valueReceive; |
salco | 7:dcfd81d7f93f | 116 | |
salco | 7:dcfd81d7f93f | 117 | //Create CRC |
salco | 7:dcfd81d7f93f | 118 | //Send CRC |
salco | 7:dcfd81d7f93f | 119 | //Compare |
salco | 7:dcfd81d7f93f | 120 | result=true; |
salco | 7:dcfd81d7f93f | 121 | } |
salco | 7:dcfd81d7f93f | 122 | } |
salco | 7:dcfd81d7f93f | 123 | return result; |
salco | 7:dcfd81d7f93f | 124 | } |