@@ -307,34 +307,32 @@ STATIC void pyb_can_print(const mp_print_t *print, mp_obj_t self_in, mp_print_ki
307
307
if (!self -> is_enabled ) {
308
308
mp_printf (print , "CAN(%u)" , self -> can_id );
309
309
} else {
310
- mp_printf (print , "CAN(%u, CAN." , self -> can_id );
311
310
qstr mode ;
312
311
switch (self -> can .Init .Mode ) {
313
312
case CAN_MODE_NORMAL : mode = MP_QSTR_NORMAL ; break ;
314
313
case CAN_MODE_LOOPBACK : mode = MP_QSTR_LOOPBACK ; break ;
315
314
case CAN_MODE_SILENT : mode = MP_QSTR_SILENT ; break ;
316
315
case CAN_MODE_SILENT_LOOPBACK : default : mode = MP_QSTR_SILENT_LOOPBACK ; break ;
317
316
}
318
- mp_printf (print , "%q, extframe=" , mode );
319
- if (self -> extframe ) {
320
- mode = MP_QSTR_True ;
321
- } else {
322
- mode = MP_QSTR_False ;
323
- }
324
- mp_printf (print , "%q)" , mode );
317
+ mp_printf (print , "CAN(%u, CAN.%q, extframe=%q, auto_restart=%q)" ,
318
+ self -> can_id ,
319
+ mode ,
320
+ self -> extframe ? MP_QSTR_True : MP_QSTR_False ,
321
+ (self -> can .Instance -> MCR & CAN_MCR_ABOM ) ? MP_QSTR_True : MP_QSTR_False );
325
322
}
326
323
}
327
324
328
325
// init(mode, extframe=False, prescaler=100, *, sjw=1, bs1=6, bs2=8)
329
326
STATIC mp_obj_t pyb_can_init_helper (pyb_can_obj_t * self , size_t n_args , const mp_obj_t * pos_args , mp_map_t * kw_args ) {
330
- enum { ARG_mode , ARG_extframe , ARG_prescaler , ARG_sjw , ARG_bs1 , ARG_bs2 };
327
+ enum { ARG_mode , ARG_extframe , ARG_prescaler , ARG_sjw , ARG_bs1 , ARG_bs2 , ARG_auto_restart };
331
328
static const mp_arg_t allowed_args [] = {
332
329
{ MP_QSTR_mode , MP_ARG_REQUIRED | MP_ARG_INT , {.u_int = CAN_MODE_NORMAL } },
333
330
{ MP_QSTR_extframe , MP_ARG_BOOL , {.u_bool = false} },
334
331
{ MP_QSTR_prescaler , MP_ARG_INT , {.u_int = 100 } },
335
332
{ MP_QSTR_sjw , MP_ARG_KW_ONLY | MP_ARG_INT , {.u_int = 1 } },
336
333
{ MP_QSTR_bs1 , MP_ARG_KW_ONLY | MP_ARG_INT , {.u_int = 6 } },
337
334
{ MP_QSTR_bs2 , MP_ARG_KW_ONLY | MP_ARG_INT , {.u_int = 8 } },
335
+ { MP_QSTR_auto_restart , MP_ARG_KW_ONLY | MP_ARG_BOOL , {.u_bool = false} },
338
336
};
339
337
340
338
// parse args
@@ -352,7 +350,7 @@ STATIC mp_obj_t pyb_can_init_helper(pyb_can_obj_t *self, size_t n_args, const mp
352
350
init -> BS1 = ((args [ARG_bs1 ].u_int - 1 ) & 0xf ) << 16 ;
353
351
init -> BS2 = ((args [ARG_bs2 ].u_int - 1 ) & 7 ) << 20 ;
354
352
init -> TTCM = DISABLE ;
355
- init -> ABOM = DISABLE ;
353
+ init -> ABOM = args [ ARG_auto_restart ]. u_bool ? ENABLE : DISABLE ;
356
354
init -> AWUM = DISABLE ;
357
355
init -> NART = DISABLE ;
358
356
init -> RFLM = DISABLE ;
0 commit comments