@@ -206,7 +206,7 @@ int can_frequency(can_t *obj, int f)
206
206
207
207
int can_write (can_t * obj , CAN_Message msg , int cc )
208
208
{
209
- uint32_t transmitmailbox = 5 ;
209
+ uint32_t transmitmailbox = CAN_TXSTATUS_NOMAILBOX ;
210
210
CAN_TypeDef * can = (CAN_TypeDef * )(obj -> can );
211
211
212
212
/* Select one empty transmit mailbox */
@@ -217,33 +217,31 @@ int can_write(can_t *obj, CAN_Message msg, int cc)
217
217
} else if ((can -> TSR & CAN_TSR_TME2 ) == CAN_TSR_TME2 ) {
218
218
transmitmailbox = 2 ;
219
219
} else {
220
- transmitmailbox = CAN_TXSTATUS_NOMAILBOX ;
220
+ return 0 ;
221
221
}
222
222
223
- if (transmitmailbox != CAN_TXSTATUS_NOMAILBOX ) {
224
- can -> sTxMailBox [transmitmailbox ].TIR &= CAN_TI0R_TXRQ ;
225
- if (!(msg .format )) {
226
- can -> sTxMailBox [transmitmailbox ].TIR |= ((msg .id << 21 ) | msg .type );
227
- } else {
228
- can -> sTxMailBox [transmitmailbox ].TIR |= ((msg .id << 3 ) | CAN_ID_EXT | msg .type );
229
- }
230
-
231
- /* Set up the DLC */
232
- can -> sTxMailBox [transmitmailbox ].TDTR &= (uint32_t )0xFFFFFFF0 ;
233
- can -> sTxMailBox [transmitmailbox ].TDTR |= (msg .len & (uint8_t )0x0000000F );
234
-
235
- /* Set up the data field */
236
- can -> sTxMailBox [transmitmailbox ].TDLR = (((uint32_t )msg .data [3 ] << 24 ) |
237
- ((uint32_t )msg .data [2 ] << 16 ) |
238
- ((uint32_t )msg .data [1 ] << 8 ) |
239
- ((uint32_t )msg .data [0 ]));
240
- can -> sTxMailBox [transmitmailbox ].TDHR = (((uint32_t )msg .data [7 ] << 24 ) |
241
- ((uint32_t )msg .data [6 ] << 16 ) |
242
- ((uint32_t )msg .data [5 ] << 8 ) |
243
- ((uint32_t )msg .data [4 ]));
244
- /* Request transmission */
245
- can -> sTxMailBox [transmitmailbox ].TIR |= CAN_TI0R_TXRQ ;
223
+ can -> sTxMailBox [transmitmailbox ].TIR &= CAN_TI0R_TXRQ ;
224
+ if (!(msg .format )) {
225
+ can -> sTxMailBox [transmitmailbox ].TIR |= ((msg .id << 21 ) | msg .type );
226
+ } else {
227
+ can -> sTxMailBox [transmitmailbox ].TIR |= ((msg .id << 3 ) | CAN_ID_EXT | msg .type );
246
228
}
229
+
230
+ /* Set up the DLC */
231
+ can -> sTxMailBox [transmitmailbox ].TDTR &= (uint32_t )0xFFFFFFF0 ;
232
+ can -> sTxMailBox [transmitmailbox ].TDTR |= (msg .len & (uint8_t )0x0000000F );
233
+
234
+ /* Set up the data field */
235
+ can -> sTxMailBox [transmitmailbox ].TDLR = (((uint32_t )msg .data [3 ] << 24 ) |
236
+ ((uint32_t )msg .data [2 ] << 16 ) |
237
+ ((uint32_t )msg .data [1 ] << 8 ) |
238
+ ((uint32_t )msg .data [0 ]));
239
+ can -> sTxMailBox [transmitmailbox ].TDHR = (((uint32_t )msg .data [7 ] << 24 ) |
240
+ ((uint32_t )msg .data [6 ] << 16 ) |
241
+ ((uint32_t )msg .data [5 ] << 8 ) |
242
+ ((uint32_t )msg .data [4 ]));
243
+ /* Request transmission */
244
+ can -> sTxMailBox [transmitmailbox ].TIR |= CAN_TI0R_TXRQ ;
247
245
248
246
return 1 ;
249
247
}
0 commit comments