@@ -299,42 +299,43 @@ static uint32_t get_duty_ns(machine_pwm_obj_t *self) {
299
299
return duty_to_ns (self , get_duty_u16 (self ));
300
300
}
301
301
302
- static void set_duty_u16 (machine_pwm_obj_t * self , int duty ) {
302
+ static void check_duty_u16 (machine_pwm_obj_t * self , int duty ) {
303
303
if ((duty < 0 ) || (duty > MAX_16_DUTY )) {
304
304
mp_raise_msg_varg (& mp_type_ValueError , MP_ERROR_TEXT ("duty_u16 must be from 0 to %d" ), MAX_16_DUTY );
305
305
}
306
-
307
306
self -> duty_scale = DUTY_16 ;
308
307
self -> duty_ui = duty ;
308
+ }
309
+
310
+ static void set_duty_u16 (machine_pwm_obj_t * self , int duty ) {
311
+ check_duty_u16 (self , duty );
309
312
apply_duty (self );
310
313
}
311
314
312
- static void set_duty_u10 (machine_pwm_obj_t * self , int duty ) {
315
+ static void check_duty_u10 (machine_pwm_obj_t * self , int duty ) {
313
316
if ((duty < 0 ) || (duty > MAX_10_DUTY )) {
314
317
mp_raise_msg_varg (& mp_type_ValueError , MP_ERROR_TEXT ("duty must be from 0 to %u" ), MAX_10_DUTY );
315
318
}
316
319
self -> duty_scale = DUTY_10 ;
317
320
self -> duty_ui = duty ;
321
+ }
322
+
323
+ static void set_duty_u10 (machine_pwm_obj_t * self , int duty ) {
324
+ check_duty_u10 (self , duty );
318
325
apply_duty (self );
319
326
}
320
327
321
- static void set_duty_ns (machine_pwm_obj_t * self , int ns ) {
328
+ static void check_duty_ns (machine_pwm_obj_t * self , int ns ) {
322
329
if ((ns < 0 ) || (ns > duty_to_ns (self , MAX_16_DUTY ))) {
323
330
mp_raise_msg_varg (& mp_type_ValueError , MP_ERROR_TEXT ("duty_ns must be from 0 to %d ns" ), duty_to_ns (self , MAX_16_DUTY ));
324
331
}
325
332
self -> duty_scale = DUTY_NS ;
326
333
self -> duty_ui = ns ;
327
- apply_duty (self );
328
334
}
329
335
330
- static void set_duty (machine_pwm_obj_t * self ) {
331
- if (self -> duty_scale == DUTY_16 ) {
332
- set_duty_u16 (self , self -> duty_ui );
333
- } else if (self -> duty_scale == DUTY_10 ) {
334
- set_duty_u10 (self , self -> duty_ui );
335
- } else if (self -> duty_scale == DUTY_NS ) {
336
- set_duty_ns (self , self -> duty_ui );
337
- }
336
+ static void set_duty_ns (machine_pwm_obj_t * self , int ns ) {
337
+ check_duty_ns (self , ns );
338
+ apply_duty (self );
338
339
}
339
340
340
341
#if !(CONFIG_IDF_TARGET_ESP32 || CONFIG_IDF_TARGET_ESP32S2 )
@@ -518,7 +519,13 @@ static void select_timer(machine_pwm_obj_t *self, int freq) {
518
519
}
519
520
}
520
521
521
- /******************************************************************************/
522
+ static void set_freq_duty (machine_pwm_obj_t * self , unsigned int freq ) {
523
+ select_timer (self , freq );
524
+ set_freq (self , freq );
525
+ apply_duty (self );
526
+ }
527
+
528
+ // ******************************************************************************
522
529
// MicroPython bindings for PWM
523
530
524
531
static void mp_machine_pwm_print (const mp_print_t * print , mp_obj_t self_in , mp_print_kind_t kind ) {
@@ -585,14 +592,11 @@ static void mp_machine_pwm_init_helper(machine_pwm_obj_t *self,
585
592
int duty_u16 = args [ARG_duty_u16 ].u_int ;
586
593
int duty_ns = args [ARG_duty_ns ].u_int ;
587
594
if (duty_u16 >= 0 ) {
588
- self -> duty_scale = DUTY_16 ;
589
- self -> duty_ui = duty_u16 ;
595
+ check_duty_u16 (self , duty_u16 );
590
596
} else if (duty_ns >= 0 ) {
591
- self -> duty_scale = DUTY_NS ;
592
- self -> duty_ui = duty_ns ;
597
+ check_duty_ns (self , duty_ns );
593
598
} else if (duty >= 0 ) {
594
- self -> duty_scale = DUTY_10 ;
595
- self -> duty_ui = duty ;
599
+ check_duty_u10 (self , duty );
596
600
} else if (self -> duty_scale == 0 ) {
597
601
self -> duty_scale = DUTY_16 ;
598
602
self -> duty_ui = PWM_DUTY ;
@@ -623,10 +627,7 @@ static void mp_machine_pwm_init_helper(machine_pwm_obj_t *self,
623
627
freq = PWM_FREQ ;
624
628
}
625
629
}
626
-
627
- select_timer (self , freq );
628
- set_freq (self , freq );
629
- set_duty (self );
630
+ set_freq_duty (self , freq );
630
631
}
631
632
632
633
static void self_reset (machine_pwm_obj_t * self ) {
@@ -685,9 +686,7 @@ static void mp_machine_pwm_freq_set(machine_pwm_obj_t *self, mp_int_t freq) {
685
686
if (freq == timers [self -> mode ][self -> timer ].freq ) {
686
687
return ;
687
688
}
688
- select_timer (self , freq );
689
- set_freq (self , freq );
690
- set_duty (self );
689
+ set_freq_duty (self , freq );
691
690
}
692
691
693
692
static mp_obj_t mp_machine_pwm_duty_get (machine_pwm_obj_t * self ) {
0 commit comments