Merge pull request #7716 from MateuszMaz/#issue5119_pwm_fix

Fix issue #5119, changed pwmout_api.
pull/7803/head
Cruz Monrreal 2018-08-15 16:12:41 -05:00 committed by GitHub
commit c4e814d9cc
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
1 changed files with 19 additions and 2 deletions

View File

@ -124,8 +124,25 @@ void pwmout_period_us(pwmout_t* obj, int us)
FTM_Type *base = ftm_addrs[obj->pwm_name >> TPM_SHIFT];
float dc = pwmout_read(obj);
// Stop FTM clock to ensure instant update of MOD register
base->MOD = FTM_MOD_MOD((pwm_clock_mhz * (float)us) - 1);
uint32_t pwm_base_clock;
uint32_t clkdiv = 0;
pwm_base_clock = CLOCK_GetFreq(kCLOCK_BusClk);
pwm_clock_mhz = (float) pwm_base_clock / 1000000.0f;
uint32_t mod = (pwm_clock_mhz * (float) us) - 1;
while (mod > 0xFFFF) {
++clkdiv;
pwm_clock_mhz /= 2.0f;
mod = (pwm_clock_mhz * (float) us) - 1;
if (clkdiv == 7) {
break;
}
}
uint32_t SC = base->SC & ~FTM_SC_PS_MASK;
SC |= FTM_SC_PS((ftm_clock_prescale_t) clkdiv);
base->SC = SC;
//Stop FTM clock to ensure instant update of MOD register
base->MOD = FTM_MOD_MOD(mod);
pwmout_write(obj, dc);
}