void prep_pwm_steps(){ if(pwm_mask == 0){ pwm_steps_len = 0; return; } int pwm_temp_steps_len = 0; uint16_t pwm_temp_steps[17]; uint32_t pwm_temp_masks[17]; int i; for(i=0; i<17; i++){ if((pwm_mask & (1 << i)) != 0 && pwm_values[i] != 0) pwm_temp_steps[pwm_temp_steps_len++] = pwm_values[i]; } pwm_temp_steps[pwm_temp_steps_len++] = pwm_range; pwm_temp_steps_len = pwm_sort_array(pwm_temp_steps, pwm_temp_steps_len) - 1; for(i=0; i<pwm_temp_steps_len; i++){ pwm_temp_masks[i] = pwm_get_mask(pwm_temp_steps[i]); } for(i=pwm_temp_steps_len; i>0; i--){ pwm_temp_steps[i] = pwm_temp_steps[i] - pwm_temp_steps[i-1]; } ETS_FRC1_INTR_DISABLE(); pwm_steps_len = pwm_temp_steps_len; ets_memcpy(pwm_steps, pwm_temp_steps, (pwm_temp_steps_len + 1) * 2); ets_memcpy(pwm_steps_mask, pwm_temp_masks, pwm_temp_steps_len * 4); pwm_multiplier = ESP8266_CLOCK/(pwm_range * pwm_freq); ETS_FRC1_INTR_ENABLE(); }
void prep_pwm_steps() { if(pwm_mask == 0) { return; } int pwm_temp_steps_len = 0; uint16_t pwm_temp_steps[17]; uint32_t pwm_temp_masks[17]; uint32_t range = pwm_range; if((F_CPU / ESP8266_CLOCK) == 1) { range /= 2; } int i; for(i=0; i<17; i++) { if((pwm_mask & (1 << i)) != 0 && pwm_values[i] != 0) { pwm_temp_steps[pwm_temp_steps_len++] = pwm_values[i]; } } pwm_temp_steps[pwm_temp_steps_len++] = range; pwm_temp_steps_len = pwm_sort_array(pwm_temp_steps, pwm_temp_steps_len) - 1; for(i=0; i<pwm_temp_steps_len; i++) { pwm_temp_masks[i] = pwm_get_mask(pwm_temp_steps[i]); } for(i=pwm_temp_steps_len; i>0; i--) { pwm_temp_steps[i] = pwm_temp_steps[i] - pwm_temp_steps[i-1]; } pwm_steps_changed = 0; struct pwm_isr_table *table = &(_pwm_isr_data.tables[!_pwm_isr_data.active]); table->len = pwm_temp_steps_len; ets_memcpy(table->steps, pwm_temp_steps, (pwm_temp_steps_len + 1) * 2); ets_memcpy(table->masks, pwm_temp_masks, pwm_temp_steps_len * 4); pwm_multiplier = ESP8266_CLOCK/(range * pwm_freq); pwm_steps_changed = 1; }