@@ -217,7 +217,7 @@ STATIC void pyb_can_get_bit_timing(mp_uint_t baudrate, mp_uint_t sample_point,
217
217
// init(mode, prescaler=100, *, sjw=1, bs1=6, bs2=8)
218
218
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 ) {
219
219
enum { ARG_mode , ARG_prescaler , ARG_sjw , ARG_bs1 , ARG_bs2 , ARG_auto_restart , ARG_baudrate , ARG_sample_point ,
220
- ARG_brs_prescaler , ARG_brs_sjw , ARG_brs_bs1 , ARG_brs_bs2 , ARG_brs_baudrate , ARG_brs_sample_point };
220
+ ARG_num_filter_banks , ARG_brs_prescaler , ARG_brs_sjw , ARG_brs_bs1 , ARG_brs_bs2 , ARG_brs_baudrate , ARG_brs_sample_point };
221
221
static const mp_arg_t allowed_args [] = {
222
222
{ MP_QSTR_mode , MP_ARG_REQUIRED | MP_ARG_INT , {.u_int = CAN_MODE_NORMAL } },
223
223
{ MP_QSTR_prescaler , MP_ARG_INT , {.u_int = CAN_DEFAULT_PRESCALER } },
@@ -227,6 +227,7 @@ STATIC mp_obj_t pyb_can_init_helper(pyb_can_obj_t *self, size_t n_args, const mp
227
227
{ MP_QSTR_auto_restart , MP_ARG_KW_ONLY | MP_ARG_BOOL , {.u_bool = false} },
228
228
{ MP_QSTR_baudrate , MP_ARG_KW_ONLY | MP_ARG_INT , {.u_int = 0 } },
229
229
{ MP_QSTR_sample_point , MP_ARG_KW_ONLY | MP_ARG_INT , {.u_int = 75 } }, // 75% sampling point
230
+ { MP_QSTR_num_filter_banks , MP_ARG_KW_ONLY | MP_ARG_INT , {.u_int = 14 } },
230
231
#if MICROPY_HW_ENABLE_FDCAN
231
232
{ MP_QSTR_brs_prescaler , MP_ARG_INT , {.u_int = CAN_DEFAULT_PRESCALER } },
232
233
{ MP_QSTR_brs_sjw , MP_ARG_KW_ONLY | MP_ARG_INT , {.u_int = CAN_DEFAULT_SJW } },
@@ -267,6 +268,12 @@ STATIC mp_obj_t pyb_can_init_helper(pyb_can_obj_t *self, size_t n_args, const mp
267
268
self -> can .Init .DataSyncJumpWidth = args [ARG_brs_sjw ].u_int ;
268
269
self -> can .Init .DataTimeSeg1 = args [ARG_bs1 ].u_int ; // DataTimeSeg1 = Propagation_segment + Phase_segment_1
269
270
self -> can .Init .DataTimeSeg2 = args [ARG_bs2 ].u_int ;
271
+ #else
272
+ // Init filter banks for classic CAN.
273
+ can2_start_bank = args [ARG_num_filter_banks ].u_int ;
274
+ for (int f = 0 ; f < CAN_MAX_FILTER ; f ++ ) {
275
+ can_clearfilter (self , f , can2_start_bank );
276
+ }
270
277
#endif
271
278
272
279
if (!can_init (self , args [ARG_mode ].u_int , args [ARG_prescaler ].u_int , args [ARG_sjw ].u_int ,
@@ -726,35 +733,6 @@ STATIC mp_obj_t pyb_can_recv(size_t n_args, const mp_obj_t *pos_args, mp_map_t *
726
733
}
727
734
STATIC MP_DEFINE_CONST_FUN_OBJ_KW (pyb_can_recv_obj , 1 , pyb_can_recv );
728
735
729
- // initfilterbanks(n)
730
- STATIC mp_obj_t pyb_can_initfilterbanks (mp_obj_t self_in , mp_obj_t bank_in ) {
731
- pyb_can_obj_t * self = MP_OBJ_TO_PTR (self_in );
732
- #if MICROPY_HW_ENABLE_FDCAN
733
- (void )self ;
734
- #if 0
735
- FDCAN_InitTypeDef * init = & self -> can .Init ;
736
- // Clear standard ID filters.
737
- for (int f = 0 ; f < init -> StdFiltersNbr ; ++ f ) {
738
- can_clearfilter (self , f , false);
739
- }
740
- // Clear extended ID filters.
741
- for (int f = 0 ; f < init -> ExtFiltersNbr ; ++ f ) {
742
- can_clearfilter (self , f , true);
743
- }
744
- #endif
745
- #else
746
- // NOTE: For classic CAN, this function calls HAL_CAN_ConfigFilter(NULL, &filter);
747
- // if CAN3 is defined, ConfigFilter() will dereference a NULL pointer.
748
- can2_start_bank = mp_obj_get_int (bank_in );
749
- for (int f = 0 ; f < CAN_MAX_FILTER ; f ++ ) {
750
- can_clearfilter (self , f , can2_start_bank );
751
- }
752
- #endif
753
- return mp_const_none ;
754
- }
755
- STATIC MP_DEFINE_CONST_FUN_OBJ_2 (pyb_can_initfilterbanks_fun_obj , pyb_can_initfilterbanks );
756
- STATIC MP_DEFINE_CONST_CLASSMETHOD_OBJ (pyb_can_initfilterbanks_obj , MP_ROM_PTR (& pyb_can_initfilterbanks_fun_obj ));
757
-
758
736
STATIC mp_obj_t pyb_can_clearfilter (size_t n_args , const mp_obj_t * pos_args , mp_map_t * kw_args ) {
759
737
enum { ARG_extframe };
760
738
static const mp_arg_t allowed_args [] = {
@@ -1006,7 +984,6 @@ STATIC const mp_rom_map_elem_t pyb_can_locals_dict_table[] = {
1006
984
{ MP_ROM_QSTR (MP_QSTR_any ), MP_ROM_PTR (& pyb_can_any_obj ) },
1007
985
{ MP_ROM_QSTR (MP_QSTR_send ), MP_ROM_PTR (& pyb_can_send_obj ) },
1008
986
{ MP_ROM_QSTR (MP_QSTR_recv ), MP_ROM_PTR (& pyb_can_recv_obj ) },
1009
- { MP_ROM_QSTR (MP_QSTR_initfilterbanks ), MP_ROM_PTR (& pyb_can_initfilterbanks_obj ) },
1010
987
{ MP_ROM_QSTR (MP_QSTR_setfilter ), MP_ROM_PTR (& pyb_can_setfilter_obj ) },
1011
988
{ MP_ROM_QSTR (MP_QSTR_clearfilter ), MP_ROM_PTR (& pyb_can_clearfilter_obj ) },
1012
989
{ MP_ROM_QSTR (MP_QSTR_rxcallback ), MP_ROM_PTR (& pyb_can_rxcallback_obj ) },
0 commit comments