AnsweredAssumed Answered

Divide by 2 PWM using FTM in Kinetis K60

Question asked by Satish Acharya on Jul 3, 2019
Latest reply on Jul 5, 2019 by Robin_Shen



In MK60DN256VLL10, I'm trying to generate 25MHz PWM with 50% duty cycle (using 50MHz external clock) in Edge aligned mode. System clock and Core clock = 100MHz and Bus Clock = 50MHz.


According to the reference manual, FTM period in edge aligned mode = (MOD - CNTIN + 0x1) and duty cycle = (CnV - CNTIN). So, to generate 25MHz, MOD must be 1, CNTIN must be 0 and CnV must be 1.


When I set these manually, I do see 25MHz PWM being generated on the scope.


However, the SDK/MCUXpresso cannot seem to set CnV correctly for this condition. I think issue seems to be in the code below in fsl_ftm.c (exists in more than 1 place).

mod = base->MOD;
if ((currentPwmMode == kFTM_EdgeAlignedPwm) || (currentPwmMode == kFTM_CenterAlignedPwm))
cnv = (mod * dutyCyclePercent) / 100;
/* For 100% duty cycle */
if (cnv >= mod)
cnv = mod + 1;
base->CONTROLS[chnlNumber].CnV = cnv;

In our case, mod = 1 and dutyCyclePercent = 50. So, cnv remains 0. We want cnv to be 1, I think.


Please let me know if I'm configuring FTM improperly. If you can generate 25MHz PWM using external 50MHz clock via MCUXpresso, please let me know the FTM configuration . I tried various settings via the Peripheral tool of MCUXpresso but was unsuccessful. For now, I have hacked the fsl_ftm.c code and got it to work. If it is a bug in SDK, please plan to fix it in the next revision as soon as possible.