@@ -206,7 +206,7 @@ int can_frequency(can_t *obj, int f)
206206
207207int can_write (can_t * obj , CAN_Message msg , int cc )
208208{
209- uint32_t transmitmailbox = 5 ;
209+ uint32_t transmitmailbox = CAN_TXSTATUS_NOMAILBOX ;
210210 CAN_TypeDef * can = (CAN_TypeDef * )(obj -> can );
211211
212212 /* Select one empty transmit mailbox */
@@ -217,33 +217,31 @@ int can_write(can_t *obj, CAN_Message msg, int cc)
217217 } else if ((can -> TSR & CAN_TSR_TME2 ) == CAN_TSR_TME2 ) {
218218 transmitmailbox = 2 ;
219219 } else {
220- transmitmailbox = CAN_TXSTATUS_NOMAILBOX ;
220+ return 0 ;
221221 }
222222
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 );
246228 }
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 ;
247245
248246 return 1 ;
249247}
0 commit comments