arch/arm/src/imxrt/imxrt_flexpwm.c: fix mistake in submodules address offset

Signed-off-by: Michal Lenc <michallenc@seznam.cz>
This commit is contained in:
Michal Lenc 2021-06-28 14:46:02 +02:00 committed by Xiang Xiao
parent 8452c571ec
commit b36171026e

View File

@ -711,6 +711,7 @@ static int pwm_setup(FAR struct pwm_lowerhalf_s *dev)
FAR struct imxrt_flexpwm_s *priv = (FAR struct imxrt_flexpwm_s *)dev; FAR struct imxrt_flexpwm_s *priv = (FAR struct imxrt_flexpwm_s *)dev;
uint32_t pin = 0; uint32_t pin = 0;
uint16_t regval; uint16_t regval;
uint8_t shift;
putreg16(FCTRL0_FLVL(15), priv->base + IMXRT_FLEXPWM_FCTRL0_OFFSET); putreg16(FCTRL0_FLVL(15), priv->base + IMXRT_FLEXPWM_FCTRL0_OFFSET);
putreg16(0x000f, priv->base + IMXRT_FLEXPWM_FSTS0_OFFSET); putreg16(0x000f, priv->base + IMXRT_FLEXPWM_FSTS0_OFFSET);
@ -748,8 +749,10 @@ static int pwm_setup(FAR struct pwm_lowerhalf_s *dev)
} }
} }
shift = priv->modules[i].module - 1;
regval = getreg16(priv->base + IMXRT_FLEXPWM_MCTRL_OFFSET); regval = getreg16(priv->base + IMXRT_FLEXPWM_MCTRL_OFFSET);
regval |= MCTRL_CLDOK(1 << i); regval |= MCTRL_CLDOK(1 << shift);
putreg16(regval, priv->base + IMXRT_FLEXPWM_MCTRL_OFFSET); putreg16(regval, priv->base + IMXRT_FLEXPWM_MCTRL_OFFSET);
/* Set control registers 1 and 2 */ /* Set control registers 1 and 2 */
@ -760,49 +763,49 @@ static int pwm_setup(FAR struct pwm_lowerhalf_s *dev)
regval = SMCTRL2_INDEP; regval = SMCTRL2_INDEP;
putreg16(regval, priv->base + IMXRT_FLEXPWM_SM0CTRL2_OFFSET putreg16(regval, priv->base + IMXRT_FLEXPWM_SM0CTRL2_OFFSET
+ MODULE_OFFSET * i); + MODULE_OFFSET * shift);
} }
regval = SMCTRL_FULL; /* Enable full read cycle reload */ regval = SMCTRL_FULL; /* Enable full read cycle reload */
putreg16(regval, priv->base + IMXRT_FLEXPWM_SM0CTRL_OFFSET putreg16(regval, priv->base + IMXRT_FLEXPWM_SM0CTRL_OFFSET
+ MODULE_OFFSET * i); + MODULE_OFFSET * shift);
/* Set output control register */ /* Set output control register */
putreg16(0, priv->base + IMXRT_FLEXPWM_SM0OCTRL_OFFSET putreg16(0, priv->base + IMXRT_FLEXPWM_SM0OCTRL_OFFSET
+ MODULE_OFFSET * i); + MODULE_OFFSET * shift);
/* Set deadtime count register 0 */ /* Set deadtime count register 0 */
putreg16(0, priv->base + IMXRT_FLEXPWM_SM0DTCNT0_OFFSET putreg16(0, priv->base + IMXRT_FLEXPWM_SM0DTCNT0_OFFSET
+ MODULE_OFFSET * i); + MODULE_OFFSET * shift);
/* Set initial count register */ /* Set initial count register */
putreg16(0, priv->base + IMXRT_FLEXPWM_SM0INIT_OFFSET putreg16(0, priv->base + IMXRT_FLEXPWM_SM0INIT_OFFSET
+ MODULE_OFFSET * i); + MODULE_OFFSET * shift);
/* Set value registers */ /* Set value registers */
putreg16(0, priv->base + IMXRT_FLEXPWM_SM0VAL0_OFFSET putreg16(0, priv->base + IMXRT_FLEXPWM_SM0VAL0_OFFSET
+ MODULE_OFFSET * i); + MODULE_OFFSET * shift);
putreg16(0x82b8, priv->base + IMXRT_FLEXPWM_SM0VAL1_OFFSET putreg16(0x82b8, priv->base + IMXRT_FLEXPWM_SM0VAL1_OFFSET
+ MODULE_OFFSET * i); + MODULE_OFFSET * shift);
putreg16(0, priv->base + IMXRT_FLEXPWM_SM0VAL2_OFFSET putreg16(0, priv->base + IMXRT_FLEXPWM_SM0VAL2_OFFSET
+ MODULE_OFFSET * i); + MODULE_OFFSET * shift);
putreg16(0, priv->base + IMXRT_FLEXPWM_SM0VAL3_OFFSET putreg16(0, priv->base + IMXRT_FLEXPWM_SM0VAL3_OFFSET
+ MODULE_OFFSET * i); + MODULE_OFFSET * shift);
putreg16(0, priv->base + IMXRT_FLEXPWM_SM0VAL4_OFFSET putreg16(0, priv->base + IMXRT_FLEXPWM_SM0VAL4_OFFSET
+ MODULE_OFFSET * i); + MODULE_OFFSET * shift);
putreg16(0, priv->base + IMXRT_FLEXPWM_SM0VAL5_OFFSET putreg16(0, priv->base + IMXRT_FLEXPWM_SM0VAL5_OFFSET
+ MODULE_OFFSET * i); + MODULE_OFFSET * shift);
regval = getreg16(priv->base + IMXRT_FLEXPWM_MCTRL_OFFSET); regval = getreg16(priv->base + IMXRT_FLEXPWM_MCTRL_OFFSET);
regval |= MCTRL_LDOK(1 << i); regval |= MCTRL_LDOK(1 << shift);
putreg16(regval, priv->base + IMXRT_FLEXPWM_MCTRL_OFFSET); putreg16(regval, priv->base + IMXRT_FLEXPWM_MCTRL_OFFSET);
regval = getreg16(priv->base + IMXRT_FLEXPWM_MCTRL_OFFSET); regval = getreg16(priv->base + IMXRT_FLEXPWM_MCTRL_OFFSET);
regval |= MCTRL_RUN(1 << i); regval |= MCTRL_RUN(1 << shift);
putreg16(regval, priv->base + IMXRT_FLEXPWM_MCTRL_OFFSET); putreg16(regval, priv->base + IMXRT_FLEXPWM_MCTRL_OFFSET);
} }