@@ -59,7 +59,7 @@ static const char *TAG = "pwm";
59
59
60
60
typedef struct {
61
61
uint32_t duty ; /*!< pwm duty for each channel */
62
- int16_t phase ; /*!< pwm phase for each channel */
62
+ float phase ; /*!< pwm phase for each channel */
63
63
uint8_t io_num ; /*!< pwm io_num for each channel */
64
64
} pwm_info_t ;
65
65
@@ -113,13 +113,13 @@ static void pwm_phase_init(void)
113
113
114
114
for (i = 0 ; i < pwm_obj -> channel_num ; i ++ ) {
115
115
if (-180 < pwm_obj -> pwm_info [i ].phase && pwm_obj -> pwm_info [i ].phase < 0 ) {
116
- time_delay = 0 - ((0 - pwm_obj -> pwm_info [i ].phase ) * pwm_obj -> depth / 360 );
116
+ time_delay = ( int32_t )( 0 - ((0 - pwm_obj -> pwm_info [i ].phase ) * pwm_obj -> depth / 360.0 ) );
117
117
} else if (pwm_obj -> pwm_info [i ].phase == 0 ) {
118
118
continue ;
119
- } else if (180 > pwm_obj -> pwm_info [i ].phase && pwm_obj -> pwm_info [i ].phase > 0 ) {
120
- time_delay = pwm_obj -> pwm_info [i ].phase * pwm_obj -> depth / 360 ;
119
+ } else if (180 >= pwm_obj -> pwm_info [i ].phase && pwm_obj -> pwm_info [i ].phase > 0 ) {
120
+ time_delay = ( int32_t )( pwm_obj -> pwm_info [i ].phase * pwm_obj -> depth / 360.0 ) ;
121
121
} else {
122
- ESP_LOGE (TAG , "channel[%d] phase error %d , valid ramge from (-180,180) \n" , i , pwm_obj -> pwm_info [i ].phase );
122
+ ESP_LOGE (TAG , "channel[%d] phase error %f , valid ramge from (-180,180] \n" , i , pwm_obj -> pwm_info [i ].phase );
123
123
continue ;
124
124
}
125
125
@@ -224,7 +224,7 @@ esp_err_t pwm_set_period_duties(uint32_t period, uint32_t *duties)
224
224
return ESP_OK ;
225
225
}
226
226
227
- esp_err_t pwm_set_phase (uint8_t channel_num , int16_t phase )
227
+ esp_err_t pwm_set_phase (uint8_t channel_num , float phase )
228
228
{
229
229
PWM_CHECK (channel_num < pwm_obj -> channel_num , "Channel num error" , ESP_ERR_INVALID_ARG );
230
230
@@ -233,7 +233,7 @@ esp_err_t pwm_set_phase(uint8_t channel_num, int16_t phase)
233
233
return ESP_OK ;
234
234
}
235
235
236
- esp_err_t pwm_set_phases (int16_t * phases )
236
+ esp_err_t pwm_set_phases (float * phases )
237
237
{
238
238
uint8_t i ;
239
239
PWM_CHECK (NULL != phases , "Pointer is empty" , ESP_ERR_INVALID_ARG );
@@ -246,7 +246,7 @@ esp_err_t pwm_set_phases(int16_t *phases)
246
246
return ESP_OK ;
247
247
}
248
248
249
- esp_err_t pwm_get_phase (uint8_t channel_num , uint16_t * phase_p )
249
+ esp_err_t pwm_get_phase (uint8_t channel_num , float * phase_p )
250
250
{
251
251
PWM_CHECK (channel_num < pwm_obj -> channel_num , "Channel num error" , ESP_ERR_INVALID_ARG );
252
252
PWM_CHECK (NULL != phase_p , "Pointer is empty" , ESP_ERR_INVALID_ARG );
@@ -310,6 +310,7 @@ static void IRAM_ATTR pwm_timer_intr_handler(void)
310
310
pwm_obj -> this_target = AHEAD_TICKS1 + AHEAD_TICKS3 ;
311
311
}
312
312
313
+ REG_WRITE (WDEVTSF0TIMER_ENA , 0 );
313
314
REG_WRITE (WDEVTSFSW0_LO , 0 );
314
315
//WARNING, pwm_obj->this_target - AHEAD_TICKS1 should be bigger than 2
315
316
REG_WRITE (WDEVTSF0_TIMER_LO , pwm_obj -> this_target - AHEAD_TICKS1 );
0 commit comments