@@ -263,7 +263,7 @@ STATIC uint32_t calc_filter(uint32_t filter_ns, uint16_t *count, uint16_t *perio
263
263
STATIC void mp_machine_qencd_init_helper_common (machine_qencd_obj_t * self ,
264
264
mp_arg_val_t args [], enc_config_t * enc_config ) {
265
265
266
- enum { ARG_match_pin , ARG_filter_ns , ARG_cpc , ARG_match , ARG_signed , ARG_index };
266
+ enum { ARG_match_pin , ARG_filter_ns , ARG_cpc , ARG_signed , ARG_index };
267
267
268
268
// Check for a Match pin for the compare match signal
269
269
if (args [ARG_match_pin ].u_obj != MP_ROM_INT (-1 )) {
@@ -295,10 +295,6 @@ STATIC void mp_machine_qencd_init_helper_common(machine_qencd_obj_t *self,
295
295
}
296
296
}
297
297
298
- if (args [ARG_match ].u_obj != mp_const_none ) {
299
- enc_config -> positionCompareValue = mp_obj_int_get_truncated (args [ARG_match ].u_obj );
300
- }
301
-
302
298
if (args [ARG_signed ].u_int >= 0 ) {
303
299
self -> is_signed = !!args [ARG_signed ].u_int ;
304
300
}
@@ -323,18 +319,16 @@ STATIC void mp_machine_qencd_init_helper_common(machine_qencd_obj_t *self,
323
319
324
320
STATIC void mp_machine_qencd_init_helper (machine_qencd_obj_t * self ,
325
321
size_t n_args , const mp_obj_t * pos_args , mp_map_t * kw_args ) {
326
- enum { ARG_phase_a , ARG_phase_b , ARG_home , ARG_reverse ,
327
- ARG_match_pin , ARG_filter_ns , ARG_cpc , ARG_match , ARG_signed , ARG_index };
322
+ enum { ARG_phase_a , ARG_phase_b , ARG_home ,
323
+ ARG_match_pin , ARG_filter_ns , ARG_cpc , ARG_signed , ARG_index };
328
324
329
325
static const mp_arg_t allowed_args [] = {
330
326
{ MP_QSTR_phase_a , MP_ARG_OBJ , {.u_rom_obj = mp_const_none } },
331
327
{ MP_QSTR_phase_b , MP_ARG_OBJ , {.u_rom_obj = mp_const_none } },
332
328
{ MP_QSTR_home , MP_ARG_KW_ONLY | MP_ARG_OBJ , {.u_rom_obj = MP_ROM_INT (-1 )} },
333
- { MP_QSTR_reverse , MP_ARG_KW_ONLY | MP_ARG_INT , {.u_int = -1 } },
334
- { MP_QSTR_match , MP_ARG_KW_ONLY | MP_ARG_OBJ , {.u_rom_obj = MP_ROM_INT (-1 )} },
329
+ { MP_QSTR_match_pin , MP_ARG_KW_ONLY | MP_ARG_OBJ , {.u_rom_obj = MP_ROM_INT (-1 )} },
335
330
{ MP_QSTR_filter_ns , MP_ARG_KW_ONLY | MP_ARG_INT , {.u_int = -1 } },
336
331
{ MP_QSTR_cpc , MP_ARG_KW_ONLY | MP_ARG_OBJ , {.u_rom_obj = mp_const_none } },
337
- { MP_QSTR_match , MP_ARG_KW_ONLY | MP_ARG_OBJ , {.u_rom_obj = mp_const_none } },
338
332
{ MP_QSTR_signed , MP_ARG_KW_ONLY | MP_ARG_INT , {.u_int = -1 } },
339
333
{ MP_QSTR_index , MP_ARG_KW_ONLY | MP_ARG_OBJ , {.u_rom_obj = MP_ROM_INT (-1 )} },
340
334
};
@@ -365,10 +359,6 @@ STATIC void mp_machine_qencd_init_helper(machine_qencd_obj_t *self,
365
359
}
366
360
}
367
361
368
- if (args [ARG_reverse ].u_int >= 0 ) {
369
- self -> enc_config .enableReverseDirection = !!args [ARG_reverse ].u_int ;
370
- }
371
-
372
362
// Set the common options
373
363
mp_machine_qencd_init_helper_common (self , args + ARG_match_pin , & self -> enc_config );
374
364
@@ -494,42 +484,38 @@ STATIC mp_obj_t machine_qencd_cycles(size_t n_args, const mp_obj_t *args) {
494
484
}
495
485
STATIC MP_DEFINE_CONST_FUN_OBJ_VAR_BETWEEN (machine_qencd_cycles_obj , 1 , 2 , machine_qencd_cycles );
496
486
497
- // qencd.match([value])
498
- STATIC mp_obj_t machine_qencd_match (size_t n_args , const mp_obj_t * args ) {
499
- machine_qencd_obj_t * self = MP_OBJ_TO_PTR (args [0 ]);
500
- if (n_args == 1 ) {
501
- return mp_obj_new_int_from_uint (self -> enc_config .positionCompareValue );
502
- } else {
503
- // Set the match_pos value
504
- uint32_t match = mp_obj_int_get_truncated (args [1 ]);
505
- self -> enc_config .positionCompareValue = match ;
506
- self -> instance -> LCOMP = (uint16_t )(match ) & 0xffff ; /* Lower 16 pos bits. */
507
- self -> instance -> UCOMP = (uint16_t )(match >> 16U ) & 0xffff ; /* Upper 16 pos bits. */
508
- return mp_const_none ;
509
- }
510
- }
511
- STATIC MP_DEFINE_CONST_FUN_OBJ_VAR_BETWEEN (machine_qencd_match_obj , 1 , 2 , machine_qencd_match );
512
-
513
487
// encoder.irq(trigger=ENCODER.IRQ_MATCH, handler=None, hard=False)
514
488
STATIC mp_obj_t machine_qencd_irq (size_t n_args , const mp_obj_t * pos_args , mp_map_t * kw_args ) {
515
- enum { ARG_trigger , ARG_handler , ARG_hard };
489
+ enum { ARG_trigger , ARG_value , ARG_handler , ARG_hard };
516
490
static const mp_arg_t allowed_args [] = {
517
- { MP_QSTR_trigger , MP_ARG_INT , {.u_int = 0 } },
518
- { MP_QSTR_handler , MP_ARG_OBJ , {.u_obj = mp_const_none } },
519
- { MP_QSTR_hard , MP_ARG_BOOL , {.u_bool = false} },
491
+ { MP_QSTR_trigger , MP_ARG_KW_ONLY | MP_ARG_INT , {.u_int = 0 } },
492
+ { MP_QSTR_value , MP_ARG_KW_ONLY | MP_ARG_OBJ , {.u_rom_obj = mp_const_none } },
493
+ { MP_QSTR_handler , MP_ARG_KW_ONLY | MP_ARG_OBJ , {.u_obj = mp_const_none } },
494
+ { MP_QSTR_hard , MP_ARG_KW_ONLY | MP_ARG_BOOL , {.u_bool = false} },
520
495
};
521
496
mp_arg_val_t args [MP_ARRAY_SIZE (allowed_args )];
522
497
mp_arg_parse_all (n_args - 1 , pos_args + 1 , kw_args , MP_ARRAY_SIZE (allowed_args ), allowed_args , args );
523
-
524
498
machine_qencd_obj_t * self = MP_OBJ_TO_PTR (pos_args [0 ]);
525
- uint16_t trigger = args [ARG_trigger ].u_int &
526
- (ENCODER_TRIGGER_MATCH | ENCODER_TRIGGER_ROLL_UNDER | ENCODER_TRIGGER_ROLL_OVER );
499
+
527
500
if (self -> irq == NULL ) {
528
501
self -> irq = m_new_obj (mp_irq_obj_t );
529
502
self -> irq -> base .type = & mp_irq_type ;
530
503
self -> irq -> parent = MP_OBJ_FROM_PTR (self );
531
504
self -> irq -> methods = NULL ;
505
+ self -> irq -> ishard = false;
506
+ }
507
+
508
+ uint16_t trigger = args [ARG_trigger ].u_int &
509
+ (ENCODER_TRIGGER_MATCH | ENCODER_TRIGGER_ROLL_UNDER | ENCODER_TRIGGER_ROLL_OVER );
510
+
511
+ if (args [ARG_value ].u_obj != mp_const_none ) {
512
+ uint32_t value = mp_obj_int_get_truncated (args [ARG_value ].u_obj );
513
+ self -> enc_config .positionCompareValue = value ;
514
+ self -> instance -> LCOMP = (uint16_t )(value ) & 0xffff ; /* Lower 16 pos bits. */
515
+ self -> instance -> UCOMP = (uint16_t )(value >> 16U ) & 0xffff ; /* Upper 16 pos bits. */
516
+ trigger |= ENCODER_TRIGGER_MATCH ;
532
517
}
518
+
533
519
self -> irq -> handler = args [ARG_handler ].u_obj ;
534
520
self -> irq -> ishard = args [ARG_hard ].u_bool ;
535
521
self -> requested_irq = trigger ;
@@ -556,7 +542,6 @@ MP_DEFINE_CONST_FUN_OBJ_KW(machine_qencd_init_obj, 1, machine_qencd_init);
556
542
557
543
STATIC const mp_rom_map_elem_t machine_qencd_locals_dict_table [] = {
558
544
{ MP_ROM_QSTR (MP_QSTR_deinit ), MP_ROM_PTR (& machine_qencd_deinit_obj ) },
559
- { MP_ROM_QSTR (MP_QSTR_match ), MP_ROM_PTR (& machine_qencd_match_obj ) },
560
545
{ MP_ROM_QSTR (MP_QSTR_init ), MP_ROM_PTR (& machine_qencd_init_obj ) },
561
546
{ MP_ROM_QSTR (MP_QSTR_irq ), MP_ROM_PTR (& machine_qencd_irq_obj ) },
562
547
{ MP_ROM_QSTR (MP_QSTR_value ), MP_ROM_PTR (& machine_qencd_value_obj ) },
@@ -581,14 +566,13 @@ const mp_obj_type_t machine_qencd_type = {
581
566
582
567
STATIC void mp_machine_counter_init_helper (machine_qencd_obj_t * self ,
583
568
size_t n_args , const mp_obj_t * pos_args , mp_map_t * kw_args ) {
584
- enum { ARG_src , ARG_direction , ARG_match_pin , ARG_filter_ns , ARG_cpc , ARG_match , ARG_signed , ARG_index };
569
+ enum { ARG_src , ARG_direction , ARG_match_pin , ARG_filter_ns , ARG_cpc , ARG_signed , ARG_index };
585
570
static const mp_arg_t allowed_args [] = {
586
571
{ MP_QSTR_src , MP_ARG_OBJ , {.u_rom_obj = mp_const_none } },
587
572
{ MP_QSTR_direction , MP_ARG_KW_ONLY | MP_ARG_OBJ , {.u_rom_obj = MP_ROM_INT (-1 )} },
588
573
{ MP_QSTR_match_pin , MP_ARG_KW_ONLY | MP_ARG_OBJ , {.u_rom_obj = MP_ROM_INT (-1 )} },
589
574
{ MP_QSTR_filter_ns , MP_ARG_KW_ONLY | MP_ARG_INT , {.u_int = -1 } },
590
575
{ MP_QSTR_cpc , MP_ARG_KW_ONLY | MP_ARG_OBJ , {.u_rom_obj = mp_const_none } },
591
- { MP_QSTR_match , MP_ARG_KW_ONLY | MP_ARG_OBJ , {.u_rom_obj = mp_const_none } },
592
576
{ MP_QSTR_signed , MP_ARG_KW_ONLY | MP_ARG_INT , {.u_int = -1 } },
593
577
{ MP_QSTR_index , MP_ARG_KW_ONLY | MP_ARG_OBJ , {.u_rom_obj = MP_ROM_INT (-1 )} },
594
578
};
@@ -680,7 +664,6 @@ MP_DEFINE_CONST_FUN_OBJ_KW(machine_counter_init_obj, 1, machine_counter_init);
680
664
681
665
STATIC const mp_rom_map_elem_t machine_counter_locals_dict_table [] = {
682
666
{ MP_ROM_QSTR (MP_QSTR_deinit ), MP_ROM_PTR (& machine_qencd_deinit_obj ) },
683
- { MP_ROM_QSTR (MP_QSTR_match ), MP_ROM_PTR (& machine_qencd_match_obj ) },
684
667
{ MP_ROM_QSTR (MP_QSTR_value ), MP_ROM_PTR (& machine_qencd_value_obj ) },
685
668
{ MP_ROM_QSTR (MP_QSTR_cycles ), MP_ROM_PTR (& machine_qencd_cycles_obj ) },
686
669
{ MP_ROM_QSTR (MP_QSTR_init ), MP_ROM_PTR (& machine_counter_init_obj ) },
0 commit comments