![](/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@7:dcfd81d7f93f, 2015-03-19 (annotated)
- 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?
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 | 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 | } |