@@ -47,6 +47,15 @@ volatile uint16_t current_duty_cycle;
47
47
static uint32_t min_pulse = 0 ;
48
48
static alarm_id_t cur_alarm ;
49
49
50
+ void turn_off (uint8_t slice ) {
51
+ pwm_hw -> slice [slice ].ctr = 0 ;
52
+ pwm_hw -> slice [slice ].cc = 0 ;
53
+ pwm_hw -> slice [slice ].top = 0 ;
54
+ pwm_hw -> slice [slice ].div = 1u << PWM_CH0_DIV_INT_LSB ;
55
+ pwm_hw -> slice [slice ].csr = PWM_CH0_CSR_EN_BITS ;
56
+ pwm_hw -> slice [slice ].csr = 0 ;
57
+ }
58
+
50
59
void pulse_finish (pwmio_pwmout_obj_t * carrier ) {
51
60
pulse_index ++ ;
52
61
// Turn pwm pin off by setting duty cyle to 1.
@@ -88,6 +97,7 @@ void common_hal_pulseio_pulseout_construct(pulseio_pulseout_obj_t *self,
88
97
pwmout_obj = (pwmio_pwmout_obj_t * )carrier ;
89
98
current_duty_cycle = common_hal_pwmio_pwmout_get_duty_cycle (pwmout_obj );
90
99
pwm_set_enabled (carrier -> slice ,false);
100
+ turn_off (carrier -> slice );
91
101
common_hal_pwmio_pwmout_set_duty_cycle (pwmout_obj ,1 );
92
102
self -> pin = carrier -> pin -> number ;
93
103
self -> slice = carrier -> slice ;
@@ -132,11 +142,6 @@ void common_hal_pulseio_pulseout_send(pulseio_pulseout_obj_t *self, uint16_t *pu
132
142
RUN_BACKGROUND_TASKS ;
133
143
}
134
144
// Ensure pin is left low
135
- pwm_hw -> slice [self -> slice ].ctr = 0 ;
136
- pwm_hw -> slice [self -> slice ].cc = 0 ;
137
- pwm_hw -> slice [self -> slice ].top = 0 ;
138
- pwm_hw -> slice [self -> slice ].div = 1u << PWM_CH0_DIV_INT_LSB ;
139
- pwm_hw -> slice [self -> slice ].csr = PWM_CH0_CSR_EN_BITS ;
140
- pwm_hw -> slice [self -> slice ].csr = 0 ;
145
+ turn_off (self -> slice );
141
146
pwm_set_enabled (self -> slice ,false);
142
147
}
0 commit comments