@@ -207,7 +207,7 @@ int can_frequency(can_t *obj, int f)
207207
208208int can_write (can_t * obj , CAN_Message msg , int cc )
209209{
210- uint32_t transmitmailbox = 5 ;
210+ uint32_t transmitmailbox = CAN_TXSTATUS_NOMAILBOX ;
211211 CAN_TypeDef * can = (CAN_TypeDef * )(obj -> can );
212212
213213 /* Select one empty transmit mailbox */
@@ -218,33 +218,31 @@ int can_write(can_t *obj, CAN_Message msg, int cc)
218218 } else if ((can -> TSR & CAN_TSR_TME2 ) == CAN_TSR_TME2 ) {
219219 transmitmailbox = 2 ;
220220 } else {
221- transmitmailbox = CAN_TXSTATUS_NOMAILBOX ;
221+ return 0 ;
222222 }
223223
224- if (transmitmailbox != CAN_TXSTATUS_NOMAILBOX ) {
225- can -> sTxMailBox [transmitmailbox ].TIR &= CAN_TI0R_TXRQ ;
226- if (!(msg .format )) {
227- can -> sTxMailBox [transmitmailbox ].TIR |= ((msg .id << 21 ) | msg .type );
228- } else {
229- can -> sTxMailBox [transmitmailbox ].TIR |= ((msg .id << 3 ) | CAN_ID_EXT | msg .type );
230- }
231-
232- /* Set up the DLC */
233- can -> sTxMailBox [transmitmailbox ].TDTR &= (uint32_t )0xFFFFFFF0 ;
234- can -> sTxMailBox [transmitmailbox ].TDTR |= (msg .len & (uint8_t )0x0000000F );
235-
236- /* Set up the data field */
237- can -> sTxMailBox [transmitmailbox ].TDLR = (((uint32_t )msg .data [3 ] << 24 ) |
238- ((uint32_t )msg .data [2 ] << 16 ) |
239- ((uint32_t )msg .data [1 ] << 8 ) |
240- ((uint32_t )msg .data [0 ]));
241- can -> sTxMailBox [transmitmailbox ].TDHR = (((uint32_t )msg .data [7 ] << 24 ) |
242- ((uint32_t )msg .data [6 ] << 16 ) |
243- ((uint32_t )msg .data [5 ] << 8 ) |
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 ) |
244243 ((uint32_t )msg .data [4 ]));
245- /* Request transmission */
246- can -> sTxMailBox [transmitmailbox ].TIR |= CAN_TI0R_TXRQ ;
247- }
244+ /* Request transmission */
245+ can -> sTxMailBox [transmitmailbox ].TIR |= CAN_TI0R_TXRQ ;
248246
249247 return 1 ;
250248}
0 commit comments