Madhura Tapse
/
STM32_RX
RX node
main.cpp@3:106ec6e30558, 2019-06-13 (annotated)
- Committer:
- MadhuraT
- Date:
- Thu Jun 13 16:46:07 2019 +0000
- Revision:
- 3:106ec6e30558
- Parent:
- 1:6554c60faa06
rx node code
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
MadhuraT | 3:106ec6e30558 | 1 | |
MadhuraT | 3:106ec6e30558 | 2 | |
MadhuraT | 3:106ec6e30558 | 3 | //Receiver |
MadhuraT | 3:106ec6e30558 | 4 | |
bcostm | 0:d5bd863b2036 | 5 | #include "mbed.h" |
bcostm | 0:d5bd863b2036 | 6 | |
MadhuraT | 3:106ec6e30558 | 7 | #define SERIAL_BAUD 9600 |
MadhuraT | 3:106ec6e30558 | 8 | #define CAN_BAUD 500000 |
MadhuraT | 3:106ec6e30558 | 9 | |
MadhuraT | 3:106ec6e30558 | 10 | |
MadhuraT | 3:106ec6e30558 | 11 | CAN can1(PB_8,PB_9); |
MadhuraT | 3:106ec6e30558 | 12 | DigitalOut led1(LED1); |
MadhuraT | 3:106ec6e30558 | 13 | DigitalOut led2(LED2); |
MadhuraT | 3:106ec6e30558 | 14 | DigitalIn inp(PC_13); |
MadhuraT | 3:106ec6e30558 | 15 | DigitalIn inp2(PC_2); |
MadhuraT | 3:106ec6e30558 | 16 | DigitalIn inp1(PC_3); |
MadhuraT | 3:106ec6e30558 | 17 | DigitalOut Sync(PA_4); |
MadhuraT | 3:106ec6e30558 | 18 | Serial serial1(USBTX,USBRX); |
MadhuraT | 3:106ec6e30558 | 19 | DigitalOut sync(PA_6); |
MadhuraT | 3:106ec6e30558 | 20 | InterruptIn userButton(PC_13); |
MadhuraT | 3:106ec6e30558 | 21 | Ticker aliveTicker; |
MadhuraT | 3:106ec6e30558 | 22 | Timer t; |
MadhuraT | 3:106ec6e30558 | 23 | int i,SW=0,Datarecd =0,Dataxmit=0; |
MadhuraT | 3:106ec6e30558 | 24 | CANMessage msgOut; |
MadhuraT | 3:106ec6e30558 | 25 | void can_msgout(); |
MadhuraT | 3:106ec6e30558 | 26 | void sendCanMessage(int data); |
MadhuraT | 3:106ec6e30558 | 27 | int s=0; |
MadhuraT | 3:106ec6e30558 | 28 | int flag=0; |
MadhuraT | 3:106ec6e30558 | 29 | char counter=6; |
MadhuraT | 3:106ec6e30558 | 30 | |
MadhuraT | 3:106ec6e30558 | 31 | void serialOut(char *message) |
MadhuraT | 3:106ec6e30558 | 32 | { |
MadhuraT | 3:106ec6e30558 | 33 | int i = -1; |
MadhuraT | 3:106ec6e30558 | 34 | while (message[++i] != '\0') serial1.putc(message[i]); |
MadhuraT | 3:106ec6e30558 | 35 | } |
MadhuraT | 3:106ec6e30558 | 36 | |
MadhuraT | 3:106ec6e30558 | 37 | void isrButton() |
MadhuraT | 3:106ec6e30558 | 38 | { |
MadhuraT | 3:106ec6e30558 | 39 | /* if(SW==0) |
MadhuraT | 3:106ec6e30558 | 40 | { |
MadhuraT | 3:106ec6e30558 | 41 | SW=1; |
MadhuraT | 3:106ec6e30558 | 42 | //sync=1; |
MadhuraT | 3:106ec6e30558 | 43 | sync=1; |
MadhuraT | 3:106ec6e30558 | 44 | wait_ms(1); |
MadhuraT | 3:106ec6e30558 | 45 | //sendCanMessage(); |
MadhuraT | 3:106ec6e30558 | 46 | |
MadhuraT | 3:106ec6e30558 | 47 | } |
MadhuraT | 3:106ec6e30558 | 48 | else |
MadhuraT | 3:106ec6e30558 | 49 | { |
MadhuraT | 3:106ec6e30558 | 50 | SW=0; |
MadhuraT | 3:106ec6e30558 | 51 | //sync=0; |
MadhuraT | 3:106ec6e30558 | 52 | sync=0; |
MadhuraT | 3:106ec6e30558 | 53 | |
MadhuraT | 3:106ec6e30558 | 54 | } */ |
MadhuraT | 3:106ec6e30558 | 55 | } |
MadhuraT | 3:106ec6e30558 | 56 | |
MadhuraT | 3:106ec6e30558 | 57 | void alive() |
MadhuraT | 3:106ec6e30558 | 58 | { |
MadhuraT | 3:106ec6e30558 | 59 | //ledGreen = !ledGreen; |
MadhuraT | 3:106ec6e30558 | 60 | char *message = (char *)"Alive\r\n\0"; |
MadhuraT | 3:106ec6e30558 | 61 | serialOut(message); |
MadhuraT | 3:106ec6e30558 | 62 | } |
MadhuraT | 3:106ec6e30558 | 63 | |
MadhuraT | 3:106ec6e30558 | 64 | void isrCanRx() |
MadhuraT | 3:106ec6e30558 | 65 | { |
MadhuraT | 3:106ec6e30558 | 66 | |
MadhuraT | 3:106ec6e30558 | 67 | /*CANMessage canMessage; |
MadhuraT | 3:106ec6e30558 | 68 | can1.read(canMessage); //Clears interrupt flag |
MadhuraT | 3:106ec6e30558 | 69 | Datarecd=canMessage.data[0]; |
MadhuraT | 3:106ec6e30558 | 70 | if(canMessage.id==0x10) |
MadhuraT | 3:106ec6e30558 | 71 | { |
MadhuraT | 3:106ec6e30558 | 72 | if(Datarecd==0x0A) |
MadhuraT | 3:106ec6e30558 | 73 | { |
MadhuraT | 3:106ec6e30558 | 74 | led1=1; |
MadhuraT | 3:106ec6e30558 | 75 | } |
MadhuraT | 3:106ec6e30558 | 76 | else |
MadhuraT | 3:106ec6e30558 | 77 | { |
MadhuraT | 3:106ec6e30558 | 78 | led1=0; |
MadhuraT | 3:106ec6e30558 | 79 | } |
MadhuraT | 3:106ec6e30558 | 80 | } |
MadhuraT | 3:106ec6e30558 | 81 | if(canMessage.id==0x20) |
MadhuraT | 3:106ec6e30558 | 82 | { |
MadhuraT | 3:106ec6e30558 | 83 | if(Datarecd==0x0A) |
MadhuraT | 3:106ec6e30558 | 84 | { |
MadhuraT | 3:106ec6e30558 | 85 | led2=1; |
MadhuraT | 3:106ec6e30558 | 86 | } |
MadhuraT | 3:106ec6e30558 | 87 | else |
MadhuraT | 3:106ec6e30558 | 88 | { |
MadhuraT | 3:106ec6e30558 | 89 | led2=0; |
MadhuraT | 3:106ec6e30558 | 90 | } |
MadhuraT | 3:106ec6e30558 | 91 | }*/ |
MadhuraT | 3:106ec6e30558 | 92 | |
MadhuraT | 3:106ec6e30558 | 93 | } |
MadhuraT | 3:106ec6e30558 | 94 | |
MadhuraT | 3:106ec6e30558 | 95 | void isrCanTx() |
MadhuraT | 3:106ec6e30558 | 96 | { |
MadhuraT | 3:106ec6e30558 | 97 | /*if(SW==1 && s<100) |
MadhuraT | 3:106ec6e30558 | 98 | { |
MadhuraT | 3:106ec6e30558 | 99 | sendCanMessage(); |
MadhuraT | 3:106ec6e30558 | 100 | s++; |
MadhuraT | 3:106ec6e30558 | 101 | }*/ |
MadhuraT | 3:106ec6e30558 | 102 | |
MadhuraT | 3:106ec6e30558 | 103 | } |
MadhuraT | 3:106ec6e30558 | 104 | |
MadhuraT | 3:106ec6e30558 | 105 | void isrCanError() |
MadhuraT | 3:106ec6e30558 | 106 | { |
MadhuraT | 3:106ec6e30558 | 107 | char *message = (char *)"CAN WERR IRQ\r\n\0"; |
MadhuraT | 3:106ec6e30558 | 108 | serialOut(message); |
MadhuraT | 3:106ec6e30558 | 109 | } |
MadhuraT | 3:106ec6e30558 | 110 | |
MadhuraT | 3:106ec6e30558 | 111 | void isrCanDataOverrun() |
MadhuraT | 3:106ec6e30558 | 112 | { |
MadhuraT | 3:106ec6e30558 | 113 | char *message = (char *)"CAN DAO IRQ\r\n\0"; |
MadhuraT | 3:106ec6e30558 | 114 | serialOut(message); |
MadhuraT | 3:106ec6e30558 | 115 | } |
MadhuraT | 3:106ec6e30558 | 116 | |
MadhuraT | 3:106ec6e30558 | 117 | void isrCanWakeup() |
MadhuraT | 3:106ec6e30558 | 118 | { |
MadhuraT | 3:106ec6e30558 | 119 | char *message = (char *)"CAN WAKEUP IRQ\r\n\0"; |
MadhuraT | 3:106ec6e30558 | 120 | serialOut(message); |
MadhuraT | 3:106ec6e30558 | 121 | } |
MadhuraT | 3:106ec6e30558 | 122 | |
MadhuraT | 3:106ec6e30558 | 123 | void isrCanErrorPassive() |
MadhuraT | 3:106ec6e30558 | 124 | { |
MadhuraT | 3:106ec6e30558 | 125 | char *message = (char *)"CAN EP IRQ\r\n\0"; |
MadhuraT | 3:106ec6e30558 | 126 | serialOut(message); |
MadhuraT | 3:106ec6e30558 | 127 | } |
MadhuraT | 3:106ec6e30558 | 128 | |
MadhuraT | 3:106ec6e30558 | 129 | void isrCanArbitrationLost() |
MadhuraT | 3:106ec6e30558 | 130 | { |
MadhuraT | 3:106ec6e30558 | 131 | char *message = (char *)"CAN ARB IRQ\r\n\0"; |
MadhuraT | 3:106ec6e30558 | 132 | serialOut(message); |
MadhuraT | 3:106ec6e30558 | 133 | } |
MadhuraT | 3:106ec6e30558 | 134 | |
MadhuraT | 3:106ec6e30558 | 135 | void isrCanBusError() |
MadhuraT | 3:106ec6e30558 | 136 | { |
MadhuraT | 3:106ec6e30558 | 137 | char *message = (char *)"CAN BUSERR IRQ\r\n\0"; |
MadhuraT | 3:106ec6e30558 | 138 | serialOut(message); |
MadhuraT | 3:106ec6e30558 | 139 | } |
MadhuraT | 3:106ec6e30558 | 140 | |
MadhuraT | 3:106ec6e30558 | 141 | void isrCanReady() |
MadhuraT | 3:106ec6e30558 | 142 | { |
MadhuraT | 3:106ec6e30558 | 143 | char *message = (char *)"CAN READY IRQ\r\n\0"; |
MadhuraT | 3:106ec6e30558 | 144 | serialOut(message); |
MadhuraT | 3:106ec6e30558 | 145 | } |
MadhuraT | 3:106ec6e30558 | 146 | |
MadhuraT | 3:106ec6e30558 | 147 | void sendCanMessage(int data) |
MadhuraT | 3:106ec6e30558 | 148 | { |
MadhuraT | 3:106ec6e30558 | 149 | int ret = 0; |
MadhuraT | 3:106ec6e30558 | 150 | data= 0x01; |
MadhuraT | 3:106ec6e30558 | 151 | msgOut.format = CANStandard; |
MadhuraT | 3:106ec6e30558 | 152 | msgOut.type = CANData; |
MadhuraT | 3:106ec6e30558 | 153 | msgOut.len = 2; |
MadhuraT | 3:106ec6e30558 | 154 | msgOut.id = 0xffe; |
MadhuraT | 3:106ec6e30558 | 155 | //msgOut.id = data; |
MadhuraT | 3:106ec6e30558 | 156 | msgOut.data[0] = data; |
MadhuraT | 3:106ec6e30558 | 157 | msgOut.data[1] = data; |
MadhuraT | 3:106ec6e30558 | 158 | ret = can1.write(msgOut); |
MadhuraT | 3:106ec6e30558 | 159 | serial1.printf("can.write() returned %x", data); |
MadhuraT | 3:106ec6e30558 | 160 | } |
MadhuraT | 3:106ec6e30558 | 161 | void can_msgout() |
MadhuraT | 3:106ec6e30558 | 162 | { |
MadhuraT | 3:106ec6e30558 | 163 | msgOut.data[0] = Dataxmit;//0xA; |
MadhuraT | 3:106ec6e30558 | 164 | //sendCanMessage(); |
MadhuraT | 3:106ec6e30558 | 165 | } |
MadhuraT | 3:106ec6e30558 | 166 | |
MadhuraT | 3:106ec6e30558 | 167 | void setup() |
MadhuraT | 3:106ec6e30558 | 168 | { |
MadhuraT | 3:106ec6e30558 | 169 | //Serial |
MadhuraT | 3:106ec6e30558 | 170 | serial1.baud(SERIAL_BAUD); |
MadhuraT | 3:106ec6e30558 | 171 | serial1.printf("START\r\n"); |
MadhuraT | 3:106ec6e30558 | 172 | |
MadhuraT | 3:106ec6e30558 | 173 | //CAN |
MadhuraT | 3:106ec6e30558 | 174 | can1.frequency(CAN_BAUD); |
MadhuraT | 3:106ec6e30558 | 175 | |
MadhuraT | 3:106ec6e30558 | 176 | //Interrupts |
MadhuraT | 3:106ec6e30558 | 177 | //userButton.rise(&isrButton); |
MadhuraT | 3:106ec6e30558 | 178 | //can1.attach(&isrCanRx, CAN::RxIrq); |
MadhuraT | 3:106ec6e30558 | 179 | //can1.attach(&isrCanTx, CAN::TxIrq); |
MadhuraT | 3:106ec6e30558 | 180 | can1.attach(&isrCanError, CAN::EwIrq); |
MadhuraT | 3:106ec6e30558 | 181 | can1.attach(&isrCanDataOverrun, CAN::DoIrq); |
MadhuraT | 3:106ec6e30558 | 182 | can1.attach(&isrCanWakeup, CAN::WuIrq); |
MadhuraT | 3:106ec6e30558 | 183 | // can1.attach(&isrCanErrorPassive, CAN::EpIrq); |
MadhuraT | 3:106ec6e30558 | 184 | can1.attach(&isrCanArbitrationLost, CAN::AlIrq); |
MadhuraT | 3:106ec6e30558 | 185 | can1.attach(&isrCanBusError, CAN::BeIrq); |
MadhuraT | 3:106ec6e30558 | 186 | can1.attach(&isrCanReady, CAN::IdIrq); |
MadhuraT | 3:106ec6e30558 | 187 | |
MadhuraT | 3:106ec6e30558 | 188 | aliveTicker.attach(&alive, 5.0); |
MadhuraT | 3:106ec6e30558 | 189 | } |
MadhuraT | 3:106ec6e30558 | 190 | |
bcostm | 0:d5bd863b2036 | 191 | |
bcostm | 0:d5bd863b2036 | 192 | int main() |
bcostm | 0:d5bd863b2036 | 193 | { |
MadhuraT | 3:106ec6e30558 | 194 | |
MadhuraT | 3:106ec6e30558 | 195 | int data1; |
MadhuraT | 3:106ec6e30558 | 196 | int data2; |
MadhuraT | 3:106ec6e30558 | 197 | int ret; |
MadhuraT | 3:106ec6e30558 | 198 | int counter=0; |
MadhuraT | 3:106ec6e30558 | 199 | int counter1=0; |
MadhuraT | 3:106ec6e30558 | 200 | int counter3=0; |
MadhuraT | 3:106ec6e30558 | 201 | CANMessage msg; |
MadhuraT | 3:106ec6e30558 | 202 | sync=0; |
MadhuraT | 3:106ec6e30558 | 203 | setup(); |
MadhuraT | 3:106ec6e30558 | 204 | |
MadhuraT | 3:106ec6e30558 | 205 | |
MadhuraT | 3:106ec6e30558 | 206 | |
MadhuraT | 3:106ec6e30558 | 207 | while (true) |
MadhuraT | 3:106ec6e30558 | 208 | { |
MadhuraT | 3:106ec6e30558 | 209 | msg.len=2; |
MadhuraT | 3:106ec6e30558 | 210 | ret= can1.read(msg); |
MadhuraT | 3:106ec6e30558 | 211 | // printf("return value %d",ret); |
MadhuraT | 3:106ec6e30558 | 212 | //printf ("hi"); |
MadhuraT | 3:106ec6e30558 | 213 | if(msg.id == 0x2aa) |
MadhuraT | 3:106ec6e30558 | 214 | { |
MadhuraT | 3:106ec6e30558 | 215 | // printf("\n Node1 Message received123: %d \r\n", msg.data[0]); |
MadhuraT | 3:106ec6e30558 | 216 | counter=1; |
MadhuraT | 3:106ec6e30558 | 217 | // printf( "first byte = %x " , msg.data[0]); |
MadhuraT | 3:106ec6e30558 | 218 | //printf( "second byte = %x " , msg.data[1]); |
MadhuraT | 3:106ec6e30558 | 219 | data1= ((msg.data[1] << 8 )| msg.data[0]); |
MadhuraT | 3:106ec6e30558 | 220 | } |
MadhuraT | 3:106ec6e30558 | 221 | if(msg.id == 0x2ff) |
MadhuraT | 3:106ec6e30558 | 222 | { |
MadhuraT | 3:106ec6e30558 | 223 | //printf("\n Node1 Message received456: %d \r\n", msg.data[0]); |
MadhuraT | 3:106ec6e30558 | 224 | data2= ((msg.data[1] << 8 )| msg.data[0]); |
MadhuraT | 3:106ec6e30558 | 225 | //printf( "first byte = %x " , msg.data[0]); |
MadhuraT | 3:106ec6e30558 | 226 | //printf( "second byte = %x " , msg.data[1]); |
MadhuraT | 3:106ec6e30558 | 227 | counter1=1; |
MadhuraT | 3:106ec6e30558 | 228 | } |
MadhuraT | 3:106ec6e30558 | 229 | if(counter== 1 && counter1 == 1 && counter3 == 0) |
MadhuraT | 3:106ec6e30558 | 230 | { |
MadhuraT | 3:106ec6e30558 | 231 | if(data1 > data2) |
MadhuraT | 3:106ec6e30558 | 232 | { |
MadhuraT | 3:106ec6e30558 | 233 | printf (" Node2 won: Node1 Time=%d ms: Node 2 Time= %d ms \r\n ", data1,data2); |
MadhuraT | 3:106ec6e30558 | 234 | //printf (" Node 1 Time= %d", data1); |
MadhuraT | 3:106ec6e30558 | 235 | counter3=1; |
MadhuraT | 3:106ec6e30558 | 236 | |
MadhuraT | 3:106ec6e30558 | 237 | } |
MadhuraT | 3:106ec6e30558 | 238 | else |
MadhuraT | 3:106ec6e30558 | 239 | { |
MadhuraT | 3:106ec6e30558 | 240 | printf (" Node1 won: Node1 Time=%d ms : Node 2 Time= %d ms \r\n ", data1,data2); |
MadhuraT | 3:106ec6e30558 | 241 | // printf (" Node 1 Time= %d", data2); |
MadhuraT | 3:106ec6e30558 | 242 | counter3=1; |
MadhuraT | 3:106ec6e30558 | 243 | } |
MadhuraT | 3:106ec6e30558 | 244 | |
MadhuraT | 3:106ec6e30558 | 245 | } |
bcostm | 0:d5bd863b2036 | 246 | } |
bcostm | 0:d5bd863b2036 | 247 | } |