Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Dependencies: mbed
I2C.cpp@0:8447350292ab, 2018-12-21 (annotated)
- Committer:
- jjantoine
- Date:
- Fri Dec 21 15:38:58 2018 +0000
- Revision:
- 0:8447350292ab
I2C
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
jjantoine | 0:8447350292ab | 1 | #include "mbed.h" |
jjantoine | 0:8447350292ab | 2 | #include "TYPE_Def.h" |
jjantoine | 0:8447350292ab | 3 | #include "CRC32BIT_LOOKUP_Ext.h" |
jjantoine | 0:8447350292ab | 4 | |
jjantoine | 0:8447350292ab | 5 | |
jjantoine | 0:8447350292ab | 6 | #define add (0x22) |
jjantoine | 0:8447350292ab | 7 | #define idstr (0x14) |
jjantoine | 0:8447350292ab | 8 | #define idspr (0x16) |
jjantoine | 0:8447350292ab | 9 | |
jjantoine | 0:8447350292ab | 10 | |
jjantoine | 0:8447350292ab | 11 | I2C i2c1(I2C_SDA, I2C_SCL); |
jjantoine | 0:8447350292ab | 12 | Serial pc(USBTX, USBRX); // tx, rx |
jjantoine | 0:8447350292ab | 13 | DigitalOut myled(LED2); |
jjantoine | 0:8447350292ab | 14 | DigitalOut pin(D12); |
jjantoine | 0:8447350292ab | 15 | |
jjantoine | 0:8447350292ab | 16 | UINT32_T crc; |
jjantoine | 0:8447350292ab | 17 | ERROR_T ERROR_Value; |
jjantoine | 0:8447350292ab | 18 | CRC32BIT_LOOKUP_TS _Crc32Table_TGP_DUT; |
jjantoine | 0:8447350292ab | 19 | BYTE_T vettore[13]; |
jjantoine | 0:8447350292ab | 20 | char crcchar[4]; |
jjantoine | 0:8447350292ab | 21 | |
jjantoine | 0:8447350292ab | 22 | int i,j,n; |
jjantoine | 0:8447350292ab | 23 | |
jjantoine | 0:8447350292ab | 24 | char UINT32_PacketSize [4]; |
jjantoine | 0:8447350292ab | 25 | char ENUM_Packet_ID; |
jjantoine | 0:8447350292ab | 26 | char UINT16_PacketCounter [2]; |
jjantoine | 0:8447350292ab | 27 | char UINT32_Timestamp [4]; |
jjantoine | 0:8447350292ab | 28 | char UINT16_PortNumber [2]; |
jjantoine | 0:8447350292ab | 29 | char UINT32_BaudRate [4]; |
jjantoine | 0:8447350292ab | 30 | char UINT32_CRC [4]; |
jjantoine | 0:8447350292ab | 31 | |
jjantoine | 0:8447350292ab | 32 | int hz; |
jjantoine | 0:8447350292ab | 33 | int ackr; |
jjantoine | 0:8447350292ab | 34 | int ackw; |
jjantoine | 0:8447350292ab | 35 | |
jjantoine | 0:8447350292ab | 36 | char packetsize[4] = {0x00 ,0x00 , 0x00 , 0x11}; |
jjantoine | 0:8447350292ab | 37 | |
jjantoine | 0:8447350292ab | 38 | void crc_cal(); |
jjantoine | 0:8447350292ab | 39 | void TGP_CMD(); |
jjantoine | 0:8447350292ab | 40 | void TGP_START_READ_ACK(); |
jjantoine | 0:8447350292ab | 41 | void TGP_STOP_READ_ACK(); |
jjantoine | 0:8447350292ab | 42 | void TGP_START_WRITE_ACK(); |
jjantoine | 0:8447350292ab | 43 | void TGP_STOP_WRITE_ACK(); |
jjantoine | 0:8447350292ab | 44 | |
jjantoine | 0:8447350292ab | 45 | char data; |
jjantoine | 0:8447350292ab | 46 | char dataout; |
jjantoine | 0:8447350292ab | 47 | |
jjantoine | 0:8447350292ab | 48 | int main() |
jjantoine | 0:8447350292ab | 49 | { |
jjantoine | 0:8447350292ab | 50 | pin = 0; |
jjantoine | 0:8447350292ab | 51 | |
jjantoine | 0:8447350292ab | 52 | ENUM_Packet_ID = 0; |
jjantoine | 0:8447350292ab | 53 | data = 0; |
jjantoine | 0:8447350292ab | 54 | dataout = 0; |
jjantoine | 0:8447350292ab | 55 | |
jjantoine | 0:8447350292ab | 56 | |
jjantoine | 0:8447350292ab | 57 | ackr = 1; |
jjantoine | 0:8447350292ab | 58 | ackw = 1; |
jjantoine | 0:8447350292ab | 59 | |
jjantoine | 0:8447350292ab | 60 | pc.attach(&TGP_CMD,Serial::RxIrq); |
jjantoine | 0:8447350292ab | 61 | |
jjantoine | 0:8447350292ab | 62 | j=0; |
jjantoine | 0:8447350292ab | 63 | n=0; |
jjantoine | 0:8447350292ab | 64 | |
jjantoine | 0:8447350292ab | 65 | |
jjantoine | 0:8447350292ab | 66 | |
jjantoine | 0:8447350292ab | 67 | } |
jjantoine | 0:8447350292ab | 68 | |
jjantoine | 0:8447350292ab | 69 | void crc_cal() |
jjantoine | 0:8447350292ab | 70 | { |
jjantoine | 0:8447350292ab | 71 | |
jjantoine | 0:8447350292ab | 72 | //def vettore |
jjantoine | 0:8447350292ab | 73 | j=0; |
jjantoine | 0:8447350292ab | 74 | for(i=0; i<4; i++){ |
jjantoine | 0:8447350292ab | 75 | vettore[j] = packetsize[i]; |
jjantoine | 0:8447350292ab | 76 | j++; |
jjantoine | 0:8447350292ab | 77 | } |
jjantoine | 0:8447350292ab | 78 | |
jjantoine | 0:8447350292ab | 79 | vettore[j] = ENUM_Packet_ID+1; |
jjantoine | 0:8447350292ab | 80 | j++; |
jjantoine | 0:8447350292ab | 81 | |
jjantoine | 0:8447350292ab | 82 | for(i=0; i<2; i++){ |
jjantoine | 0:8447350292ab | 83 | vettore[j] = UINT16_PacketCounter[i]; |
jjantoine | 0:8447350292ab | 84 | j++; |
jjantoine | 0:8447350292ab | 85 | } |
jjantoine | 0:8447350292ab | 86 | |
jjantoine | 0:8447350292ab | 87 | for(i=0; i<4; i++){ |
jjantoine | 0:8447350292ab | 88 | vettore[j] = UINT32_Timestamp[i]; |
jjantoine | 0:8447350292ab | 89 | j++; |
jjantoine | 0:8447350292ab | 90 | } |
jjantoine | 0:8447350292ab | 91 | |
jjantoine | 0:8447350292ab | 92 | for(i=0;i<2;i++) |
jjantoine | 0:8447350292ab | 93 | { |
jjantoine | 0:8447350292ab | 94 | vettore[j] = UINT16_PortNumber[i]; |
jjantoine | 0:8447350292ab | 95 | j++; |
jjantoine | 0:8447350292ab | 96 | } |
jjantoine | 0:8447350292ab | 97 | |
jjantoine | 0:8447350292ab | 98 | |
jjantoine | 0:8447350292ab | 99 | _Crc32Table_TGP_DUT.UINT32_Poly = 0xE7994FEB; |
jjantoine | 0:8447350292ab | 100 | _Crc32Table_TGP_DUT.UINT32_Init = 0xFFFFFFFF; |
jjantoine | 0:8447350292ab | 101 | _Crc32Table_TGP_DUT.BOOL_RefIn = FALSE; |
jjantoine | 0:8447350292ab | 102 | _Crc32Table_TGP_DUT.BOOL_RefOut = FALSE; |
jjantoine | 0:8447350292ab | 103 | _Crc32Table_TGP_DUT.UINT32_XorOut = 0x00000000; |
jjantoine | 0:8447350292ab | 104 | |
jjantoine | 0:8447350292ab | 105 | /* Inizializzazione della tabella */ |
jjantoine | 0:8447350292ab | 106 | ERROR_Value = CRC32BIT_LOOKUP_Init(&_Crc32Table_TGP_DUT); |
jjantoine | 0:8447350292ab | 107 | |
jjantoine | 0:8447350292ab | 108 | crc = CRC32BIT_LOOKUP_Compute(vettore,13,&_Crc32Table_TGP_DUT); |
jjantoine | 0:8447350292ab | 109 | |
jjantoine | 0:8447350292ab | 110 | crcchar[0] = (crc >> 24) & 0xFF; |
jjantoine | 0:8447350292ab | 111 | crcchar[1] = (crc >> 16) & 0xFF; |
jjantoine | 0:8447350292ab | 112 | crcchar[2] = (crc >> 8) & 0xFF; |
jjantoine | 0:8447350292ab | 113 | crcchar[3] = crc & 0xFF; |
jjantoine | 0:8447350292ab | 114 | |
jjantoine | 0:8447350292ab | 115 | } |
jjantoine | 0:8447350292ab | 116 | |
jjantoine | 0:8447350292ab | 117 | void TGP_CMD() |
jjantoine | 0:8447350292ab | 118 | { |
jjantoine | 0:8447350292ab | 119 | myled = 0; |
jjantoine | 0:8447350292ab | 120 | |
jjantoine | 0:8447350292ab | 121 | for(i=0; i<4; i++) |
jjantoine | 0:8447350292ab | 122 | { |
jjantoine | 0:8447350292ab | 123 | UINT32_PacketSize[i] = pc.getc(); |
jjantoine | 0:8447350292ab | 124 | } |
jjantoine | 0:8447350292ab | 125 | |
jjantoine | 0:8447350292ab | 126 | ENUM_Packet_ID = pc.getc(); |
jjantoine | 0:8447350292ab | 127 | |
jjantoine | 0:8447350292ab | 128 | if(ENUM_Packet_ID == idstr) |
jjantoine | 0:8447350292ab | 129 | { |
jjantoine | 0:8447350292ab | 130 | for(i=0; i<2; i++){ |
jjantoine | 0:8447350292ab | 131 | UINT16_PacketCounter[i]=pc.getc(); |
jjantoine | 0:8447350292ab | 132 | } |
jjantoine | 0:8447350292ab | 133 | |
jjantoine | 0:8447350292ab | 134 | for(i=0; i<4; i++){ |
jjantoine | 0:8447350292ab | 135 | UINT32_Timestamp[i]=pc.getc(); |
jjantoine | 0:8447350292ab | 136 | } |
jjantoine | 0:8447350292ab | 137 | |
jjantoine | 0:8447350292ab | 138 | for(i=0; i<2; i++){ |
jjantoine | 0:8447350292ab | 139 | UINT16_PortNumber[i]=pc.getc(); |
jjantoine | 0:8447350292ab | 140 | } |
jjantoine | 0:8447350292ab | 141 | |
jjantoine | 0:8447350292ab | 142 | for(i=0; i<4; i++){ |
jjantoine | 0:8447350292ab | 143 | UINT32_BaudRate[i]=pc.getc(); |
jjantoine | 0:8447350292ab | 144 | } |
jjantoine | 0:8447350292ab | 145 | |
jjantoine | 0:8447350292ab | 146 | for(i=0; i<4; i++){ |
jjantoine | 0:8447350292ab | 147 | UINT32_CRC[i]=pc.getc(); |
jjantoine | 0:8447350292ab | 148 | } |
jjantoine | 0:8447350292ab | 149 | |
jjantoine | 0:8447350292ab | 150 | myled = 1; |
jjantoine | 0:8447350292ab | 151 | |
jjantoine | 0:8447350292ab | 152 | TGP_START_READ_ACK(); |
jjantoine | 0:8447350292ab | 153 | |
jjantoine | 0:8447350292ab | 154 | } |
jjantoine | 0:8447350292ab | 155 | else if(ENUM_Packet_ID == idspr) |
jjantoine | 0:8447350292ab | 156 | { |
jjantoine | 0:8447350292ab | 157 | for(i=0; i<2; i++){ |
jjantoine | 0:8447350292ab | 158 | UINT16_PacketCounter[i]=pc.getc(); |
jjantoine | 0:8447350292ab | 159 | } |
jjantoine | 0:8447350292ab | 160 | |
jjantoine | 0:8447350292ab | 161 | for(i=0; i<4; i++){ |
jjantoine | 0:8447350292ab | 162 | UINT32_Timestamp[i]=pc.getc(); |
jjantoine | 0:8447350292ab | 163 | } |
jjantoine | 0:8447350292ab | 164 | |
jjantoine | 0:8447350292ab | 165 | for(i=0; i<2; i++){ |
jjantoine | 0:8447350292ab | 166 | UINT16_PortNumber[i]=pc.getc(); |
jjantoine | 0:8447350292ab | 167 | } |
jjantoine | 0:8447350292ab | 168 | |
jjantoine | 0:8447350292ab | 169 | for(i=0; i<4; i++){ |
jjantoine | 0:8447350292ab | 170 | UINT32_CRC[i]=pc.getc(); |
jjantoine | 0:8447350292ab | 171 | } |
jjantoine | 0:8447350292ab | 172 | |
jjantoine | 0:8447350292ab | 173 | myled = 1; |
jjantoine | 0:8447350292ab | 174 | |
jjantoine | 0:8447350292ab | 175 | TGP_STOP_READ_ACK(); |
jjantoine | 0:8447350292ab | 176 | |
jjantoine | 0:8447350292ab | 177 | } |
jjantoine | 0:8447350292ab | 178 | |
jjantoine | 0:8447350292ab | 179 | else |
jjantoine | 0:8447350292ab | 180 | { |
jjantoine | 0:8447350292ab | 181 | while(1) |
jjantoine | 0:8447350292ab | 182 | { |
jjantoine | 0:8447350292ab | 183 | myled = 1; |
jjantoine | 0:8447350292ab | 184 | wait(0.1); |
jjantoine | 0:8447350292ab | 185 | myled = 0; |
jjantoine | 0:8447350292ab | 186 | wait(0.1); |
jjantoine | 0:8447350292ab | 187 | } |
jjantoine | 0:8447350292ab | 188 | } |
jjantoine | 0:8447350292ab | 189 | |
jjantoine | 0:8447350292ab | 190 | |
jjantoine | 0:8447350292ab | 191 | } |
jjantoine | 0:8447350292ab | 192 | |
jjantoine | 0:8447350292ab | 193 | |
jjantoine | 0:8447350292ab | 194 | void TGP_START_READ_ACK() |
jjantoine | 0:8447350292ab | 195 | { |
jjantoine | 0:8447350292ab | 196 | for(i=0; i<4; i++) |
jjantoine | 0:8447350292ab | 197 | { |
jjantoine | 0:8447350292ab | 198 | pc.printf("%c",packetsize[i]); |
jjantoine | 0:8447350292ab | 199 | } |
jjantoine | 0:8447350292ab | 200 | |
jjantoine | 0:8447350292ab | 201 | pc.printf("%c",ENUM_Packet_ID+1); |
jjantoine | 0:8447350292ab | 202 | |
jjantoine | 0:8447350292ab | 203 | for(i=0; i<2; i++) |
jjantoine | 0:8447350292ab | 204 | { |
jjantoine | 0:8447350292ab | 205 | pc.printf("%c",UINT16_PacketCounter[i]); |
jjantoine | 0:8447350292ab | 206 | } |
jjantoine | 0:8447350292ab | 207 | |
jjantoine | 0:8447350292ab | 208 | for(i=0; i<4; i++) |
jjantoine | 0:8447350292ab | 209 | { |
jjantoine | 0:8447350292ab | 210 | pc.printf("%c",UINT32_Timestamp[i]); |
jjantoine | 0:8447350292ab | 211 | } |
jjantoine | 0:8447350292ab | 212 | |
jjantoine | 0:8447350292ab | 213 | for(i=0; i<2; i++) |
jjantoine | 0:8447350292ab | 214 | { |
jjantoine | 0:8447350292ab | 215 | pc.putc(UINT16_PortNumber[i]); |
jjantoine | 0:8447350292ab | 216 | } |
jjantoine | 0:8447350292ab | 217 | |
jjantoine | 0:8447350292ab | 218 | crc_cal(); |
jjantoine | 0:8447350292ab | 219 | |
jjantoine | 0:8447350292ab | 220 | for(i=0; i<4; i++) |
jjantoine | 0:8447350292ab | 221 | { |
jjantoine | 0:8447350292ab | 222 | pc.putc(crcchar[i]); |
jjantoine | 0:8447350292ab | 223 | } |
jjantoine | 0:8447350292ab | 224 | |
jjantoine | 0:8447350292ab | 225 | myled = 0; |
jjantoine | 0:8447350292ab | 226 | pin = 1; |
jjantoine | 0:8447350292ab | 227 | } |
jjantoine | 0:8447350292ab | 228 | |
jjantoine | 0:8447350292ab | 229 | void TGP_STOP_READ_ACK() |
jjantoine | 0:8447350292ab | 230 | { |
jjantoine | 0:8447350292ab | 231 | for(i=0; i<4; i++) |
jjantoine | 0:8447350292ab | 232 | { |
jjantoine | 0:8447350292ab | 233 | pc.printf("%c",packetsize[i]); |
jjantoine | 0:8447350292ab | 234 | } |
jjantoine | 0:8447350292ab | 235 | |
jjantoine | 0:8447350292ab | 236 | pc.printf("%c",ENUM_Packet_ID+1); |
jjantoine | 0:8447350292ab | 237 | |
jjantoine | 0:8447350292ab | 238 | for(i=0; i<2; i++) |
jjantoine | 0:8447350292ab | 239 | { |
jjantoine | 0:8447350292ab | 240 | pc.printf("%c",UINT16_PacketCounter[i]); |
jjantoine | 0:8447350292ab | 241 | } |
jjantoine | 0:8447350292ab | 242 | |
jjantoine | 0:8447350292ab | 243 | for(i=0; i<4; i++) |
jjantoine | 0:8447350292ab | 244 | { |
jjantoine | 0:8447350292ab | 245 | pc.printf("%c",UINT32_Timestamp[i]); |
jjantoine | 0:8447350292ab | 246 | } |
jjantoine | 0:8447350292ab | 247 | |
jjantoine | 0:8447350292ab | 248 | for(i=0; i<2; i++) |
jjantoine | 0:8447350292ab | 249 | { |
jjantoine | 0:8447350292ab | 250 | pc.putc(UINT16_PortNumber[i]); |
jjantoine | 0:8447350292ab | 251 | } |
jjantoine | 0:8447350292ab | 252 | |
jjantoine | 0:8447350292ab | 253 | crc_cal(); |
jjantoine | 0:8447350292ab | 254 | |
jjantoine | 0:8447350292ab | 255 | for(i=0; i<4; i++) |
jjantoine | 0:8447350292ab | 256 | { |
jjantoine | 0:8447350292ab | 257 | pc.putc(crcchar[i]); |
jjantoine | 0:8447350292ab | 258 | } |
jjantoine | 0:8447350292ab | 259 | |
jjantoine | 0:8447350292ab | 260 | myled = 0; |
jjantoine | 0:8447350292ab | 261 | pin = 0; |
jjantoine | 0:8447350292ab | 262 | } |